第9章鍵盤輸入接口與狀態(tài)機(jī)設(shè)計(jì)_第1頁(yè)
第9章鍵盤輸入接口與狀態(tài)機(jī)設(shè)計(jì)_第2頁(yè)
第9章鍵盤輸入接口與狀態(tài)機(jī)設(shè)計(jì)_第3頁(yè)
第9章鍵盤輸入接口與狀態(tài)機(jī)設(shè)計(jì)_第4頁(yè)
第9章鍵盤輸入接口與狀態(tài)機(jī)設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1第第9章章 鍵盤輸入接口與狀態(tài)機(jī)編程鍵盤輸入接口與狀態(tài)機(jī)編程2通用I/O數(shù)字輸入接口設(shè)計(jì) nI/O輸入輸出接口,常為數(shù)字信號(hào),可能是模擬信號(hào)比如AD,但內(nèi)部轉(zhuǎn)換為數(shù)字信號(hào)3I/O輸入接口硬件設(shè)計(jì)要點(diǎn) n模擬信號(hào)和數(shù)字信號(hào) n電壓信號(hào)和電流信號(hào) n單次信號(hào)和連續(xù)信號(hào) 4I/O輸入接口軟件設(shè)計(jì)要點(diǎn) n用戶程序需要首先對(duì)要使用的用戶程序需要首先對(duì)要使用的I/O口進(jìn)行初始化設(shè)置,根據(jù)口進(jìn)行初始化設(shè)置,根據(jù)實(shí)際需要設(shè)定使用實(shí)際需要設(shè)定使用I/O口的工作方式(輸出還是輸入),當(dāng)口的工作方式(輸出還是輸入),當(dāng)設(shè)定為輸入方式時(shí),還要考慮是否使用內(nèi)部的上拉電阻。設(shè)定為輸入方式時(shí),還要考慮是否使用內(nèi)部的上拉電

2、阻。nI/O口用于輸出時(shí),應(yīng)設(shè)置口用于輸出時(shí),應(yīng)設(shè)置DDRx = 1或或DDRx.n = 1,輸出,輸出值寫入值寫入PORTx或或PORTx.n中。中。nI/O口用于輸入時(shí),應(yīng)設(shè)置口用于輸入時(shí),應(yīng)設(shè)置DDRx = 0或或DDRx.n = 0。讀取。讀取外部引腳電平時(shí),應(yīng)讀取外部引腳電平時(shí),應(yīng)讀取PINx.n的值,而不是的值,而不是PORTx.n的的值。此時(shí)值。此時(shí)PORTx.n = 1表示該表示該I/O內(nèi)部的上拉電阻有效,內(nèi)部的上拉電阻有效,PORTx.n = 0表示不使用內(nèi)部上拉,外部引腳呈現(xiàn)三態(tài)高阻表示不使用內(nèi)部上拉,外部引腳呈現(xiàn)三態(tài)高阻輸入狀態(tài)。一旦將輸入狀態(tài)。一旦將I/O口的工作方式由

3、輸出設(shè)置成輸入方式口的工作方式由輸出設(shè)置成輸入方式后,必須等待一個(gè)時(shí)鐘周期后才能正確的讀到外部引腳后,必須等待一個(gè)時(shí)鐘周期后才能正確的讀到外部引腳PINx.n的值。的值。5按鍵輸入接口設(shè)計(jì) 6基于狀態(tài)機(jī)的按鍵輸入軟件接口設(shè)計(jì)基于狀態(tài)機(jī)的按鍵輸入軟件接口設(shè)計(jì)無(wú)按鍵無(wú)按鍵狀態(tài)狀態(tài)0 0有按鍵有按鍵狀態(tài)狀態(tài)1等釋放等釋放狀態(tài)狀態(tài)20/0 (0/0 (消抖消抖) )1/01/01/0 (1/0 (干擾干擾) )0/1 (0/1 (確認(rèn)確認(rèn)) )1/01/00/00/07#define key_inputPIND.7/ 按鍵輸入口按鍵輸入口#define key_state_0 0#define key

4、_state_1 1#define key_state_2 2char read_key(void) static char key_state = 0; char key_press, key_return = 0;key_press = key_input;/ 讀按鍵讀按鍵I/O電平電平switch (key_state)case key_state_0:/ 按鍵初始態(tài)按鍵初始態(tài) if (!key_press) key_state = key_state_1;/ 鍵被按下,狀態(tài)鍵被按下,狀態(tài)轉(zhuǎn)換到鍵確認(rèn)態(tài)轉(zhuǎn)換到鍵確認(rèn)態(tài)break;case key_state_1: / 按鍵確認(rèn)態(tài)按鍵確認(rèn)態(tài)

5、 if (!key_press) key_return = 1;/ 按鍵仍按下,按鍵確認(rèn)輸出為按鍵仍按下,按鍵確認(rèn)輸出為“1” key_state = key_state_2;/ 狀態(tài)轉(zhuǎn)換到鍵釋放態(tài)狀態(tài)轉(zhuǎn)換到鍵釋放態(tài) 8elsekey_state = key_state_0;/ 按鍵已抬起,轉(zhuǎn)換按鍵已抬起,轉(zhuǎn)換到按鍵初始態(tài)到按鍵初始態(tài)break;case key_state_2: if (key_press) key_state = key_state_0; /按鍵按鍵已釋放,轉(zhuǎn)換到按鍵初始態(tài)已釋放,轉(zhuǎn)換到按鍵初始態(tài)break; return key_return;9例例9.1 單按鍵的實(shí)時(shí)時(shí)

6、鐘秒校單按鍵的實(shí)時(shí)時(shí)鐘秒校時(shí)設(shè)置設(shè)計(jì)(一)時(shí)設(shè)置設(shè)計(jì)(一)10程序n#include nflash char led_710=0 x3F,0 x06,0 x5B,0 x4F,0 x66,0 x6D,0 x7D,0 x07,0 x7F,0 x6F;nchar time3; / 時(shí)、分、秒計(jì)數(shù)單元nchar dis_buff6; / 顯示緩沖區(qū),存放要顯示的6個(gè)字符的段碼值nchar time_counter,key_stime_counter; / 時(shí)間計(jì)數(shù)單元,nchar posit;nbit point_on, time_1s_ok,key_stime_ok; nvoid display(v

7、oid) / 6位LED數(shù)碼管動(dòng)態(tài)掃描函數(shù) n nPORTC = 0 xff; nPORTA = led_7dis_buffposit; nif (point_on & (posit=2|posit=4) PORTA |= 0 x80; nPORTC = positionposit; nif (+posit =6 ) posit = 0; / (3) n 11n/ Timer 0 比較匹配中斷服務(wù),2ms定時(shí) ninterrupt TIM0_COMP void timer0_comp_isr(void) n ndisplay(); / LED掃描顯示 nif (+key_stime_c

8、ounter =5) n nkey_stime_counter = 0; nkey_stime_ok = 1; / 10ms到 nif (+time_counter = 100) n ntime_counter = 0; ntime_1s_ok = 1; / 1s到 n n n 12nvoid time_to_disbuffer(void) / 時(shí)鐘時(shí)間送顯示緩沖區(qū)函數(shù) n nchar i,j=0; nfor (i=0;i= 60) / 秒加1,以下為時(shí)間調(diào)整nntime0 = 0;nif (+time1 = 60)nntime1 = 0;nif (+time2 = 24) time2 = 0

9、;nnnntime_to_disbuffer(); / 新調(diào)整好的時(shí)間送顯示緩沖區(qū)nn;n17n該程序中LED數(shù)碼管動(dòng)態(tài)掃描等部分與前面介紹的例子相同,T/C0的工作于CTC方式,每2ms產(chǎn)生中斷。在T/CO中斷服務(wù)中增加了10ms到的標(biāo)志變量key_stime_ok,作為按鍵狀態(tài)機(jī)的時(shí)間觸發(fā)序列信號(hào)。在主程序中,每隔10ms調(diào)用read_key()按鍵接口程序,當(dāng)函數(shù)返回值為1時(shí),說(shuō)明產(chǎn)生了一次按鍵操作過(guò)程,秒位加1,然后進(jìn)行時(shí)間調(diào)整。18思考與實(shí)踐1920基于狀態(tài)機(jī)分析的簡(jiǎn)單按鍵設(shè)計(jì)(二) 無(wú)按無(wú)按鍵鍵0 0有按有按鍵鍵1計(jì)時(shí)計(jì)時(shí)230/0 (0/0 (消抖消抖) )1/01/01/0 (1/0 (干擾干擾) )0/0 0/0 1/11/10(1s)/00(1s)/20(1s)/20(0.5s)/00(0.5s)/20(0.5s)/221程序nP29122鍵盤輸入接口設(shè)計(jì) n矩陣鍵盤的工作原理和掃描確認(rèn)方式 23鍵盤掃描處理的設(shè)計(jì)原則鍵盤掃描處理的設(shè)計(jì)原則n既要保證既要保證MCU能及時(shí)的判別按鍵的動(dòng)作,能及時(shí)的判別按鍵的動(dòng)作,處理

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論