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

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

2018-01-17 13:09:02吳允強(qiáng)吳由松
電子技術(shù)與軟件工程 2017年24期

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

摘 要

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

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

1 引言

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

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

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

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

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

S0:等待按鍵按下

S1:按鍵按下

S2:等待按鍵短按釋放

S3:等待按鍵長按釋放

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

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

下面以四個(gè)按鍵接在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ì)時(shí),計(jì)時(shí)結(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ì)時(shí),計(jì)時(shí)結(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)生抖動(dòng),一個(gè)按鍵在按下時(shí)不會立刻穩(wěn)定的導(dǎo)通,在釋放時(shí)也一樣,不會一下子就斷開,在按下和釋放瞬間都會有一連串的抖動(dòng)現(xiàn)象。按鍵的抖動(dòng)時(shí)間有按鍵的機(jī)械特性決定,一般情況為5ms~10ms。這種抖動(dòng)人是感覺不出來的,但是單片機(jī)的運(yùn)行速度是微秒級的,這里可以設(shè)計(jì)一個(gè)定時(shí)中斷來檢測按鍵的狀態(tài),通過定時(shí)中斷來消除按鍵抖動(dòng)問題。因此可以把定時(shí)器的時(shí)間設(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)行時(shí)間消耗的問題。程序代碼簡單,維護(hù)方便,適用范圍廣。

參考文獻(xiàn)

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

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

作者單位

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

主站蜘蛛池模板: 久久精品亚洲中文字幕乱码| 欧美在线视频不卡第一页| 国产婬乱a一级毛片多女| 久久精品国产精品一区二区| 成人午夜天| 国产一二三区在线| 热思思久久免费视频| 亚洲Av激情网五月天| 毛片a级毛片免费观看免下载| 国产成人免费手机在线观看视频| 国产sm重味一区二区三区| 波多野结衣一级毛片| 亚洲第一成年人网站| 国产极品嫩模在线观看91| 国产在线八区| 国产精品大白天新婚身材| 国产精品嫩草影院av| 久久国产亚洲欧美日韩精品| 成人国产免费| 亚洲日本中文字幕天堂网| 9丨情侣偷在线精品国产| 亚洲无码高清一区| 国产黄在线免费观看| 国产精品久久久久久久久久久久| 国产成人一区免费观看| 欧美精品成人一区二区视频一| 欧美成人影院亚洲综合图| 伊人天堂网| 精品夜恋影院亚洲欧洲| 欧美精品黑人粗大| 中文字幕资源站| 日韩欧美网址| 精品夜恋影院亚洲欧洲| 国产激情无码一区二区免费| 亚洲无线观看| 中文无码毛片又爽又刺激| av在线人妻熟妇| 国产欧美日韩免费| 国产欧美在线观看视频| 午夜精品一区二区蜜桃| www.亚洲国产| 欧美福利在线播放| 91精品国产一区自在线拍| AV老司机AV天堂| 日本一本正道综合久久dvd| 国产精品永久在线| 精品人妻无码中字系列| 国产视频一二三区| 亚洲精品高清视频| 四虎成人精品| 91亚洲国产视频| аⅴ资源中文在线天堂| 国产产在线精品亚洲aavv| 国产无码网站在线观看| 网友自拍视频精品区| 亚洲综合色在线| 国产在线观看人成激情视频| 在线看片国产| 国产浮力第一页永久地址| 欧美精品影院| 久久久噜噜噜久久中文字幕色伊伊| 狠狠色香婷婷久久亚洲精品| 亚洲精品国产精品乱码不卞 | 亚洲码在线中文在线观看| 国产精品妖精视频| 欧美视频在线第一页| 色婷婷狠狠干| 无码 在线 在线| 99久久精品免费看国产免费软件| 欧美成人a∨视频免费观看| 亚洲第一成网站| 亚洲欧洲AV一区二区三区| 欧亚日韩Av| 亚洲国产成人在线| 欧美黄网站免费观看| 91精品国产福利| 午夜视频www| 亚洲国产精品日韩欧美一区| 国产无码网站在线观看| 国产精品网曝门免费视频| 国产精品综合色区在线观看| 欧美日韩国产在线人|