|
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
按鍵去抖動問題 |
作者:zhangli222 欄目:單片機(jī) |
按鍵如何去抖動?怎樣延時?有沒有可以參考的程序?請大蝦幫忙。多謝! |
2樓: | >>參與討論 |
作者: 有意思 于 2007/1/13 16:16:00 發(fā)布:
定時器 定時器2ms掃描,如果是低電平有按鍵,在T0中斷中讀出IO口為0則Count++; 直到一個值,如50,if(Count == 50)Key = 1; 中間只要有一次為1,則Count = 0; |
3樓: | >>參與討論 |
作者: zhangli222 于 2007/1/13 16:40:00 發(fā)布:
多謝 多謝,我再看一下,希望路過的大蝦多多指教。 |
4樓: | >>參與討論 |
作者: etual 于 2007/1/13 22:03:00 發(fā)布:
這個嘛 判斷有健 ---> 延時>20ms ----> 判斷是否有健,有的話操作,沒有的話跳出,大概流程是這樣 ,延時是肯定要的,具體時間要求不大,大于 10ms都沒有什么問題,看個人習(xí)慣了 ...... -- 最簡單的是死循環(huán),用指令來計(jì)時,(如果你一條指令 1us 的話,則原地循環(huán) 20000 次就OK,時間到),一般是雙重循環(huán)嵌套來做的。 以上就是所謂的教學(xué),基本上所有的教科書都會那樣說,但是,老實(shí)話,具體設(shè)計(jì)的時候這樣是行不通的,20ms是很長的時間啊,單片機(jī)可以做很多很多東西了 .......不可能用死循環(huán)的 ....... |
5樓: | >>參與討論 |
作者: hotpower 于 2007/1/13 22:05:00 發(fā)布:
典型的教條主義~~~ |
6樓: | >>參與討論 |
作者: liyong110 于 2007/1/14 11:26:00 發(fā)布:
很簡單的 分時掃描不就行了!!!!!!!! 連續(xù)2次得到同樣結(jié)果就認(rèn)為有效.不耽誤MCU效率!!!! 還能降低功耗!!!! 例如4*4鍵盤.用標(biāo)志位2個,寄存器(AUTO)3個!就什么都搞定了!!!! |
7樓: | >>參與討論 |
作者: maychang 于 2007/1/14 12:34:00 發(fā)布:
hotpower不厚道 說一句就走。 |
8樓: | >>參與討論 |
作者: 談的元 于 2007/1/14 13:48:00 發(fā)布:
就如liyong110說 就如liyong110說 , 檢測到有效時 積儲器加一,無效清零。 檢測積存器大于等于某值開命令。 程序開始 nop nop ;;;;;;;;; if(按鍵==有效 AND 積存器Q <M);M一般取個3-5就可以了。 積存器Q==積存器+1 if(按鍵==無效 ) 積存器Q==0 ;;;;;;;; ;;;;;;;;; if(積存器Q>=N);;當(dāng)然你的n要小于m 打開命令 if(積存器Q<N) 關(guān)命令 |
9樓: | >>參與討論 |
作者: dengm 于 2007/1/14 14:28:00 發(fā)布:
狀態(tài)機(jī)(ms basic) KEY_SCAN = 1 STATUS =0 SUB_SCAN: KEY = READ_KEY(KEY_SCAN) IF KEY_SCAN = KEY_MAX THEN KEY_SCAN =0 KEY_SCAN = KEY_SCAN + 1 ON STATUS GOTO ST_1, ST_2, ST_3 ST_0: IF KEY <> 0 THEN KEY_CODE = KEY KEY_DELAY = (KEY_MAX + 2) STATUS = 1 END IF EXIT SUB ST_1: IF KEY = KEY_CODE THEN KEY_DELAY = KEY_DELAY + KEY_MAX IF KEY_DELAY>(KEY_MAX + 10) THEN F_KEY_PRESS = TRUE STATUS = 2 END IF ELSE KEY_DELAY = KEY_DELAY - 1 IF KEY_DELAY=0 THEN STATUS =0 END IF EXIT SUB ST_2: KEY_DELAY=KEY_DELAY-1 IF KEY_DELAY=0 THEN STATUS =3 END IF EXIT SUB ST_3: IF NOT F_KEY_PRESS THEN KEY_CODE = 0 STATUS =0 END IF END SUB * - 本貼最后修改時間:2007-1-15 23:34:33 修改者:dengm |
10樓: | >>參與討論 |
作者: 有意思 于 2007/1/14 15:53:00 發(fā)布:
堅(jiān)決不用軟件延時 2ms定時掃描,有鍵,cnt++;直到指定次數(shù) 中間有一次為無鍵,cnt=0; 抗干擾 |
11樓: | >>參與討論 |
作者: hotpower 于 2007/1/14 16:04:00 發(fā)布:
倒塌了~~~這個問題確實(shí)不想多說了~~~ 在21ic這個問題和狗論可能是我灌水最多的... 現(xiàn)在想"吐"~~~倒塌了~~~ 看來哪天要來個"鍵盤論"了~~~ |
12樓: | >>參與討論 |
作者: lininglive 于 2007/1/14 16:14:00 發(fā)布:
暈暈乎沒有個高手來定論阿。! 暈暈乎沒有個高手來定論阿。!不要總說理論 有沒有實(shí)際經(jīng)驗(yàn)的說一說 |
13樓: | >>參與討論 |
作者: 有意思 于 2007/1/14 16:20:00 發(fā)布:
暈死 這個問題........ |
14樓: | >>參與討論 |
作者: 程序匠人 于 2007/1/14 16:49:00 發(fā)布:
按鍵處理相關(guān)文章 讓你一次倒塌個夠吧! 日志標(biāo)題 作者 日期 評論 C語言嵌入式系統(tǒng)編程修煉之道——鍵盤操作篇 cxjr 10-29 0 cxjr 10-19 7 單片機(jī)系統(tǒng)鍵盤的設(shè)計(jì)小結(jié) cxjr 10-12 0 經(jīng)典按鍵防抖動51匯編程序(zt) cxjr 10-12 1 經(jīng)典防抖動鍵C51源程序(zt) cxjr 10-12 0 《匠人手記》21《多種擊鍵類型的處理流程圖》.pdf cxjr 10-8 2 MSP430 按鍵程序范例(附原理圖) cxjr 9-20 0 HT6221/2解碼成標(biāo)準(zhǔn)的鍵值 cxjr 9-7 0 按鍵掃描驅(qū)動程序 cxjr 8-1 -2 一種用N+1個I/O口實(shí)現(xiàn)的N×N矩陣式鍵盤 cxjr 7-28 1 嵌入式人機(jī)界面中的鍵盤及其接口設(shè)計(jì) cxjr 6-25 1 關(guān)于單鍵開關(guān)電路的網(wǎng)游散記 cxjr 6-23 3 MSP430鍵盤程序 cxjr 6-18 0 一種軟件去除鍵抖動的方法 cxjr 6-17 2 按鍵程序設(shè)計(jì),可以處理加速鍵、一鍵多功能等情況(... cxjr 6-9 2 矩陣式鍵盤接口技術(shù)及編程 cxjr 4-26 0 一種另類的鍵盤擴(kuò)展方法 cxjr 3-13 0 基于MSP430F149單片機(jī)的鍵盤顯示系統(tǒng) cxjr 3-12 0 《匠人手記》12《單個按鍵多次擊鍵的檢測方法》.pdf cxjr 2-26 0 《匠人手記》11《按鍵漫談》.pdf cxjr 2-12 0 C語言嵌入式系統(tǒng)編程修煉之五:鍵盤操作! cxjr 1-10 1 平凡單片機(jī)教學(xué)——第二十五講 矩陣式鍵盤接口... cxjr 1-7 0 平凡單片機(jī)教學(xué)——第二十四講 鍵盤接口與編程 cxjr 1-7 0 4×4矩陣式鍵盤識別技術(shù)(3) cxjr 1-6 0 4×4矩陣式鍵盤識別技術(shù)(2) cxjr 1-6 0 4×4矩陣式鍵盤識別技術(shù)(1) cxjr 1-6 1 支持鍵盤雙擊事件的C程序設(shè)計(jì) cxjr 12-9 0 鍵盤接口軟件設(shè)計(jì) cxjr 11-10 0 CH451的LED驅(qū)動及8*8鍵盤驅(qū)動程序 cxjr 11-10 2 按鍵掃描驅(qū)動程序 cxjr 11-10 0 8條口線24按鍵的C51源程序 cxjr 11-10 0 AT89S51單片機(jī)試驗(yàn)及實(shí)踐教程之一鍵多功能按鍵識別... cxjr 11-9 0 cxjr 11-8 0 8個IO接36個按鍵(沒有用二極管)--鍵掃描程序 cxjr 10-22 0 cxjr 7-28 2 20鍵PS2小鍵盤中斷服務(wù)程序 cxjr 10-16 0 cxjr 9-29 0 cxjr 9-29 0 來自網(wǎng)友 xwj 的 按鍵程序設(shè)計(jì)方法 cxjr 9-13 0 ProtelDXP 快捷鍵大全 cxjr 9-6 0 日志標(biāo)題 作者 日期 評論 FREESCALE H08C鍵盤中斷子函數(shù)的頭文件"... cxjr 9-1 1 FREESCALE H08C鍵盤中斷子函數(shù)(c) cxjr 9-1 0 我是一個鍵盤 cxjr 8-23 0 支持鍵盤雙擊事件的C程序設(shè)計(jì) cxjr 8-17 0 一個比較通用的行列鍵盤程序(KEY .H) cxjr 8-17 0 一個比較通用的行列鍵盤程序(KEY.C) cxjr 8-17 2 單片機(jī)驅(qū)動標(biāo)準(zhǔn)PC機(jī)鍵盤的C51程序 cxjr 8-8 0 PC機(jī)鍵盤按鍵通碼與ASCII對照表 cxjr 8-8 0 《多個按鍵的連按處理技巧》大話篇 cxjr 6-1 5 《一個按鍵的多次擊鍵組合判別技巧》大話篇 cxjr 6-1 2 日志標(biāo)題 作者 日期 評論 96個key的零延時采集 cxjr 11-10 0 The PC's KEYBOARD. 點(diǎn)擊查看《按鍵處理相關(guān)文章》 |
15樓: | >>參與討論 |
作者: hotpower 于 2007/1/14 18:44:00 發(fā)布:
倒塌了~~~匠人數(shù)數(shù)里面有幾個"倒塌鍵盤"??? 哈哈~~~ |
16樓: | >>參與討論 |
作者: conwh 于 2007/1/14 19:18:00 發(fā)布:
高家莊的地道各有各的高招 |
17樓: | >>參與討論 |
作者: gezhi 于 2007/1/14 22:07:00 發(fā)布:
我相信這問題沒有權(quán)威的解決辦法。 這問題應(yīng)該根據(jù)實(shí)際應(yīng)用環(huán)境,選擇多次讀取,或延時確認(rèn)等。 |
18樓: | >>參與討論 |
作者: bird777 于 2007/1/15 0:07:00 發(fā)布:
玩泡泡 20鍵以上,hotpower不心痛RAM.我要心痛難過了.1個字節(jié)1條命! 一般如果RAM用量過剩,用用hotpower的偽OS比較爽. 事實(shí)上,當(dāng)RAM需求量大時,只有舍棄非典了. 中斷+dengm給出狀態(tài)機(jī)思路是永遠(yuǎn)正確的指導(dǎo)方針,即使非便攜式系統(tǒng)(不用省電),鍵盤掃描工作也要移到中斷函數(shù)中去管理(不一定要定時中斷,只要帶周期性的就可以).要好好理解,它的高度相當(dāng)于系統(tǒng)函數(shù). |
19樓: | >>參與討論 |
作者: yewuyi 于 2007/1/15 8:39:00 發(fā)布:
給出一段示范代碼 keyval=disport&keyall; if(keyval==0){keyvalbuf=0x00;keypresscnt=0x00;} //無鍵動作 else{ //有鍵動作 if(keyval==keyvalbuf){maincase=keyact;nullkey30s=1500;} //輸出一次鍵值 else{keypresscnt=0x00;keysingle=0;keycontinue=0;keyvalbuf=keyval;} //做消抖動作 } |
20樓: | >>參與討論 |
作者: xwj 于 2007/1/15 8:50:00 發(fā)布:
問之前先搜索,再問這種問題先打PP! |
21樓: | >>參與討論 |
作者: yewuyi 于 2007/1/15 8:50:00 發(fā)布:
說明一下: KEY復(fù)用到disport,有鍵工作為高電平,否則是低電平。 keyval=0表示所有的鍵都沒有按下。 把這一段加入到周期掃描里面去,具體鍵值執(zhí)行則由keyscan()決定,keyact決定執(zhí)行keyscan() 在keyscan()包含在main里面,所有的鍵狀態(tài)在里面解析。 這一段程序最多只支持8鍵定義,具體多少鍵有keyall參數(shù)決定。 鍵意解析、鍵單擊、長擊、復(fù)合鍵、按下有效、彈起有效等全部在keyscan()里面完成。 如果你看懂了這段示范,要支持更多的鍵就很容易了…… 明白了嗎? :::另一點(diǎn)我不同意在計(jì)算類如長擊時間時用減法,俺個人認(rèn)為用加法可以少用很多RAM,并且可以減短代碼。 |
22樓: | >>參與討論 |
作者: liyong110 于 2007/1/15 22:20:00 發(fā)布:
啊暈!!! 一個鍵盤居然引來如此多人啊! 大家討論點(diǎn)有價值的東西好不好啊! 大家問問題之前也想一想,這些東西就算沒做過只要用腦袋仔細(xì)想想就OK了!! 希望以后不在出現(xiàn)類似問題哦!! |
|
|
免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號 |