標(biāo)題: [分享]分享一下我用了十幾年的按鍵掃描方法 [打印本頁(yè)]

作者: 銘為科技    時(shí)間: 2013-7-22 11:43
標(biāo)題: [分享]分享一下我用了十幾年的按鍵掃描方法
看見(jiàn)大家發(fā)了那么多按鍵的處理方法,我也發(fā)一個(gè)。

剛參加工作的時(shí)候,對(duì)比學(xué)校里和同事的按鍵處理函數(shù),發(fā)現(xiàn)總是不盡如人意,
有以下幾點(diǎn):
1. 消抖復(fù)雜,效率低。很多人直接在電平判斷后使用delay()函數(shù),進(jìn)行消抖,
耽誤時(shí)間;有人在按鍵電平中斷中消抖,導(dǎo)致其他的中斷,比如串口、定時(shí)等
反應(yīng)很慢,不適合做實(shí)時(shí)系統(tǒng);
2. 特殊功能按鍵的處理麻煩。使用簡(jiǎn)單電平判斷的按鍵掃描,在需要長(zhǎng)按響應(yīng)、
復(fù)合按鍵響應(yīng)、復(fù)合按鍵長(zhǎng)按響應(yīng)的時(shí)候,需要增加很多的標(biāo)志位,反復(fù)使用
if..else判斷,有時(shí)候把自個(gè)都搞亂了。
3. 不便于移植和修改。使用以上兩點(diǎn)編寫的函數(shù),如果用在直接端口按鍵上的,
那么在行列掃描按鍵的時(shí)候,就很難適應(yīng)。導(dǎo)致每個(gè)項(xiàng)目都要更改一次。

想了很久之后,我結(jié)合PC的鍵盤處理方法,編寫了自己的按鍵函數(shù),經(jīng)過(guò)幾次修改,
定了下來(lái)。這十幾年來(lái),一直在用,方便移植,而且比較清晰。
——至少我自己這么覺(jué)得。

它有以下幾個(gè)特點(diǎn):
1. 按鍵掃描和取值分開(kāi)。
    在中斷中(一般10ms),反復(fù)調(diào)用keyScan()進(jìn)行按鍵掃描(包括消抖)。
    消抖之后的按鍵值不返回,作為消息放到全局變量中;
    在需要判斷的地方使用getKeyValue()獲取當(dāng)前的鍵值,進(jìn)行處理。

2. 每一個(gè)按鍵,都有單獨(dú)的標(biāo)志位和計(jì)時(shí)變量。
    消抖計(jì)時(shí):
    如果按鍵按下,每調(diào)用一次10ms中斷,gucKeyOkTimer增加;
    gucKeyOkTimer超過(guò)消抖的閥值(我一般10次,即100ms),則確認(rèn)有按鍵了。
    任何一次掃描到按鍵沒(méi)有按下,gucKeyOkTimer清空;

    標(biāo)志位:
    如果一直按著(通過(guò)按鍵電平判斷),會(huì)有g(shù)fOkPressing;
    如果按下過(guò)一次,需要響應(yīng),會(huì)有g(shù)fOkNeedAck;

    復(fù)合按鍵的響應(yīng):
    因?yàn)槊總(gè)按鍵,包括復(fù)合按鍵都有自己的標(biāo)志位和計(jì)時(shí)變量,可以跟物理按鍵的
    處理方法相同。只是消抖的條件,不是電平的判斷,而是物理按鍵的pressing標(biāo)志。

3. 我沒(méi)有使用怪癖詭異的編程方法。有很多取巧的方法可使實(shí)現(xiàn)按鍵的掃描,甚至有
人寫了三行代碼就實(shí)現(xiàn)消抖!覀(gè)人不喜歡這樣的程序風(fēng)格。我喜歡思路清晰的編程方法,
易于維護(hù)和移植。當(dāng)然代價(jià)就是多了一些ROM和RAM占用,但我覺(jué)得時(shí)間和代碼的質(zhì)量更重要。

如果你跟我的思路相同,也遇見(jiàn)過(guò)這樣的困惑,可以考慮我的按鍵掃描方法。

我摘錄了與按鍵相關(guān)的部分,如果有疑問(wèn),歡迎通過(guò)郵件或QQ溝通。


key.rar

1.23 KB, 下載次數(shù): 1696

按鍵處理


作者: dyun1988    時(shí)間: 2014-5-17 21:44
感謝樓主分享。。。。。。。。。。。。。。。
作者: jcygh    時(shí)間: 2014-5-27 22:32
好好學(xué)習(xí),天天進(jìn)步
作者: daobatu    時(shí)間: 2014-5-31 03:26
。進(jìn)來(lái)學(xué)習(xí)下
作者: ekun2006    時(shí)間: 2014-6-14 18:23
難得的精神
作者: 001art    時(shí)間: 2014-7-3 11:20
高手啊。。!
作者: 286458071    時(shí)間: 2014-7-3 16:30
好東西!。。
作者: 云不肯說(shuō)    時(shí)間: 2014-7-7 13:19
看看高級(jí)的程序
作者: li8o    時(shí)間: 2014-7-8 10:14
高手。。。!
作者: sunnyjn    時(shí)間: 2014-7-12 07:18
謝謝樓主分享。!
作者: 407374914    時(shí)間: 2014-7-12 17:51
謝謝樓主分享
作者: liumin_txgt    時(shí)間: 2014-7-12 22:28
謝謝分享
作者: radiance    時(shí)間: 2014-7-14 17:30
好東東。謝謝分享
作者: 袁潔棟    時(shí)間: 2014-7-21 22:21
高手啊
作者: shuangxi    時(shí)間: 2014-7-24 13:49

好東東。謝謝分享
作者: Getty    時(shí)間: 2014-7-24 15:47
謝謝樓主啦。》窒砗芎
作者: visvi    時(shí)間: 2014-7-31 10:48
感覺(jué)很給力,謝謝分享
作者: DDY_yu    時(shí)間: 2014-8-1 16:45
謝謝謝!

作者: zhwyf    時(shí)間: 2014-8-18 23:15
感謝樓主分享
作者: huangjilin    時(shí)間: 2014-8-20 12:40
感謝樓主分享
作者: wwic    時(shí)間: 2014-8-20 17:30
看看是什么!~
作者: happy_coding    時(shí)間: 2014-8-21 10:05
謝謝分享
作者: 937166474    時(shí)間: 2014-9-1 22:01
新人回一帖,不知所云
作者: 導(dǎo)數(shù)題    時(shí)間: 2014-9-2 10:24
謝謝分享
作者: boss654321    時(shí)間: 2014-9-2 19:57
這個(gè)東東絕對(duì)值得一看。
作者: 1004169134    時(shí)間: 2014-9-3 20:16
真不錯(cuò)誒!我也一直想解決程序里的沖突,可沒(méi)耐心去細(xì)細(xì)思索,看了此文豁然開(kāi)朗!太感謝樓主了
作者: yc21    時(shí)間: 2014-9-7 09:37
好好學(xué)習(xí),天天進(jìn)步
作者: yzmmdy    時(shí)間: 2014-9-10 20:42
謝謝樓主的資料,真是好
作者: yongxiang6091    時(shí)間: 2014-9-10 20:46
謝謝樓主分享!
作者: yzmmdy    時(shí)間: 2014-9-11 08:25
好資料,值得學(xué)習(xí),謝了
作者: 雪落有聲    時(shí)間: 2014-9-11 08:51
好東東哦,感謝樓主
作者: nyzjs    時(shí)間: 2014-9-11 09:29
感謝樓主分享。。。。。。。。。。。。。。!
作者: dajin1234    時(shí)間: 2014-9-11 16:34
謝謝分享。。。。。。。。
作者: 周安松    時(shí)間: 2014-9-13 04:42
謝謝分享!!
作者: heam    時(shí)間: 2014-9-15 10:53
謝謝分享
作者: wmt333    時(shí)間: 2014-10-12 14:09
謝謝分享。。!
作者: xi.min    時(shí)間: 2014-10-13 00:40
感謝..............
作者: T29    時(shí)間: 2014-10-16 00:48
感謝樓主 .... 學(xué)習(xí)了
作者: T29    時(shí)間: 2014-10-16 00:52
狀態(tài)機(jī)識(shí)別
作者: zsshd    時(shí)間: 2014-10-16 06:04
感謝樓主分享,學(xué)習(xí)了!
作者: huahuasousou    時(shí)間: 2014-10-24 12:35
感謝分享!
作者: 2577070273    時(shí)間: 2015-2-13 20:19
謝謝分享,學(xué)習(xí)了
作者: lilogo    時(shí)間: 2015-4-27 10:25
謝謝分享。。。。
作者: 逸銘電子    時(shí)間: 2015-4-27 23:07
我也來(lái)看看。
作者: 獨(dú)之雪    時(shí)間: 2015-4-27 23:30
貌似不錯(cuò)的樣子。。。
作者: AOdongq1n    時(shí)間: 2015-4-27 23:36
進(jìn)來(lái)學(xué)習(xí)學(xué)習(xí)
作者: lb688    時(shí)間: 2015-4-28 10:45
學(xué)習(xí)了。。。
作者: SengChuary    時(shí)間: 2015-4-29 22:32
不錯(cuò),支持樓主!!
作者: 913059794    時(shí)間: 2015-5-7 15:08
好東西
作者: kmtbm    時(shí)間: 2015-6-28 17:44

感謝樓主的無(wú)私奉獻(xiàn),讓大家共同使用
作者: kmtbm    時(shí)間: 2015-6-28 18:23
直到現(xiàn)在還不能下載,是不是分不夠
作者: wthdyfg2004    時(shí)間: 2015-6-30 12:58
很好的程序
作者: 海闊天空2015    時(shí)間: 2015-7-2 18:08
資料分享才能有所得,謝謝樓主的資料
作者: hurbo    時(shí)間: 2016-2-1 11:39
謝謝分享,學(xué)習(xí)高手的按鍵程序
作者: hjmnyz    時(shí)間: 2016-3-13 21:19
 感謝樓主分享

作者: brightsm    時(shí)間: 2016-3-16 00:27
學(xué)習(xí)一下。
作者: delie    時(shí)間: 2016-4-19 14:31
謝謝分享
作者: xiancv1    時(shí)間: 2016-4-25 16:18
謝謝樓主分享
作者: whengfu    時(shí)間: 2016-4-28 09:36
好多書本上沒(méi)有的,具有很大實(shí)用價(jià)值
作者: hhdsdy    時(shí)間: 2016-4-28 09:52
感謝樓主的分享
作者: zmhulu    時(shí)間: 2016-5-7 10:58
謝謝分享。學(xué)習(xí)下
作者: 841812960    時(shí)間: 2016-5-11 12:30
感謝樓主分享
作者: lyseg01    時(shí)間: 2016-6-13 18:43
感謝樓主分享。。
作者: WFX777888    時(shí)間: 2016-6-14 05:10
謝謝分享資料
作者: lidong128    時(shí)間: 2016-6-14 08:23
感謝樓主分享
作者: dtdzlujian    時(shí)間: 2016-6-15 11:51
huangjilin 發(fā)表于 2014-8-20 12:40
感謝樓主分享

謝謝Lz分享,學(xué)習(xí)了!
作者: 未來(lái)的技術(shù)女    時(shí)間: 2016-6-28 23:25
已經(jīng)收集不少按鍵掃描的程序了,等過(guò)幾天我也來(lái)發(fā)一發(fā)...

作者: 779613083    時(shí)間: 2016-6-29 13:44
感謝。。。
作者: daihouzhao    時(shí)間: 2016-7-21 09:59
謝謝分享!
作者: 小分子    時(shí)間: 2016-7-31 23:40
沒(méi)有看明白
作者: jubaolun    時(shí)間: 2016-8-1 08:37
謝謝樓主分享.學(xué)習(xí)了.
作者: wszyg621    時(shí)間: 2016-8-1 10:35

好東西,謝謝分享!
作者: ghostry    時(shí)間: 2016-8-1 17:24
感謝分享,學(xué)習(xí)一下。
作者: uaeng    時(shí)間: 2016-8-2 22:45
感謝樓主分享!。。。!
作者: liu712777    時(shí)間: 2016-8-13 19:10
haoaodsads
作者: liu712777    時(shí)間: 2016-8-13 19:10
fgdfgf fgfgf
作者: liu712777    時(shí)間: 2016-8-13 19:14
bddfggfgfgfgfg
作者: 謝幕芳華    時(shí)間: 2016-8-14 10:18
謝謝樓主的分享,讓我又學(xué)會(huì)另外一種按鍵掃描處理
作者: 謝幕芳華    時(shí)間: 2016-8-14 10:19
謝謝樓主的分享,又讓漲知識(shí)了
作者: lion21cn    時(shí)間: 2016-8-15 14:43
謝謝分享

作者: kkfy888    時(shí)間: 2016-8-16 01:57
謝謝分享!!
作者: 7547163    時(shí)間: 2016-8-19 19:43
謝謝分享呀
作者: qaz3    時(shí)間: 2016-8-23 09:40
幾個(gè)環(huán)節(jié)的活動(dòng)和規(guī)范化的復(fù)活點(diǎn)發(fā)貨后  
作者: 轉(zhuǎn)崗    時(shí)間: 2016-8-23 17:25
感謝樓主分享,
作者: intersetings    時(shí)間: 2016-8-23 22:42
謝謝分享,好帖
作者: xtgdsk    時(shí)間: 2016-10-29 14:44

感謝樓主 .... 學(xué)習(xí)了
作者: westlife96    時(shí)間: 2016-10-29 23:03
曾經(jīng)用過(guò)類似的方法。后來(lái)看到一篇關(guān)于時(shí)間片輪換法的結(jié)構(gòu)文章描述之后,發(fā)現(xiàn)之前的那些問(wèn)題都可以通過(guò)類似的方法解決。
作者: 123456kkj    時(shí)間: 2016-11-10 09:28
感謝樓主分享。。!
作者: 周琪寶寶    時(shí)間: 2016-11-12 19:53
謝謝分享
作者: yaohw2427    時(shí)間: 2016-11-13 23:48
卡在了數(shù)碼管顯示,,,啊,多么痛
作者: 心如刀割    時(shí)間: 2016-11-14 15:03
好經(jīng)驗(yàn)
作者: 孟菲0307    時(shí)間: 2016-11-14 15:56
謝謝分享
作者: xht9951    時(shí)間: 2016-11-18 11:52
木有HB,下載不了?床坏 啊要! 本人還是比較喜歡宋學(xué)松老師的按鍵消抖的算法。
作者: lhshengshi    時(shí)間: 2016-12-1 15:34

看看高級(jí)的程序
作者: jcygh    時(shí)間: 2016-12-3 15:07
很給力!
贊一個(gè)!
作者: xilegan    時(shí)間: 2016-12-13 19:50
謝謝樓主的分享!
作者: lhuijiang    時(shí)間: 2016-12-13 20:22
穩(wěn)定第一。
作者: qqjmk15263    時(shí)間: 2017-1-3 15:05
一直沒(méi)找到好的按鍵掃描方法,先看看樓主的
作者: 東方既白    時(shí)間: 2017-2-2 09:58
希望學(xué)習(xí)下
作者: lyseg    時(shí)間: 2017-2-3 12:35
謝謝樓主分享!




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1