999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于狀態(tài)機(jī)的單片機(jī)按鍵短按長按功能的實(shí)現(xiàn)

2018-01-17 10:43:40吳允強(qiáng)吳由松
電子技術(shù)與軟件工程 2017年23期

吳允強(qiáng)++吳由松

摘 要 本文介紹了一種基于狀態(tài)機(jī)的單片機(jī)按鍵的實(shí)現(xiàn),通過狀態(tài)機(jī)實(shí)現(xiàn)按鍵的短按與長按的功能,同時改進(jìn)按鍵消抖的方法,使單片機(jī)在節(jié)約CPU的資源的同時實(shí)現(xiàn)按鍵的各種狀態(tài)的檢測,提高單片機(jī)的工作效率,整個設(shè)計(jì)代碼簡潔,方便維護(hù)。

【關(guān)鍵詞】狀態(tài)機(jī) 按鍵 長按

1 引言

在自己在科研實(shí)踐和對學(xué)生教學(xué)中發(fā)現(xiàn),現(xiàn)在單片機(jī)學(xué)習(xí)中對于按鍵處理的方法都是:檢測按鍵、延時消抖、按鍵執(zhí)行、等待釋放,整個按鍵處理的程序中大量出現(xiàn)“delay_1ms(5);”和“while(!key);”這樣的語句,這明顯是在給自己找麻煩,延時消抖與等待釋放需要消耗CPU運(yùn)行時間,執(zhí)行效率低下,而且這種方法處理的按鍵程序也實(shí)現(xiàn)不了按鍵的短按、長按等靈活的按鍵操作方式。本文講述了一種用狀態(tài)機(jī)實(shí)現(xiàn)按鍵掃描的方法,達(dá)到按鍵的短按和長按功能,高效的處理按鍵消抖問題。

2 狀態(tài)機(jī)

狀態(tài)機(jī)在軟件編程中非常重要,一個思路清晰而且高效的程序,必然有狀態(tài)機(jī)的身影浮現(xiàn)。比如在按鍵命令解析程序中,本來是在狀態(tài)1中,觸發(fā)一個按鍵后切換到狀態(tài)2,再觸發(fā)另一個按鍵切換到狀態(tài)3,或者返回到狀態(tài)1。按鍵的擊鍵過程也是一種狀態(tài)的切換,也可以看著是一個狀態(tài)機(jī),一個按鍵的擊鍵過程包括:按下、抖動、閉合、抖動和釋放等狀態(tài)。我們只要把這些狀態(tài)機(jī)的思想想辦法用程序表示出來就可以了。

3 按鍵的狀態(tài)機(jī)實(shí)現(xiàn)

我們這里用狀態(tài)機(jī)是為解決問題的,那么我們就要從問題本身去思考。為了實(shí)現(xiàn)按鍵掃描,達(dá)到按鍵短按和長按的功能,可以根據(jù)一個按鍵從按下按鍵到釋放按鍵的整個過程將按鍵分為4個狀態(tài):

S0:等待按鍵按下

S1:按鍵按下

S2:等待按鍵短按釋放

S3:等待按鍵長按釋放

假設(shè)按鍵按下為低電平“0”,按鍵未按下為高電平“1”,按鍵的整個過程我們就可以通過狀態(tài)轉(zhuǎn)移圖表示出來,如圖1所示。

首先,按鍵的初始狀態(tài)為S0,當(dāng)檢測到輸入為1時,表示按鍵沒有按下,保持S0;當(dāng)輸入為0時,表示按鍵按下,狀態(tài)轉(zhuǎn)入S1。在S1狀態(tài)中,檢測輸入信號是否為0,如果為0,執(zhí)行按鍵程序轉(zhuǎn)入S2;如果為1,表示之前的按鍵操作是干擾信號,回到S0。在S2狀態(tài)中,如果輸入信號是1,則回到S0,表示按鍵短按已經(jīng)釋放;如果按鍵沒有釋放,輸入為0時,就開始計(jì)時,計(jì)時沒有結(jié)束前一直在S2,當(dāng)計(jì)時結(jié)束了,轉(zhuǎn)入S3,表示按鍵一直按著,為長按功能,在S2計(jì)時過程中,輸入從0變?yōu)?也會回到S0。在S3狀態(tài)中,輸入信號為1,返回S0,表示按鍵長按釋放;輸入信號為0,執(zhí)行相應(yīng)的按鍵程序,也可以計(jì)時,等計(jì)時結(jié)束執(zhí)行按鍵程序,達(dá)到按鍵連擊的功能。這就是采用狀態(tài)機(jī)進(jìn)行按鍵檢測達(dá)到短按與長按的整個過程。

下面以四個按鍵接在P1的P1.7、P1.6、P1.5、P1.4,設(shè)計(jì)狀態(tài)機(jī)按鍵掃描程序。

程序代碼如下:

#define S0 0 //狀態(tài)0

#define S1 1 //狀態(tài)1

#define S2 2 //狀態(tài)2

#define S3 3 //狀態(tài)3

void key()

{static unsigned char state=S0,key_time;

unsigned char key;

key=P1&0xf0; //屏蔽P1低四位

switch (state) //檢測狀態(tài)

{case S0://狀態(tài)0

if(key!=0xf0)state=S1;break; //判斷輸入是否為0,為0轉(zhuǎn)入狀態(tài)1

case S1://狀態(tài)1

if(key==0xf0)state=S0; //判斷輸入是否為1,為1返回狀態(tài)0

else //否則,轉(zhuǎn)入狀態(tài)2,執(zhí)行按鍵程序

{state=S2;

switch (key)

{case 0xe0:/*按鍵1執(zhí)行程序*/break;

case 0xd0:/*按鍵2執(zhí)行程序*/break;

case 0xb0:/*按鍵3執(zhí)行程序*/break;

case 0x70:/*按鍵4執(zhí)行程序*/break;}} break;

case S2://狀態(tài)2

if(key==0xf0)state=S0;//判斷輸入是否為1,為1返回狀態(tài)0

else if(++key_time==100){key_time=0;state=S3;}break;

//否則開始計(jì)時,計(jì)時結(jié)束轉(zhuǎn)入狀態(tài)3

case S3://狀態(tài)3

if(key==0xf0)state=S0;//判斷輸入是否為1,為1返回狀態(tài)0

else if(++key_time==5)//否則開始計(jì)時,計(jì)時結(jié)束按鍵連擊

{key_time=0;

switch (key){

case 0xe0:break;

case 0xd0:break;

case 0xb0:break;

case 0x70:break;}

}break;}}

4 中斷處理按鍵消抖

通常使用的按鍵都是機(jī)械彈性按鍵,也就是輕觸開關(guān)。機(jī)械按鍵在觸點(diǎn)的閉合和斷開的過程中會產(chǎn)生抖動,一個按鍵在按下時不會立刻穩(wěn)定的導(dǎo)通,在釋放時也一樣,不會一下子就斷開,在按下和釋放瞬間都會有一連串的抖動現(xiàn)象。按鍵的抖動時間有按鍵的機(jī)械特性決定,一般情況為5ms~10ms。這種抖動人是感覺不出來的,但是單片機(jī)的運(yùn)行速度是微秒級的,這里可以設(shè)計(jì)一個定時中斷來檢測按鍵的狀態(tài),通過定時中斷來消除按鍵抖動問題。因此可以把定時器的時間設(shè)置為10ms,每隔10ms進(jìn)入一次中斷檢測一次按鍵的狀態(tài)。

5 總結(jié)

本文介紹的這種以狀態(tài)機(jī)來實(shí)現(xiàn)按鍵檢測的方法,與一般的按鍵檢測方法相對比,能完成案件的多種狀態(tài)的檢測,實(shí)現(xiàn)按鍵的短按和長按功能。采用狀態(tài)機(jī)編寫的按鍵程序也大大的改進(jìn)了按鍵消抖對CPU運(yùn)行時間消耗的問題。程序代碼簡單,維護(hù)方便,適用范圍廣。

參考文獻(xiàn)

[1]黃小華.單片機(jī)中的按鍵處理方法[J].電子科技,2014(19):1.

[2]陳曉麗.按鍵的多種狀態(tài)檢測及消抖處理方法[J].家電科技,2013(04):68-70.

作者單位

南昌理工學(xué)院 江西省南昌市 330044endprint

主站蜘蛛池模板: 久久国产av麻豆| 国产资源免费观看| 国产在线专区| 亚洲伦理一区二区| 18禁黄无遮挡网站| 久热中文字幕在线| 91成人在线免费观看| 国产00高中生在线播放| 亚洲国产无码有码| 亚洲AV无码乱码在线观看代蜜桃| 亚洲swag精品自拍一区| 国产亚洲精品yxsp| 99视频在线精品免费观看6| 亚洲一区免费看| 99精品国产自在现线观看| 欧美无遮挡国产欧美另类| 国产精品福利尤物youwu | 欧美一级黄色影院| 美女无遮挡免费网站| 色婷婷亚洲十月十月色天| 无码福利视频| 日韩国产亚洲一区二区在线观看| 欧美第二区| 51国产偷自视频区视频手机观看| 亚洲av无码片一区二区三区| 啪啪啪亚洲无码| 第一区免费在线观看| 制服丝袜亚洲| 欧美人人干| 亚洲一级毛片在线观| 亚洲无线视频| 综合色亚洲| 亚洲成人在线网| 26uuu国产精品视频| 国产人人乐人人爱| 四虎成人在线视频| 国产亚洲高清在线精品99| 制服丝袜一区| 国产精品永久久久久| 99re经典视频在线| 99ri精品视频在线观看播放| 成人国产小视频| 国产精品香蕉在线| 欧美中出一区二区| 亚洲性日韩精品一区二区| 精品福利网| 国产理论一区| 欧美色丁香| 性色一区| 午夜日韩久久影院| 久久久久九九精品影院| 99热国产在线精品99| 久久综合婷婷| 成人年鲁鲁在线观看视频| 久久99国产综合精品1| 最新国产在线| 蝴蝶伊人久久中文娱乐网| 国产乱子伦视频三区| 国产人在线成免费视频| 国产精品无码AV中文| 国产人在线成免费视频| 成人韩免费网站| 精品人妻无码中字系列| 2021国产乱人伦在线播放| 99re在线免费视频| 亚洲成A人V欧美综合| 国产在线自在拍91精品黑人| 亚洲国产成人麻豆精品| 亚洲成人网在线播放| 永久在线精品免费视频观看| 国产免费福利网站| V一区无码内射国产| 日韩无码黄色| 婷五月综合| 成人福利在线免费观看| 美女一区二区在线观看| 久久77777| 青青国产视频| 中文字幕免费播放| 天天躁日日躁狠狠躁中文字幕| 澳门av无码| 99999久久久久久亚洲|