小鍵盤按鍵識別微機(jī)原理課程設(shè)計解析_第1頁
小鍵盤按鍵識別微機(jī)原理課程設(shè)計解析_第2頁
小鍵盤按鍵識別微機(jī)原理課程設(shè)計解析_第3頁
小鍵盤按鍵識別微機(jī)原理課程設(shè)計解析_第4頁
小鍵盤按鍵識別微機(jī)原理課程設(shè)計解析_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、微機(jī)原理與接口技術(shù)課程設(shè)計報告專 業(yè):班級:姓 名:學(xué)號:指導(dǎo)教師評語:成績:簽名:年 月 日小鍵盤按鍵識別1 課 題任務(wù)與要求實驗箱上有一個24 鍵小鍵盤,出廠時按鍵接點(diǎn)已經(jīng)按圖所示連接。小鍵盤有8根橫向引出線。實驗前將8根橫向引出線與PAgPA7相連,3根縱 向引出線與PB0- PB2相連,再從“I/O 口地址譯碼器”選擇一個譯碼器輸出 連接到8255的片選端,做好上述連接之后,就構(gòu)成了以8255為核心的鍵盤輸入電路要求:在實際的自動控制系統(tǒng)中,鍵盤輸入電路的作用是輸入數(shù)據(jù)(09, A F)或者輸入;f5制信號(G, M P, R, W X, Y, S)。實現(xiàn)上述功能的核心程 序是“按鍵識

2、別”。本實驗要求設(shè)計按鍵識別程序,當(dāng)按下小鍵盤上某一個鍵的時候,主機(jī)屏幕顯示閉合鍵的鍵名,按下小鍵盤" R'鍵之后停止演示。2 完成任務(wù)的方法或方案簡介本程序顯示數(shù)字0 到 9,剛剛開始提出兩中解決方案一是用跳轉(zhuǎn)法直接顯示數(shù)值,二是用查找法間接顯示數(shù)值,本程序是用第一種方案,雖然程序多了些,但直觀容易理解,故采納第一種方案。DISPLAY 函數(shù)用來將BUFFER 中的鍵值顯示在數(shù)碼管上。設(shè)定 A 口方式 0 輸出 ,B 口方式 0 輸入。GETINPUT 函數(shù)通過行值和列值查出輸入的鍵值,并將它保存在AL 中, 如果輸入是R,則AL賦值為FFH;如果輸入非法字符,則 AL賦值

3、為0AH。設(shè)定如果是R 則退出程序.CHANGE 函數(shù)用來改變BUFFER 中保存的鍵值,將 BUFFER 中的鍵值移位,最后一位加入 AL 中的新鍵值。CLOSEALL 此函數(shù)用在退出程序時將數(shù)碼管關(guān)閉.以上是主題函數(shù),在設(shè)計過程中還碰到了一些細(xì)節(jié)問題,例數(shù)碼管的顯示才用延遲20MS 的辦法解決,具體方案在DISPLAY 函數(shù)中。3.實現(xiàn)系統(tǒng)1、程序框圖:2、實驗電路圖:wDIDiDiMDJDftDrRDWR前河曄CS5沁Sis Nuniia數(shù)碼管顯示電路o 1 2 3 4 -LI- 6 7PPP PPPPPMOV DX,A_825593、8255方式選擇控制字TITLE LITTLEKEY

4、BOARDSSEG SEGMENT PARA STACK 'STACK'DB 256 DUP (0)SSEG ENDSDSEG SEGMENTA_8255 EQU 210HB_8255 EQU 211HCON_8255 EQU 213HBUFFER DB 6 DUP(0)HANG DB ?LIE DB ?NEWHANG DB ?NEWLIE DB ?TABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,DSEG ENDSCSEG SEGMENTASSUME CS:CSEG , DS:DSEG,SS:SSEGSTART PROC NEA

5、RMOV AX,DSEGMOV DS,AXCALL CLOSEALL(關(guān)掉數(shù)碼管,防止因為最初數(shù)碼管有顯示而使程序執(zhí)行不正常。CMPAGAIN:CALL DISPLAY(DISPLAY 函數(shù)用來將BUFFER 中的鍵值顯示在數(shù)碼管上。)MOV DX,CON_8255MOV AL,10000010BOUT DX,AL(設(shè)定 A 口方式 0 輸出 ,B 口方式 0 輸入)AGAIN:CALL DISPLAYMOV AL,0OUT DX,AL ( 0 >PA7-PA0)MOV DX,B_8255IN AL,DXAND AL,00000111B ( 取出 PB0 PB2CMP AL,000001

6、11BJE AGAINMOV LIE,AL (將列值保存)CALL DELAY1 (延時20ms)MOV DX,CON_8255MOV AL,10010000BOUT DX,AL(預(yù)置 A 口方式 0 輸入, B 口方式 0 輸入)MOV DX,A_8255IN AL,DXMOV HANG ,AL (將行值保存)CALL GETINPUT( GETINPUT 函數(shù)通過行值和列值查出輸入的鍵值,并將它保存在AL 中,如果輸入是R,則AL賦值為FFH;如果輸入非法字符,則 AL賦值為0AH。)CMP AL,0AHJE CMPAGAIN(如果是非法字符則跳回)CMP AL,0FFHJNE CONTI

7、NUE(如果是R 則退出程序.)CALL CLOSEALLMOV AH,4CHINT 21HCONTINUE:CALL CHANGE(CHANGE 函數(shù)用來改變BUFFER 中保存的鍵值)MOV DX,CON_8255MOV AL,10000010BOUT DX,AL(設(shè)定 A 口方式 0 輸出 ,B 口方式 0 輸入)LLL:CALL DISPLAYMOV DX,B_8255IN AL,DXAND AL,00000111B(取出PB0 PB2)CMP AL,00000111BJNE LLLJMP CMPAGAIN(不斷掃描,如果不松開按鍵,那么就循環(huán)等待;直到按鍵松開就跳回。RETSTART

8、 ENDP;(此函數(shù)用以延時20MS)DELAY1 PROC NEARPUSH AXPUSH CXPUSH DXMOV AH,86HMOV CX,0MOV DX,20000INT 15HPOP DXPOP CXPOP AXRETDELAY1 ENDP;( GETINPUT 函數(shù)通過行值和列值查出輸入的鍵值,并將它保存在AL 中,如果輸入是R,則AL賦值為FFH;如果輸入非法字符,則 AL賦值為0AH。)GETINPUT PROC NEARCMP LIE,00000110BJE LIE0CMP LIE,00000101BJE LIE1CMP LIE,00000011BJE LIE2MOV AL,

9、0AHRETLIE2:CMP HANG,00010000BJE NEXTMOV AL,0AHRETNEXT:MOV AL,0FFHRETLIE0:CMP HANG,01111111BJE KEY8CMP HANG ,10111111BJE KEY9MOV AL,0AHRETKEY8:MOV AL,8RETKEY9:MOV AL,9LIE1:CMP HANG,01111111BJE KEY0CMP HANG ,10111111BJE KEY1CMP HANG ,11011111BJE KEY2CMP HANG ,11101111BJE KEY3CMP HANG ,11110111BJE KEY4

10、CMP HANG ,11111011BJE KEY5CMP HANG,11111101BJE KEY6CMP HANG ,11111110BJE KEY7MOV AL,0AHRETKEY0:MOV AL,0RETKEY1:MOV AL,1RETKEY2:MOV AL,2RETKEY3:MOV AL,3RETKEY4:MOV AL,4RETKEY5:MOV AL,5RET13KEY6:MOV AL,6RETKEY7:MOV AL,7RETGETINPUT ENDP;(CHANGE 函數(shù)用來改變BUFFER 中保存的鍵值,將BUFFER 中的鍵值移位,最后一位加入 AL 中的新鍵值。)CHANGE

11、 PROC NEARPUSH AXPUSH SIMOV SI,OFFSET BUFFERMOV AH,SI+1MOV SI,AHMOV AH,SI+2MOV SI+1,AHMOV AH,SI+3MOV SI+2,AHMOV AH,SI+4MOV SI+3,AHMOV AH,SI+5MOV SI+4,AHMOV SI+5,ALPOP SIPOP AXRETCHANGE ENDP;(DISPLAY 函數(shù)用來將BUFFER 中的鍵值顯示在數(shù)碼管上。)PUSH AXPUSH BXPUSH CXPUSH DXPUSH SIMOV BX,OFFSET TABLEMOV SI,OFFSET BUFFERMO

12、V CL,1XUNHUAN:MOV AL,SIXLATMOV DX,201HOUT DX,ALMOV DX,200HMOV AL,CLOUT DX,ALMOV DX,200HMOV AL,0OUT DX,ALINC SISHL CL,1CMP CL,40HJNE XUNHUANPOP SIPOP DXPOP CXPOP BXPOP AXRETDISPLAY ENDP15*(此函數(shù)用在退出程序時將數(shù)碼管關(guān)閉.)CLOSEALL PROC NEARPUSH AXPUSH CXPUSH DXMOV CL,1XUNHUAN1:MOV DX,200HMOV AL,CLOUT DX,ALMOV AL,0O

13、UT DX,ALSHL CL,1CMP CL,20HJNE XUNHUAN1POP DXPOP CXPOP AXRETCLOSEALL ENDPCSEG ENDEND START四、程序運(yùn)行結(jié)果分析:六實驗總結(jié):1.實驗電路板上 8255的端口地址位210H 213H,這與書上給的不一樣,開始時在這 方面花費(fèi)了較多時間。2通過此次程序設(shè)計,我對計算機(jī)讀取鍵盤值的過程有了一定的認(rèn)識。最開始編程序時并沒有想到如果始終按同一個鍵不放,調(diào)試時發(fā)現(xiàn)了數(shù)碼管上就會一下子出來很多字符。這個問題,想到的解決方法有兩種,一種是每一次按鍵后檢測鍵是否松開,直到松開后再繼續(xù)執(zhí)行下一次判斷;另一種是按鍵后延緩一個固定的時間(大約0.2 秒)再判斷(計

溫馨提示

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

最新文檔

評論

0/150

提交評論