|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
求助:利用定時(shí)中斷可以消除按鍵抖動(dòng)嗎? |
| 作者:yudehenji 欄目:單片機(jī) |
各位大蝦,小弟現(xiàn)在遇到了按鍵抖動(dòng)問(wèn)題。小弟的想法是這樣的:先設(shè)定時(shí)器20ms溢出中斷一次,在中斷服務(wù)子程序中去讀按鍵的狀態(tài),如果連續(xù)兩次讀取的狀態(tài)都為按下,那么就可以確定按鍵確實(shí)是按下了,F(xiàn)在用到了3個(gè)按鍵。不知道這樣是否行得通?解決過(guò)這個(gè)問(wèn)題的高手給點(diǎn)意見,謝謝大家了! |
| 2樓: | >>參與討論 |
| 作者: 興隆 于 2005/1/21 12:41:00 發(fā)布:
當(dāng)然可以。 |
|
| 3樓: | >>參與討論 |
| 作者: diagram 于 2005/1/21 13:40:00 發(fā)布:
利用定時(shí)中斷可以消除按鍵抖動(dòng)嗎? 你的想法是否為每隔20ms讀一次按鍵?這樣會(huì)不會(huì)漏掉按鍵?你所用按鍵彈性如何?把你的測(cè)試結(jié)果告訴大家,ok? |
|
| 4樓: | >>參與討論 |
| 作者: zhuzhenseu 于 2005/1/21 14:16:00 發(fā)布:
re:這個(gè)問(wèn)題我也考慮了好久 我現(xiàn)在做的程序就是用這種方法消抖的,但是總感覺效果不大好,我是這么做的: 定時(shí)中斷每隔75MS掃描一次鍵盤狀態(tài),第一次掃描有按鍵按下n0=0,第二次掃描有按鍵按下n1=0;當(dāng)n0=n1=0,則表示有按鍵按下,標(biāo)志值key賦值,同時(shí)把把n0的值改為1,防止馬上的掃描又判斷為有按鍵. 我的這個(gè)方式在程序中試過(guò),感覺按鍵不是很靈敏,我想這個(gè)方法有公版的程序.不知哪位大俠能否賜教一二. 我的email:zhuzhenseu@163.com |
|
| 5樓: | >>參與討論 |
| 作者: xymxym 于 2005/1/21 20:43:00 發(fā)布:
每隔10ms掃描一次不就行了? 如果用75ms掃描一次,第一次掃描到有鍵按下時(shí)需再過(guò)75ms才會(huì)讀到鍵值,這樣相當(dāng)于要75ms*2的時(shí)間才能得到一個(gè)鍵值,給人的感覺肯定會(huì)有點(diǎn)脫滯! |
|
| 6樓: | >>參與討論 |
| 作者: 12864 于 2005/1/21 20:54:00 發(fā)布:
搞清幾個(gè)按鍵的過(guò)程標(biāo)志即可 每20ms檢測(cè)一下鍵盤,如果有按鍵,就置位key_down,然后下20ms再次檢測(cè),如果按鍵還在(去抖),那么key_down就過(guò)渡到key_press,這時(shí)候就可以執(zhí)行對(duì)應(yīng)按鍵操作了;接下來(lái)以后每20ms檢測(cè)一次按鍵是否抬起,如果抬起,就置位key_up,下20ms再次檢測(cè)是否抬起(去抖),如果抬起就不管了。 如果要檢測(cè)連續(xù)鍵,可以在key_press中進(jìn)行,專門有個(gè)變量用于定時(shí)計(jì)數(shù),每超過(guò)一定時(shí)間(200ms,第一次進(jìn)入要700ms)就執(zhí)行一次該鍵操作。 |
|
| 7樓: | >>參與討論 |
| 作者: yudehenji 于 2005/1/22 10:17:00 發(fā)布:
感謝!問(wèn)一下,如果按鍵機(jī)械性能比較好的話,是否可以不去抖動(dòng)? |
|
| 8樓: | >>參與討論 |
| 作者: yudehenji 于 2005/1/22 10:19:00 發(fā)布:
大家可否有按鍵消抖的程序?貼出來(lái),探討一下! |
|
| 9樓: | >>參與討論 |
| 作者: diagram 于 2005/1/22 19:24:00 發(fā)布:
利用定時(shí)中斷可以消除按鍵抖動(dòng)嗎? 按鍵去枓時(shí)間一般在10-20ms之間,依機(jī)械特性定.掃描時(shí)間周期在1ms左右比較合適. |
|
| 10樓: | >>參與討論 |
| 作者: forthlab 于 2005/1/22 19:42:00 發(fā)布:
我一直就是這么做的,當(dāng)然可以. 用定時(shí)中斷,20-50ms 在中斷里面讀鍵盤,直接讀就可以的,不要去抖動(dòng)的! |
|
| 11樓: | >>參與討論 |
| 作者: jimsboy 于 2005/1/22 23:31:00 發(fā)布:
可以 一般的消抖都是中斷,delay10mS然后判斷。如果還是按下則執(zhí)行相應(yīng)程序。 我設(shè)計(jì)的是中斷中只讓它起動(dòng)定時(shí)器。在定時(shí)器溢出中如果有按鍵按下則執(zhí)行相程序 |
|
| 12樓: | >>參與討論 |
| 作者: SDLYTHY 于 2005/1/23 12:57:00 發(fā)布:
如果鍵盤和顯示用同一片MCU. 我把顯示做成子程序,檢測(cè)鍵盤,如果有按鍵,就調(diào)用顯示子程,再檢測(cè)鍵盤,如果有按鍵序,進(jìn)行相應(yīng)處理,顯示沒有任何抖動(dòng). |
|
| 13樓: | >>參與討論 |
| 作者: chz112 于 2005/1/23 13:03:00 發(fā)布:
可以 |
|
| 14樓: | >>參與討論 |
| 作者: gzwlym 于 2005/1/23 13:11:00 發(fā)布:
OK 沒問(wèn)題的 我一直這樣用 |
|
| 15樓: | >>參與討論 |
| 作者: stiffen 于 2005/1/23 13:22:00 發(fā)布:
Other way! 為什么不考慮考慮用硬件電路解決呢? 去抖動(dòng)電路很多的嗎 |
|
| 16樓: | >>參與討論 |
| 作者: guocherish 于 2005/1/23 13:37:00 發(fā)布:
兩次間隔10ms就可以了,就是這樣的 |
|
| 17樓: | >>參與討論 |
| 作者: 新手 于 2005/1/25 8:24:00 發(fā)布:
以你的開關(guān)用途而定,我檢測(cè)機(jī)械開關(guān),中斷延時(shí)500ms檢測(cè)一次 * - 本貼最后修改時(shí)間:2005-1-25 8:37:16 修改者:新手 |
|
| 18樓: | >>參與討論 |
| 作者: fly1978 于 2005/1/25 8:49:00 發(fā)布:
www.zlgmcu.com上有一篇文章可以借鑒 http://www.zlgmcu.com/philips/yingrong/51lpc/p87lpc761_timerCTRL.pdf 利用P87LPC761單片機(jī)設(shè)計(jì)時(shí)間控制器 關(guān)于按鍵的處理可以看看 http://www.zlgmcu.com/philips/yingrong/51lpc/p87lpc761_timerctrl.pdf |
|
| 19樓: | >>參與討論 |
| 作者: xdwumin 于 2005/1/25 12:26:00 發(fā)布:
每1ms到20ms一次,前一次沒按下后一次按下則判為有按鍵 我一直這么用,效果不錯(cuò) |
|
| 20樓: | >>參與討論 |
| 作者: 新手 于 2005/1/28 8:33:00 發(fā)布:
堅(jiān)決不要這樣,軟件消抖很方便,不占多少資源 |
|
| 21樓: | >>參與討論 |
| 作者: sybaselu 于 2005/1/28 9:03:00 發(fā)布:
我是這樣的 做一個(gè)遙控按鍵接受程序,開始延時(shí)9ms高電平后延時(shí)4.5ms低電平。我用延時(shí)消除抖動(dòng)的,我做的延時(shí)程序是這樣的:大循環(huán)10次,小循環(huán)用j=108; while(--j)延時(shí)830us共延時(shí)8533us,但為什么不能將大循環(huán)改成108次,小循環(huán)改成10次呢(我這樣做接受端根本不解碼,)。都是延時(shí)9ms。空(qǐng)教! |
|
| 22樓: | >>參與討論 |
| 作者: sybaselu 于 2005/1/28 15:52:00 發(fā)布:
頂一次 |
|
| 23樓: | >>參與討論 |
| 作者: winhiwang 于 2005/1/28 15:56:00 發(fā)布:
估計(jì)應(yīng)該是總的執(zhí)行代碼數(shù)不同,如果用匯編就不會(huì)有這個(gè)現(xiàn)象了 |
|
| 24樓: | >>參與討論 |
| 作者: 潼關(guān)懷古 于 2005/1/28 16:37:00 發(fā)布:
如果 如果你不怕多占用一個(gè)外部中斷,可以用外部中斷控制TIMER的中斷,當(dāng)有外部中斷時(shí)才開TIMER中斷,隔N秒后再測(cè)試案件,并消除TIMER 中斷 |
|
| 25樓: | >>參與討論 |
| 作者: sharks 于 2005/1/29 1:12:00 發(fā)布:
xdwumin說(shuō)得非常對(duì)。。 抖動(dòng)時(shí)間一般〈20mS。如果每20毫秒讀取一次狀態(tài),無(wú)論如何抖動(dòng),前一次沒按下后一次按下 一定是有效按鍵! |
|
| 26樓: | >>參與討論 |
| 作者: hotpower 于 2005/1/29 1:43:00 發(fā)布:
N秒手感肯定不好... |
|
| 27樓: | >>參與討論 |
| 作者: 06202105 于 2005/1/29 9:54:00 發(fā)布:
sure 如果按踺不多的話,可以用一個(gè)RS觸發(fā)器,用硬件消除抖動(dòng)!如果考慮成本的話,可以延時(shí)20MS就成,簡(jiǎn)單實(shí)用 |
|
| 28樓: | >>參與討論 |
| 作者: AIRWILL 于 2005/1/29 11:08:00 發(fā)布:
此法我用了多次 很正常,只是時(shí)間可以縮短一些,而可以改二次確認(rèn)為3,4次確認(rèn) |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |