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

下載本文檔

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

文檔簡介

1、1 / 13微機原理與接口技術(shù)課程設(shè)計報告專專 業(yè):業(yè): 班班 級:級: 姓姓 名:名: 學學 號:號: 指導教師評語:成績: 簽名: 年 月 日2 / 13小鍵盤按鍵識別一一課題任務與要求實驗箱上有一個 24 鍵小鍵盤,出廠時按鍵接點已經(jīng)按圖所示連接。小鍵盤有 8 根橫向引出線。實驗前將 8 根橫向引出線與 PA0PA7 相連,3 根縱向引出線與 PB0PB2 相連,再從“I/O 口位置譯碼器”選擇一個譯碼器輸出連接到 8255 的片選端,做好上述連接之后,就構(gòu)成了以 8255 為核心的鍵盤輸入電路要求:在實際的自動控制系統(tǒng)中,鍵盤輸入電路的作用是輸入數(shù)據(jù)(09,AF)或者輸入控制信號(G,

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

3、則 AL 賦值為 FFH;如果輸入非法字符,則 AL 賦值為 0AH。設(shè)定如果是 R 則退出程序.CHANGE 函數(shù)用來改變 BUFFER 中保存的鍵值,將 BUFFER 中的鍵值移位,最后一位加入 AL 中的新鍵值。CLOSEALL 此函數(shù)用在退出程序時將數(shù)碼管關(guān)閉.以上是主題函數(shù),在設(shè)計過程中還碰到了一些細節(jié)問題,例數(shù)碼管的顯示才用延遲 20MS的辦法解決,具體方案在 DISPLAY 函數(shù)中。3 / 13三實現(xiàn)系統(tǒng)1、程序框圖、程序框圖:預置:A 口為方式 0 輸出 B 口為方式 0 輸入0PA7-PA0PB2-PB0 AHAH=7?延時 20ms預置:B 口為方式 0 輸出A 口為方式

4、0 輸入列值 PB2-PB0PA7-PA0 AL根據(jù) AX 內(nèi)容,查找鍵值表,顯示相應的鍵值。是 R?結(jié)束演示2、實驗電路圖:、實驗電路圖:4 / 133、8255 方式選擇控制字方式選擇控制字 1 D6 D5 D4 D3 D2 D1 D04、源程序:、源程序:TITLE LITTLEKEYBOARD方式選擇控制字標志A 組方式:00方式 001方式 11X方式 2A 口 IO1輸入0輸出C 上半口 IO:1輸入0輸出B 組方式:0方式 01方式 1B 口IO:1輸入0輸出C 下半口 IO:1=輸入0輸出 5 / 13SSEG SEGMENT PARA STACK STACK DB 256 D

5、UP (0)SSEG ENDSDSEG SEGMENT A_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 SEGMENT ASSUME CS:CSEG, DS:DSEG,SS:SSEG START PROC NEAR MOV AX,DSEG MOV DS,AXCALL CLOSEALL(關(guān)掉數(shù)碼管,防止因為最初

6、數(shù)碼管有顯示而使程序執(zhí)行不正常。)CMPAGAIN: CALL DISPLAY(DISPLAY 函數(shù)用來將 BUFFER 中的鍵值顯示在數(shù)碼管上。)MOV DX,CON_8255MOV AL,10000010BOUT DX,AL (設(shè)定 A 口方式 0 輸出,B 口方式 0 輸入)AGAIN: CALL DISPLAY6 / 13 MOV DX,A_8255 MOV AL,0 OUT DX,AL (0PA7-PA0) MOV DX,B_8255 IN AL,DXAND AL,00000111B (取出 PB0PB2CMP AL,00000111B JE AGAIN MOV LIE,AL(將列值

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

8、.) CALL CLOSEALL MOV AH,4CH INT 21HCONTINUE:7 / 13CALL 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 (取出 PB0PB2)CMP AL,00000111BJNE LLLJMP CMPAGAIN(不斷掃描,如果不松開按鍵,那么就循環(huán)等待;直到按鍵松開就跳回。) RETSTART

9、 ENDP;*(此函數(shù)用以延時 20MS)DELAY1 PROC NEAR PUSH AX PUSH CX PUSH DX MOV AH,86H MOV CX,0 MOV DX,20000 INT 15H POP DX POP CX8 / 13 POP AXRETDELAY1 ENDP;*(GETINPUT 函數(shù)通過行值和列值查出輸入的鍵值,并將它保存在 AL 中,如果輸入是 R,則 AL 賦值為 FFH;如果輸入非法字符,則 AL 賦值為 0AH。 )GETINPUT PROC NEAR CMP LIE,00000110B JE LIE0 CMP LIE,00000101B JE LIE1

10、CMP LIE,00000011B JE LIE2 MOV AL,0AH RETLIE2:CMP HANG,00010000B JE NEXT MOV AL,0AH RETNEXT:MOV AL,0FFH RETLIE0:CMP HANG,01111111B JE KEY8 CMP HANG,10111111B JE KEY9 MOV AL,0AH RETKEY8:MOV AL,8 RETKEY9:MOV AL,99 / 13 RETLIE1:CMP HANG,01111111B JE KEY0 CMP HANG,10111111B JE KEY1 CMP HANG,11011111B JE

11、KEY2 CMP HANG,11101111B JE KEY3 CMP HANG,11110111B JE KEY4 CMP HANG,11111011B JE KEY5CMP HANG,11111101B JE KEY6 CMP HANG,11111110B JE KEY7 MOV AL,0AH RETKEY0:MOV AL,0 RETKEY1:MOV AL,1 RETKEY2:MOV AL,2 RETKEY3:MOV AL,3 RETKEY4:MOV AL,4 RETKEY5:MOV AL,510 / 13 RETKEY6:MOV AL,6 RETKEY7:MOV AL,7 RETGETI

12、NPUT ENDP;*(CHANGE 函數(shù)用來改變 BUFFER 中保存的鍵值,將 BUFFER 中的鍵值移位,最后一位加入 AL 中的新鍵值。)CHANGE PROC NEAR PUSH AX PUSH SI MOV SI,OFFSET BUFFER MOV AH,SI+1 MOV SI,AH MOV AH,SI+2 MOV SI+1,AH MOV AH,SI+3 MOV SI+2,AH MOV AH,SI+4 MOV SI+3,AH MOV AH,SI+5 MOV SI+4,AH MOV SI+5,AL POP SI POP AXRETCHANGE ENDP;*11 / 13(DISPLA

13、Y 函數(shù)用來將 BUFFER 中的鍵值顯示在數(shù)碼管上。)DISPLAY PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI MOV BX,OFFSET TABLE MOV SI,OFFSET BUFFER MOV CL,1XUNHUAN: MOV AL,SI XLAT MOV DX,201H OUT DX,AL MOV DX,200H MOV AL,CL OUT DX,AL MOV DX,200H MOV AL,0 OUT DX,AL INC SI SHL CL,1 CMP CL,40H JNE XUNHUAN POP SI POP DX POP

14、 CX POP BX POP AX12 / 13 RETDISPLAY ENDP;*(此函數(shù)用在退出程序時將數(shù)碼管關(guān)閉.)CLOSEALL PROC NEAR PUSH AX PUSH CX PUSH DX MOV CL,1XUNHUAN1: MOV DX,200H MOV AL,CL OUT DX,AL MOV AL,0 OUT DX,AL SHL CL,1 CMP CL,20H JNE XUNHUAN1 POP DX POP CX POP AX RETCLOSEALL ENDPCSEG END END START四、程序運行結(jié)果分析: 六實驗總結(jié):六實驗總結(jié): 1實驗電路板上 8255 的端口位置位 210H213H,這與書上給的不一樣,開始時在13 / 13這方面花費了較多時間。2通過此次程序設(shè)計,我對計算機讀取鍵盤值的過程有了一定的認識。最開始編程序時并沒有想到如果始終按同一個鍵不放,數(shù)碼管上就會一下子出來很多字符。調(diào)試時發(fā)現(xiàn)了這個問題,想到的解決方法有兩種,一種是每一次按鍵后檢測鍵是否松開,直到松開后再繼續(xù)執(zhí)行下一次判斷;另一種是按鍵后延緩一個固定的時間(大約 0.2 秒)再判斷(計算機的鍵盤就是采取這樣的

溫馨提示

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

評論

0/150

提交評論