|
最近帖子已經(jīng)有人在此提到充分利用CPU中斷的重要性,,再次我就不要說(shuō)了。此按鍵demo支持短按,長(zhǎng)按,多個(gè)按鍵同時(shí)按下,由于是用掃描的方式,各個(gè)按鍵的按下和松獨(dú)立處理,不互相干擾,避免要按鍵死等的情況。對(duì)于特殊的按鍵消抖時(shí)間可單獨(dú)一條線(xiàn)掃描檢測(cè)。。由于是各個(gè)按鍵,一位位檢測(cè),檢測(cè)到一位就進(jìn)行處理,之后再進(jìn)行處理下一位,所以有先后順序。廢話(huà)不多說(shuō),下面講思路,有錯(cuò)誤的地方大家可以一起學(xué)習(xí),探討,,,,,,,,
按鍵的最終狀態(tài)無(wú)非就兩種,按下或者松開(kāi)。我用的是STC8單片機(jī),現(xiàn)在的一些增強(qiáng)型或許新型號(hào)應(yīng)該內(nèi)部都有上拉電阻,,所以我們是按鍵低電平觸發(fā)。
對(duì)于只作為輸入口用于按鍵檢測(cè),,我們可以默認(rèn)他的IO口狀態(tài),不要去操作IO寄存器,,,(如果是即作為輸入又作為輸出的話(huà),,在讀取狀態(tài)的時(shí)候記得先寫(xiě)1,延時(shí)2個(gè)NOP,再去讀,保證讀取的準(zhǔn)確性),,假設(shè)按鍵沒(méi)按下去默認(rèn)就是1了,按鍵按下去就是0,也就是1->0的過(guò)程,,松開(kāi)的話(huà)就是0->1,恢復(fù)到最初狀態(tài)。這里就有兩個(gè)變化1->0,和0->1,,理解這個(gè)之后我們就定義兩個(gè)變量 value 變化值 buf 最終狀態(tài)值 我們兩個(gè)變化1->0,和0->1進(jìn)行異或就是1,,說(shuō)明了按鍵有按下或松開(kāi)的動(dòng)作,我們就去執(zhí)行對(duì)應(yīng)的函數(shù),,執(zhí)行完后按鍵的最終只buf也跟著更新,也就是0(按下) 1(松開(kāi)),,(一直按下的過(guò)程)此時(shí)端口值0 和buf0 異或就是0 ,咱就不再去執(zhí)行按鍵按下的程序,,(松開(kāi)后的過(guò)程)此時(shí)端口值1 和buf1 異或就是0 ,咱就不再去執(zhí)行按鍵松開(kāi)的程序,,這樣就保證了按下 或者松開(kāi) 只執(zhí)行一次動(dòng)作,,因此加入一些標(biāo)志位。,結(jié)合中斷就可以做一些長(zhǎng)按功能了。提供的demo里有做了一個(gè)實(shí)例是長(zhǎng)按2秒開(kāi)關(guān)蜂鳴器,,其他的按鍵按下或者松開(kāi)的子函數(shù)用戶(hù)自己增加自己需要的功能,,里面只是寫(xiě)了一些簡(jiǎn)單的點(diǎn)燈功能用于調(diào)試,,自己驗(yàn)證了一下程序是可行,,所以提供出來(lái),,大部分都有注釋?zhuān)纯从惺裁床蛔阒帲谶M(jìn)行修改,,后面會(huì)在此基礎(chǔ)加入矩陣掃描,原理一樣,接著進(jìn)一步完善demo,做成一個(gè)能實(shí)現(xiàn)操作常見(jiàn)的外設(shè)demo出來(lái),,程序不足之處多多見(jiàn)諒,大家多多批評(píng),一起學(xué)習(xí),,,,,下面按鍵的流程圖,也不知道這個(gè)畫(huà)得不到,老感覺(jué)自己的表達(dá)能力有待提高,,或者也會(huì)多發(fā)貼,把自己的一些表達(dá)能力加強(qiáng),,
按鍵流程圖.png (104.75 KB, 下載次數(shù): 74)
下載附件
按鍵流程圖
2019-7-21 01:09 上傳
1 file文件夾為項(xiàng)目的硬件端口表 功能書(shū) 原理圖等資料
2 inc文件 為系統(tǒng)配置文件
3 lib文件 各個(gè)外設(shè)文件
4 program文件 為項(xiàng)目文件
單片機(jī)源程序如下:
所有程序51hei打包下載:
STC8 實(shí)驗(yàn)3 -按鍵.rar
(92.31 KB, 下載次數(shù): 19)
2019-7-21 01:11 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|