微機原理鍵盤掃描及顯示設(shè)計實驗_第1頁
微機原理鍵盤掃描及顯示設(shè)計實驗_第2頁
微機原理鍵盤掃描及顯示設(shè)計實驗_第3頁
微機原理鍵盤掃描及顯示設(shè)計實驗_第4頁
微機原理鍵盤掃描及顯示設(shè)計實驗_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、一、 實驗名稱:鍵盤掃描及顯示設(shè)計實驗二、 實驗?zāi)康?1學(xué)習(xí)按鍵掃描的原理及電路接法;2掌握利用8255完成按鍵掃描及顯示。三、實驗內(nèi)容及步驟1. 實驗內(nèi)容 編寫程序完成按鍵掃描功能,并將讀到的按鍵值依次顯示在數(shù)碼管上。實驗機的按鍵及顯示模塊電路如圖1所示。按圖2連線。圖1 鍵盤及顯示電路圖2 實驗連線2. 實驗步驟 (1)按圖1接線; (2)鍵入:check命令,記錄分配的i/o空間; (3)利用查出的地址編寫程序,然后編譯鏈接; (4)運行程序,觀察數(shù)碼管顯示是否正確。四、流程圖開 始初始化緩沖用于存放鍵值初始化8255工作方式顯示刷新及清屏無按鍵掃描小鍵盤按鍵有按鍵顯示刷新及清屏無按鍵掃

2、描小鍵盤按鍵有按鍵依次檢測1-4列,確定是第幾行按鍵按下將按鍵保存到緩沖區(qū)顯示刷新及清屏否按鍵是否彈起否是否檢測完是是五、源程序;keyscan.asm;鍵盤掃描及數(shù)碼管顯示實驗;*根據(jù)check配置信息修改下列符號值*ioy0 equ 9800h ;片選ioy0對應(yīng)的端口始地址;*my8255_a equ ioy0+00h*4 ;8255的a口地址my8255_b equ ioy0+01h*4 ;8255的b口地址my8255_c equ ioy0+02h*4 ;8255的c口地址my8255_mode equ ioy0+03h*4 ;8255的控制寄存器地址stack1 segment s

3、tack dw 256 dup(?)stack1 endsdata segmentdtable db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,77h,7ch,39h,5eh,79h,71hdata ends ;鍵值表,0f對應(yīng)的7段數(shù)碼管的段位值code segment assume cs:code,ds:datastart: mov ax,datamov ds,ax mov si,3000h ;建立緩沖區(qū),存放要顯示的鍵值mov al,00h ;先初始化鍵值為0mov si,almov si+1,almov si+2,almov si+3,almov

4、di,3003h mov dx,my8255_mode ;初始化8255工作方式 mov al,81h ;方式0,a口、b口輸出,c口低4位輸入 out dx,albegin: call dis ;顯示刷新 call clear ;清屏call ccscan ;掃描按鍵jnz getkey1 ;有鍵按下則跳置getkey1 mov ah,1 ;判斷pc鍵盤是否有按鍵按下 int 16h jz begin ;無按鍵則跳回繼續(xù)循環(huán),有則退出quit: mov ax,4c00h ;返回到dos int 21hgetkey1:call dis ;顯示刷新 call dally call dally c

5、all ccscan ;再次掃描按鍵jnz getkey2 ;有鍵按下則跳置getkey2jmp begin ;否則跳回開始繼續(xù)循環(huán)getkey2:mov ch,0fehmov cl,00h ;設(shè)置當(dāng)前檢測的是第幾列colum: mov al,ch ;選取一列,將x1x4中一個置0 mov dx,my8255_a out dx,al mov dx,my8255_c ;讀y1y4,用于判斷是哪一行按鍵閉合 in al,dxl1:test al,01h ;是否為第1行 jnz l2 ;不是則繼續(xù)判斷 mov al,00h ;設(shè)置第1行第1列的對應(yīng)的鍵值jmp kcodel2:test al,02h

6、 ;是否為第2行 jnz l3 ;不是則繼續(xù)判斷 mov al,04h ;設(shè)置第2行第1列的對應(yīng)的鍵值 jmp kcodel3:test al,04h ;是否為第3行 jnz l4 ;不是則繼續(xù)判斷 mov al,08h ;設(shè)置第3行第1列的對應(yīng)的鍵值jmp kcodel4:test al,08h ;是否為第4行 jnz next ;不是則繼續(xù)判斷 mov al,0ch ;設(shè)置第4行第1列的對應(yīng)的鍵值kcode: add al,cl ;將第1列的值加上當(dāng)前列數(shù),確定按鍵值call putbuf ;保存按鍵值push axkon:call dis ;顯示刷新call clear ;清屏call

7、ccscan ;掃描按鍵,判斷按鍵是否彈起jnz kon ;未彈起則繼續(xù)循環(huán)等待彈起pop axnext: inc cl ;當(dāng)前檢測的列數(shù)遞增 mov al,chtest al,08h ;檢測是否掃描到第4列jz kerr ;是則跳回到開始處 rol al,1 ;沒檢測到第4列則準備檢測下一列mov ch,aljmp columkerr: jmp beginccscan proc near ;掃描是否有按鍵閉合子程序 mov al,00h mov dx,my8255_a ;將4列全選通,x1x4置0out dx,al mov dx,my8255_c in al,dx ;讀y1y4not al

8、and al,0fh ;取出y1y4的反值retccscan endpclear proc near ;清除數(shù)碼管顯示子程序 mov dx,my8255_b ;段位置0即可清除數(shù)碼管顯示 mov al,00h out dx,alretclear endpdis proc near ;顯示鍵值子程序 push ax ;以緩沖區(qū)存放的鍵值為鍵值表偏移找到鍵值并顯示mov si,3000h mov dl,0f7hmov al,dlagain: push dx mov dx,my8255_a out dx,al ;設(shè)置x1x4,選通一個數(shù)碼管 mov al,si ;取出緩沖區(qū)中存放鍵值 mov bx,

9、offset dtableand ax,00ffhadd bx,ax mov al,bx ;將鍵值作為偏移和鍵值基地址相加得到相應(yīng)的鍵值 mov dx,my8255_b out dx,al ;寫入數(shù)碼管adpcall dallyinc si ;取下一個鍵值 pop dx mov al,dltest al,01h ;判斷是否顯示完? jz out1 ;顯示完,返回ror al,1 mov dl,aljmp again ;未顯示完,跳回繼續(xù)out1: pop ax retdis endpputbuf proc near ;保存鍵值子程序 mov si,dimov si,aldec dicmp di,2fffhjnz gobackmov di,3003hgoback: retputbuf endpdally proc near ;軟件延時子程序 push cx mov cx,00ffhd1: mov ax,00ffhd2: dec axjnz d2loop d1po

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論