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

基于狀態(tài)機的單片機按鍵短按長按功能的實現

2018-01-17 13:09:02吳允強吳由松
電子技術與軟件工程 2017年24期

吳允強+吳由松

摘 要

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

【關鍵詞】狀態(tài)機 按鍵 長按

1 引言

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

2 狀態(tài)機

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

3 按鍵的狀態(tài)機實現

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

S0:等待按鍵按下

S1:按鍵按下

S2:等待按鍵短按釋放

S3:等待按鍵長按釋放

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

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

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

程序代碼如下:

#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轉入狀態(tài)1

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

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

else //否則,轉入狀態(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;

//否則開始計時,計時結束轉入狀態(tài)3

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

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

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

{key_time=0;

switch (key){

case 0xe0:break;

case 0xd0:break;

case 0xb0:break;

case 0x70:break;}

}break;}}

4 中斷處理按鍵消抖

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

5 總結

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

參考文獻

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

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

作者單位

南昌理工學院 江西省南昌市 330044endprint

主站蜘蛛池模板: 911亚洲精品| 亚洲精品片911| 美女扒开下面流白浆在线试听| 久久久久久午夜精品| 亚洲日韩久久综合中文字幕| 国产特级毛片| 美女视频黄频a免费高清不卡| 老色鬼欧美精品| 亚洲天堂视频在线观看免费| 精品久久久无码专区中文字幕| 亚洲成在人线av品善网好看| 亚洲91精品视频| 亚洲无码高清视频在线观看| AV片亚洲国产男人的天堂| 91色在线观看| 谁有在线观看日韩亚洲最新视频| 一级香蕉人体视频| 97av视频在线观看| 成人福利在线免费观看| 欧美成人日韩| 国内精品伊人久久久久7777人| 福利在线一区| 国产精品视频导航| 天天摸天天操免费播放小视频| 91久久国产综合精品| 国产经典三级在线| 欧美午夜网| 91色国产在线| 看国产一级毛片| 狠狠综合久久| 国产在线观看成人91| 最新国产高清在线| 2020极品精品国产| 日韩在线欧美在线| 久久黄色一级片| 亚洲精品福利网站| 久久精品日日躁夜夜躁欧美| 欧美黄网在线| 在线观看热码亚洲av每日更新| 精品偷拍一区二区| 91精品免费久久久| 91小视频版在线观看www| 亚洲精品无码专区在线观看| 国产91蝌蚪窝| 无码高清专区| 国产又粗又爽视频| 亚国产欧美在线人成| 欧美伦理一区| 国产成人精品亚洲日本对白优播| 免费不卡视频| 国产一级毛片高清完整视频版| 亚洲人成在线精品| 久久久久国色AV免费观看性色| 亚洲综合激情另类专区| 91在线日韩在线播放| 亚洲天堂网2014| 中文字幕天无码久久精品视频免费| 日韩毛片在线播放| 亚洲另类色| 国产在线专区| 国产欧美在线观看精品一区污| 精品国产成人三级在线观看| 日韩色图在线观看| 国产高清无码麻豆精品| 欧美日韩成人在线观看| 久久9966精品国产免费| 欧美日韩专区| 97久久人人超碰国产精品| 国产精品成人免费视频99| 91视频99| 无码一区18禁| AV无码一区二区三区四区| 成人福利在线看| 亚洲精品视频免费看| 91精品国产无线乱码在线| 国产精品hd在线播放| 亚洲一欧洲中文字幕在线| 在线综合亚洲欧美网站| 伊人成人在线| 日韩中文精品亚洲第三区| 天堂亚洲网| 亚洲av无码专区久久蜜芽|