資料介紹
一般的按鍵驅(qū)動(dòng)程序通常非常簡(jiǎn)單。在程序中一旦檢測(cè)到按鍵輸入口為低電平時(shí),就采用軟件延時(shí)10 ms后再次檢測(cè)按鍵輸入口。如果仍然是低電平則表示有按鍵按下,便轉(zhuǎn)入執(zhí)行按鍵處理程序;否則,當(dāng)按鍵輸入口為高電平,就會(huì)放棄本次按鍵的檢測(cè),重新開(kāi)始一次按鍵檢測(cè)過(guò)程。這種方式不僅由于采用了軟件延時(shí)而使得MCU的效率降低,同時(shí)也不容易同系統(tǒng)中其他功能模塊協(xié)調(diào)工作,且系統(tǒng)的實(shí)時(shí)性也差。本文把單個(gè)按鍵作為一個(gè)簡(jiǎn)單的系統(tǒng),根據(jù)狀態(tài)機(jī)的原理對(duì)其動(dòng)作的操作和確認(rèn)的過(guò)程進(jìn)行分析,并用狀態(tài)圖表示出來(lái),然后根據(jù)狀態(tài)圖編寫(xiě)出按鍵接口程序。
1 基于狀態(tài)機(jī)的簡(jiǎn)單按鍵驅(qū)動(dòng)設(shè)計(jì)
在一個(gè)嵌入式系統(tǒng)中,按鍵的操作是隨機(jī)的。為了提高CPU的工作效率,在設(shè)計(jì)按鍵驅(qū)動(dòng)的時(shí)候,利用S3C2440的外部中斷來(lái)實(shí)現(xiàn)對(duì)按鍵的處理。很明顯,系統(tǒng)的輸入信號(hào)與按鍵連接的I/O口電平,“1”表示按鍵處于開(kāi)放狀態(tài),“0”表示按鍵處于閉合狀態(tài)。而系統(tǒng)的輸出信號(hào)則表示檢測(cè)和確認(rèn)到一次按鍵的閉合操作,用“1”表示。
圖1給出了一個(gè)簡(jiǎn)單按鍵狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)換圖。
在圖中,將1次按鍵完整的操作分解為3個(gè)狀態(tài)。其中,狀態(tài)0為按鍵的初始狀態(tài),當(dāng)按鍵輸入為“1”時(shí),表示按鍵處于開(kāi)放,輸出“0”(I/0),下一狀態(tài)仍為狀態(tài)0;當(dāng)按鍵輸入為“0”時(shí),表示按鍵閉合,但輸出還是“0”(沒(méi)有經(jīng)過(guò)消抖,不能確認(rèn)按鍵真正按下),下一狀態(tài)進(jìn)入狀態(tài)1。
狀態(tài)1為按鍵閉合確認(rèn)狀態(tài),它表示在10 ms前按鍵為閉合的,因此當(dāng)再次檢測(cè)到按鍵輸入為“0”時(shí),可以確認(rèn)按鍵被按下了(經(jīng)過(guò)10 ms的消抖);輸出“1”則表示確認(rèn)按鍵閉合(0/1),下一狀態(tài)進(jìn)入狀態(tài)2。而當(dāng)再次檢測(cè)到按鍵的輸入為“1”時(shí),表示按鍵可能處在抖動(dòng)干擾;輸出為“0”(I/0),下一狀態(tài)返回到狀態(tài)0。這樣,利用狀態(tài)1,實(shí)現(xiàn)了按鍵的消抖處理。狀態(tài)2為等待按鍵釋放狀態(tài),因?yàn)橹挥械劝存I釋放后,一次完整的按鍵操作過(guò)程才算完成。
對(duì)圖1的分析可知,在一次按鍵操作的整個(gè)過(guò)程中,按鍵的狀態(tài)是從狀態(tài)0→狀態(tài)1→狀態(tài)2,最后返回到狀態(tài)0的,并且在整個(gè)過(guò)程中,按鍵的輸出信號(hào)僅在狀態(tài)1時(shí)給出了唯一的一次確認(rèn)按鍵閉合的信號(hào)“1”,其他狀態(tài)均輸出“0”。因此,圖1狀態(tài)機(jī)所表示的按鍵系統(tǒng),不僅克服了按鍵抖動(dòng)的問(wèn)題,同時(shí)也確保在一次按鍵的整個(gè)過(guò)程中,系統(tǒng)只輸出一次按鍵閉合信號(hào)(“1”)。
2 具有連發(fā)功能的按鍵驅(qū)動(dòng)設(shè)計(jì)
上面介紹的是最簡(jiǎn)單的情況,不管按鍵被按下的時(shí)間保持多長(zhǎng),在這個(gè)按鍵的整個(gè)過(guò)程中都只給出了一次確認(rèn)的輸出。但是有些場(chǎng)合為了方便使用者,根據(jù)使用者按按鍵的時(shí)間多少來(lái)確定是否按鍵“連發(fā)”。例如,在設(shè)置時(shí)鐘時(shí),按按鍵的時(shí)間較短時(shí),設(shè)置加1;按按鍵時(shí)間較長(zhǎng)時(shí),設(shè)置加10,這時(shí)就需要根據(jù)按按鍵的時(shí)間長(zhǎng)短來(lái)確定具體輸出。圖2是將按鍵驅(qū)動(dòng)設(shè)計(jì)為具有連發(fā)功能狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)換圖。
當(dāng)按鍵按下后1 s內(nèi)釋放了,系統(tǒng)輸出為1;當(dāng)按鍵按下后1 s沒(méi)有釋放,那么以后每隔0.5 s,輸出為2,直到按鍵釋放為止。如果系統(tǒng)輸出1,應(yīng)用程序?qū)⒆兞考?;如果系統(tǒng)輸出2,應(yīng)用程序?qū)⒆兞考?0。這樣按鍵驅(qū)動(dòng)就有了處理連發(fā)按鍵的功能了。
1 基于狀態(tài)機(jī)的簡(jiǎn)單按鍵驅(qū)動(dòng)設(shè)計(jì)
在一個(gè)嵌入式系統(tǒng)中,按鍵的操作是隨機(jī)的。為了提高CPU的工作效率,在設(shè)計(jì)按鍵驅(qū)動(dòng)的時(shí)候,利用S3C2440的外部中斷來(lái)實(shí)現(xiàn)對(duì)按鍵的處理。很明顯,系統(tǒng)的輸入信號(hào)與按鍵連接的I/O口電平,“1”表示按鍵處于開(kāi)放狀態(tài),“0”表示按鍵處于閉合狀態(tài)。而系統(tǒng)的輸出信號(hào)則表示檢測(cè)和確認(rèn)到一次按鍵的閉合操作,用“1”表示。
圖1給出了一個(gè)簡(jiǎn)單按鍵狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)換圖。
在圖中,將1次按鍵完整的操作分解為3個(gè)狀態(tài)。其中,狀態(tài)0為按鍵的初始狀態(tài),當(dāng)按鍵輸入為“1”時(shí),表示按鍵處于開(kāi)放,輸出“0”(I/0),下一狀態(tài)仍為狀態(tài)0;當(dāng)按鍵輸入為“0”時(shí),表示按鍵閉合,但輸出還是“0”(沒(méi)有經(jīng)過(guò)消抖,不能確認(rèn)按鍵真正按下),下一狀態(tài)進(jìn)入狀態(tài)1。
狀態(tài)1為按鍵閉合確認(rèn)狀態(tài),它表示在10 ms前按鍵為閉合的,因此當(dāng)再次檢測(cè)到按鍵輸入為“0”時(shí),可以確認(rèn)按鍵被按下了(經(jīng)過(guò)10 ms的消抖);輸出“1”則表示確認(rèn)按鍵閉合(0/1),下一狀態(tài)進(jìn)入狀態(tài)2。而當(dāng)再次檢測(cè)到按鍵的輸入為“1”時(shí),表示按鍵可能處在抖動(dòng)干擾;輸出為“0”(I/0),下一狀態(tài)返回到狀態(tài)0。這樣,利用狀態(tài)1,實(shí)現(xiàn)了按鍵的消抖處理。狀態(tài)2為等待按鍵釋放狀態(tài),因?yàn)橹挥械劝存I釋放后,一次完整的按鍵操作過(guò)程才算完成。
對(duì)圖1的分析可知,在一次按鍵操作的整個(gè)過(guò)程中,按鍵的狀態(tài)是從狀態(tài)0→狀態(tài)1→狀態(tài)2,最后返回到狀態(tài)0的,并且在整個(gè)過(guò)程中,按鍵的輸出信號(hào)僅在狀態(tài)1時(shí)給出了唯一的一次確認(rèn)按鍵閉合的信號(hào)“1”,其他狀態(tài)均輸出“0”。因此,圖1狀態(tài)機(jī)所表示的按鍵系統(tǒng),不僅克服了按鍵抖動(dòng)的問(wèn)題,同時(shí)也確保在一次按鍵的整個(gè)過(guò)程中,系統(tǒng)只輸出一次按鍵閉合信號(hào)(“1”)。
2 具有連發(fā)功能的按鍵驅(qū)動(dòng)設(shè)計(jì)
上面介紹的是最簡(jiǎn)單的情況,不管按鍵被按下的時(shí)間保持多長(zhǎng),在這個(gè)按鍵的整個(gè)過(guò)程中都只給出了一次確認(rèn)的輸出。但是有些場(chǎng)合為了方便使用者,根據(jù)使用者按按鍵的時(shí)間多少來(lái)確定是否按鍵“連發(fā)”。例如,在設(shè)置時(shí)鐘時(shí),按按鍵的時(shí)間較短時(shí),設(shè)置加1;按按鍵時(shí)間較長(zhǎng)時(shí),設(shè)置加10,這時(shí)就需要根據(jù)按按鍵的時(shí)間長(zhǎng)短來(lái)確定具體輸出。圖2是將按鍵驅(qū)動(dòng)設(shè)計(jì)為具有連發(fā)功能狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)換圖。
當(dāng)按鍵按下后1 s內(nèi)釋放了,系統(tǒng)輸出為1;當(dāng)按鍵按下后1 s沒(méi)有釋放,那么以后每隔0.5 s,輸出為2,直到按鍵釋放為止。如果系統(tǒng)輸出1,應(yīng)用程序?qū)⒆兞考?;如果系統(tǒng)輸出2,應(yīng)用程序?qū)⒆兞考?0。這樣按鍵驅(qū)動(dòng)就有了處理連發(fā)按鍵的功能了。
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- 按鍵狀態(tài)機(jī)代碼 7次下載
- labview狀態(tài)機(jī)分享 11次下載
- LABVIEW的狀態(tài)機(jī)實(shí)現(xiàn)資料合集 41次下載
- 藍(lán)橋杯單片機(jī)狀態(tài)機(jī)按鍵按下和松開(kāi)實(shí)現(xiàn)不同功能
- STM32實(shí)現(xiàn)按鍵有限狀態(tài)機(jī)(超詳細(xì),易移植)
- 狀態(tài)模式(狀態(tài)機(jī))
- 基于STM32按鍵的防抖和松開(kāi)處理:狀態(tài)機(jī)
- 基于狀態(tài)機(jī)的汽車電動(dòng)滑移門(mén)系統(tǒng) 8次下載
- 使用Synplify設(shè)計(jì)安全的VHDL狀態(tài)機(jī) 12次下載
- 使用狀態(tài)機(jī)的按鍵消抖處理方法電子鐘程序免費(fèi)下載
- 2021_同步狀態(tài)機(jī)的原理、結(jié)構(gòu)和設(shè)計(jì) 3次下載
- 狀態(tài)機(jī)原理及用法 0次下載
- 利用狀態(tài)機(jī)的按鍵消抖程序 30次下載
- 狀態(tài)機(jī)代碼生成工具 9次下載
- 如何寫(xiě)好狀態(tài)機(jī)
- 狀態(tài)機(jī)該怎么監(jiān)控 310次閱讀
- Spring狀態(tài)機(jī)的實(shí)現(xiàn)原理和使用方法 1680次閱讀
- SaberRD狀態(tài)機(jī)建模工具介紹(一)什么是狀態(tài)機(jī)建模 1249次閱讀
- 狀態(tài)機(jī)怎么上來(lái)就錯(cuò)了?怎么解決? 289次閱讀
- 什么是狀態(tài)機(jī)?狀態(tài)機(jī)的種類與實(shí)現(xiàn) 7941次閱讀
- 一個(gè)基于事件驅(qū)動(dòng)的有限狀態(tài)機(jī) 673次閱讀
- 基于事件驅(qū)動(dòng)的有限狀態(tài)機(jī)介紹 941次閱讀
- 如何構(gòu)建基于狀態(tài)機(jī)的軟件系統(tǒng) 1417次閱讀
- 狀態(tài)機(jī)到底是什么 3671次閱讀
- 狀態(tài)機(jī)概述 如何理解狀態(tài)機(jī) 1w次閱讀
- 狀態(tài)機(jī)和組合邏輯的冒險(xiǎn)競(jìng)爭(zhēng)淺析 3876次閱讀
- 簡(jiǎn)述如何使用Harmony的動(dòng)態(tài)驅(qū)動(dòng)和狀態(tài)機(jī)來(lái)編寫(xiě)程序 3934次閱讀
- 基于狀態(tài)機(jī)的單片機(jī)按鍵短按長(zhǎng)按功能的實(shí)現(xiàn) 1.8w次閱讀
- 初學(xué)者對(duì)有限狀態(tài)機(jī)(FSM)的設(shè)計(jì)的認(rèn)識(shí) 4142次閱讀
- 利用狀態(tài)機(jī)的狀態(tài)機(jī)實(shí)現(xiàn)層次結(jié)構(gòu)化設(shè)計(jì) 3248次閱讀
下載排行
本周
- 1TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 2開(kāi)關(guān)電源基礎(chǔ)知識(shí)
- 5.73 MB | 6次下載 | 免費(fèi)
- 3100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 4嵌入式linux-聊天程序設(shè)計(jì)
- 0.60 MB | 3次下載 | 免費(fèi)
- 5基于FPGA的光纖通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 0.61 MB | 2次下載 | 免費(fèi)
- 6基于FPGA的C8051F單片機(jī)開(kāi)發(fā)板設(shè)計(jì)
- 0.70 MB | 2次下載 | 免費(fèi)
- 751單片機(jī)窗簾控制器仿真程序
- 1.93 MB | 2次下載 | 免費(fèi)
- 8基于51單片機(jī)的RGB調(diào)色燈程序仿真
- 0.86 MB | 2次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33564次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21548次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書(shū))
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德?tīng)栔?/a>
- 0.00 MB | 6653次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537796次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191185次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183278次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論
查看更多