實驗一基于并行接口的鍵盤控制_第1頁
實驗一基于并行接口的鍵盤控制_第2頁
實驗一基于并行接口的鍵盤控制_第3頁
實驗一基于并行接口的鍵盤控制_第4頁
實驗一基于并行接口的鍵盤控制_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、實驗一 基于并行接口的鍵盤控制本科實驗報告實驗一基于并行接口的鍵盤控制一、實驗冃的1 .掌握簡單并行接口 (8255)的工作原理及使用方法。2了解小鍵盤的工作原理,學會設(shè)計小鍵盤的接口技術(shù)。3.利用8255并行接口芯片作為小鍵盤的接口電路,掌握它們之間的線 路連接。二、實驗內(nèi)容與步驟1、接線pao - pa3 /8255接行0 -行3/4x4矩陣鍵盤pb0-pb3 /8255接列0 -列3/4x4矩陣鍵盤cs /8255 接 y1 /i0 地址2、編程實現(xiàn)在按下小鍵盤上的任意鍵后,在微機屏幕上顯示相應字符。它們 的對應關(guān)系如下:小鍵盤顯示001 12 23 34 45 566778899aab

2、bccddeeff三、實驗原理1、可編程并行接口 8255a芯片8255a是通用的可編程并行接口芯片,它可以將任一個與ttl兼容的 i/o設(shè)備與cpu相連。8255a為40引腳雙列直插芯片。它有三個相互獨立 的端口,分別成為a端口、b端口、c端口,每個端口有8根數(shù)據(jù)線,通 過數(shù)據(jù)線,可以與i/o設(shè)備交換數(shù)據(jù)。8255a共有兩類編程控制字:方式選擇控制字和對c端口按位置位/ 復位控制字。這兩個控制字都要寫入控制寄存器。初始化時,把方式選擇 控制字寫入控制寄存器用來選擇端口的工作方式及端口功能。在8255a i 作之后,把“按位置位/復位控制字”寫入控制字寄存器,可以把c端口的 對應位單獨地置1或

3、置0。(1)方式選擇控制字方式選擇控制字的格式如下圖所示:圖1方式選擇控制字各位的意義如下:d7位:方式選擇控制字的特征位,必須為1,表示寫入控制寄存器的 控制字為方式選擇控制字。d6/d5位:選擇a組的工作方式,控制a端 口及c端口的高4位工作方式?!?0”:方式 0;“01”:方式 1;“l(fā)x”:方式 2。d4位:d4二0,選擇a端口的8條數(shù)據(jù)線pa7-pa0作為輸出線;d4=l, 選擇a端口的8條數(shù)據(jù)線pa7-pa0作為輸入線。d3位:d3=0,選擇c端口的高4位數(shù)據(jù)線pc7-pc4作為輸岀線;d3=l, 選擇c端口的高4位數(shù)據(jù)線pc7-pc4作為輸入線。d2位:選擇b組的工作方式,控制

4、b端口及c端口的低4位工作方 式。d2二0,選擇b組工作于方式0; d2二1選擇b組工作于方式1。d1位:dl=0,選擇b端口的8條數(shù)據(jù)線pb7-pb0作為輸出線;dl=l, 選擇a端口的8條數(shù)據(jù)線pb7-pb0作為輸入線。d0位:d0=0,選擇c端口的低4位數(shù)據(jù)線pc3-pc0作為輸出線;d0=l, 選擇c端口的低4位數(shù)據(jù)線pc3-pc0作為輸入線。(2) c端口按位置位/復位控制字c端口按位置位/復位控制字的格式如下圖所示:圖2 c端口按位置位/復位控制字各位的意義如下:d7位:特征位,該位必須為0,表示寫入控制寄存器的控制字為c端 口按位置位/復位控制字。d6/d5/d4位:不用。d3/

5、d2/d1位:c端口選擇位,選擇c端口中特定的某一位。“ml” - “000”分別表示第7位第0位。d0位:置位/復位。do = 1 ,表示選擇的端口輸出d0=0,表示 選擇的端口輸岀0。2、4x4矩陣鍵盤矩陣鍵盤由8255芯片卡控制,并將行線連接到8255芯片的a ,將 列線連接到b 口,還需要連接8255芯片的片選到y(tǒng)1/io地址(280h)以 使鍵盤陣列有8255芯片控制。8255a與4x4矩陣鍵盤接口線路如圖3所示。圖3 8255芯片與矩陣鍵盤pa0-pa3分別連接矩陣鍵盤的4條行線,pb0-pb3分別連接矩陣鍵盤的 四條列線。所有的行線、列線通過上拉電阻共與正電壓源相連。因此當按 鍵

6、沒有按下時,所有的端口讀入的數(shù)據(jù)均為當有按鍵按下時,對應 的行線與列線讀入的數(shù)據(jù)應保持一致。皆為0或皆為(1 矩陣鍵盤 的檢測就是按照上述特性實現(xiàn)的。一共有兩種檢測方法:行掃描法、行反 轉(zhuǎn)法。(1)行掃描法行掃描法的原理如下,首先判斷是否有按鍵按下。將所有的行線置成 0電平,然后通過列線輸入全部列值,如果讀入的列值全是1,則說明沒 有任何一個鍵按下;反z,如果讀入的列值不全是1,這說明有鍵按下。 也就是說,在鍵盤識別的開始先進行全掃描。若有鍵按下,則必須判別是 哪個按鍵被操作。第二部確定哪個鍵按下。一口發(fā)現(xiàn)有鍵按下,就轉(zhuǎn)入采用逐行掃描的 辦法倆確定究竟是哪一個被按下。先掃描第一行,即使它輸出為

7、o電平, 其余的行線為高電平1,然后讀入列值。如果讀入的列值中,其中有一位 為低電平0,則說明在慈航的一個行、列交叉處有鍵被按下。如果讀入的 列值全是1,說明這一行所有按鍵都未被按下。接著掃描第二行。依此類 推,逐行掃描,知道掃完全部的行線為止。若在掃描的過程屮,發(fā)現(xiàn)非全 1的列值,就能找出被按下的鍵。圖4行掃描法參考流程圖(2)線路行反轉(zhuǎn)法行反轉(zhuǎn)法工作原理如下,首先向各行線上全部送低電平0,然后讀入 列線的值,如果此時有某一鍵被按下,則必定會使某一列線為0,輸入的 列值其中某一位為0o然后使行線工作在輸入方式,列線工作在輸出方式。 利用輸出指令,使列線全部輸出為0值,再從行線輸入行線值。行值

8、中閉 合鍵所對應的位必然為低電平0。利用這種反轉(zhuǎn)法,可得到一對行值和列 值,每一個按鍵唯一對應一組行值和列值,行值和列值組合起來可形成一 個按鍵的識別碼。圖5行反轉(zhuǎn)法工作示意圖 圖6行反轉(zhuǎn)法工作流程圖四、編程實現(xiàn) 為了實現(xiàn)實驗耍求主耍實現(xiàn)兩個方面的內(nèi)容,其一是對8255芯片的初始化,其二是對矩陣鍵盤進行檢測,找出按下的按鍵并執(zhí)行相應操作。編程代碼如下:data segmenttabldb& #39;f','e','d ','c'tab2db& #39;b&#3

9、9;,'a','9','8'tab3db& #39;7','6','5',& #39;4'tab4db& #39;3','2','l'?'0'kbdb00eh,00dh?00bh,007hportequ288hdata endsstack segmentsta db 25

10、6 dup(?)top equ size stastack endscode segmentassume cs:code,ds:data,ss:stackmain proc farmov ax,datamov ds,ax mov ax,stackmov ss,axmov sp,topmov dx,port+3 ;指向控制口,初始化8255完畢mov al,10000010b;指定 a 口 b 口輸入輸出out dx,albegin:mov al,0mov dx,portout dx,al ;a 口輸出 0mov dx,port+lin alzdx ;b 口讀入and al,ofh ;00001

11、111b.判斷是否有鍵按下cmp al,ofhje begin;沒冇就繼續(xù)掃描movaloooolllob;有的話,開始掃描一行,控制a 口輸出的一行為 0 mov dx,portout dx,almov dx,port+lin al,dx;讀入b 口的輸入lea bxtabl;第一行的地址cmp alzofh;比較讀入的是不是全是1jne display;不是就說明找對了mov al,00001101bmov dx,portout dx,almov dx,port+lin al,dxlea bx,tab2cmp alzofhjne displaymov al,00001011bmov dx,

12、portout dx,almov dx,port+lin al,dxlea bxztab3cmp al70fhjne displaymov al,00000111bmov dx,portout dx,almov dx,port+lin al,dx;如法炮制;如法炮制;如法炮制lea bx,tab4cmp al,ofhjne displaynopjmp begin;都沒掃描到,再回歸初始化掃描display:mov dbbx ;找到的行的首地址,但此時還不知道是這一行里的哪一 個lea si,kb;預設(shè)的不同字符的對應地址next:cmpaljsi ;確定是第幾個,和1110、1101、1011

13、、0111去順序比 較,不是就加一,直到吻合je show;找到是哪一個以后去顯示inc si;否則就繼續(xù)inc di;此處的加一使這段程序?qū)崿F(xiàn)其作用jmp nextshow:mov ah,2mov dl,diint 21h;顯示字符cmp dl,'f'如果是 fje over;則退出call delay ;否則繼續(xù)jmp begin ;接著掃描over:mov ah,4chint21hmain endpdelay proc nearpush dipush exmov cx,olfh ;011111=32mov di,0 ;0,再減去1就是11111111,再回到零時是65536;again:nop 涎時dec dijnz againdec exjnz again;循環(huán)

溫馨提示

  • 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

提交評論