【正文】
相應的控制方案, 另外要向接口輸出數(shù)據(jù)和控制信息 ,驅(qū)動硬件正常工作。報告 第 6頁 實驗二 8255A并行接口應用 一、實驗目的 1. 掌握 8255A的功能及方式 0、 1的實現(xiàn) 。 3. 了解七段數(shù)碼管顯示數(shù)字的原理。 二、實驗內(nèi)容 1. 查找八段數(shù)碼管的顯示規(guī)律及數(shù)碼管的位選規(guī)律 。在數(shù)碼管電路上靜態(tài)地顯示 6 位學號,當主機鍵盤按下任意鍵時,停止顯示,返回 DOS。 要求在數(shù)碼管電路 1- 6 位數(shù)碼管上 ,動態(tài)顯示字符串 HELLO,當主機鍵盤按下任意鍵時結束。 三 、 實驗過程 八段數(shù)碼管位選規(guī)律 在方式 0(輸入 /輸出)下,以 A 口為輸出口, B口為輸出口, A 口接六個共陰極數(shù)碼管的八位段碼,高電平點亮數(shù)碼管的某一段 , B 口接數(shù)碼管的位選(即要使哪個數(shù)碼管亮),高電平選中某一位數(shù)碼管點亮。 PA5 PA0 PA3 PA2 PA7 PA1 PA6 PA4 微機原理硬件 實驗 字形 0 1 2 3 4 5 6 7 編碼 0EDH 21H 0F4H 0F1H 39H 0D9H 0DDH 61H 字形 8 9 A B C D E F 編碼 0FDH 0F9H 7DH 9DH 0CCH 0B5H 0DCH 5CH 六位數(shù)碼管靜態(tài)顯示 電路 6 個數(shù)碼管的同名陽極段已經(jīng)復接,當段選寄存器寄存了一個字型編碼之后, 6 個數(shù)碼管都將 顯示出相同的數(shù)字。 通過選位寄存器選擇某一位數(shù)碼管,顯示其數(shù)字(對應段值為 1),然后關閉此數(shù)碼管,再選擇下一位數(shù)碼管進行顯示;如果在一秒鐘內(nèi),每一位數(shù)碼管都能顯示 30 次以上,則人眼看到的是幾位數(shù)碼管同時在顯示。 本程序采用了 每次 掃描一排 6 個數(shù)碼管 ,然后 反復循環(huán)的方式。 通 過在每一排掃描之后檢測鍵盤狀態(tài),可以達到任意鍵退出的 功能。 開始 初始化 8255A, 計數(shù) N=0 顯示第 N 位數(shù) N = N+1 N6? N = 0 結束 NO NO 鍵按下? YES YES 微機原理硬件 實驗 DATA SEGMENT NUM DB 0F4B,21H,0EDH,0F1H,0FDH,61H 。 STACK SEGMENT STACK 39。 DB 100 DUP(0) STACK ENDS 。Set 8255A’s control state OUT DX,AL MOV AX,DATA MOV DS,AX 。Which digit to display MOV CX,06H 。Display one digit one time LOP2:MOV AL,NUM[SI] 。Display char MOV AL,BL 。Next LED on INC SI CALL DELAY 。Test keyboard,if pressed then exit LOOP LOP2 。 DELAY PROC NEAR 。報告 第 9頁 MOV BX,000FH 。Inner loop is 0FFFFH times LOOP $ DEC BX JNZ LOP3 POP CX POP BX RET DELAY ENDP 。Testing key state PUSH AX MOV AH,0BH 。If no key pressed, go on display MOV AH,4CH 。 CODE ENDS END STAT 代碼 具體 分析如下: 程序的實現(xiàn)思路是很明確而簡單的, 首先對 8255A 進行初始化, 設置控制字, 隨即開始掃描 數(shù)碼管, 這里使用了一個八位寄存器 ,賦值為一位為 1,其余全零, 依靠移位 容易 實現(xiàn)不同時刻亮不同的數(shù)碼管,且每次 只亮一個數(shù)碼管 ,其余管熄滅。每次掃描六個管, 然后 反復,即可利用視覺暫留效應產(chǎn)生 靜態(tài)顯示學號的功能。 微機原理硬件 實驗 其核心代碼和靜態(tài)顯示并無差別, 可將靜態(tài)顯示學號的代碼作為一個子程序封裝起來 直接使用。 實際實現(xiàn)時可以 存儲為碼表的形式, 移位往后讀取即可。 程序框圖如下: 開始 初始化 8255A 顯示狀態(tài) N N = N+1 N6? N = 0 結束 NO NO 鍵按下? YES YES 讀取撥碼開關,設置顯示速度 置顯示狀態(tài): N=0 微機原理硬件 實驗Char code of “HELLO” MESG DB 0,0,0,0,0,0,3DH,0DCH,8CH,8CH,0EDH,0 DATA ENDS 。STACK39。 CODE SEGMENT ASSUME DS:DATA,CS:CODE,SS:STACK 。SET PROT C OUT DX,AL LOP6:MOV BX,OFFSET MESG MOV CX,07H 。Read in to decide speed of displaying IN AL,DX INC AL AND AL,07H XOR AH,AH MOV DX,AX 。Display one state DEC DX JNZ LOPZ 。BX decide which state to display LOOP LOP5 。Return to a new start when 6 states done MAIN ENDP 。報告 第 12頁 PUSH CX PUSH DX PUSH AX MOV BP,00AAH 。Record every scan,6 digits once MOV DX,0E800H MOV AH,00000001B 。Control which char to display INC DX OUT DX,AL 。Next LED on INC SI CALL DELAY 。Testing whether key is pressed LOOP LOP2 。Outer loop ,control time of display POP AX POP DX POP CX RET DISP ENDP 。Testing key state PUSH AX MOV AH,0BH INT 21H OR AL,AL JZ GOON 。Has key pressed, then back to DOS INT 21H GOON:POP AX RET 微機原理硬件 實驗 DELAY PROC 。Outer loop is small LOPD: MOV CX,0H LOOP $ 。 CODE ENDS END MAIN 代碼的具體分析如下: 代碼直接使用了本實驗中六位數(shù)碼管靜態(tài)顯示部分的代碼, 封裝成為了DISP 子程序 ,便于調(diào)用 。 另外有 DELAY 作為延時子程序供 調(diào)用 。 主程序中 定義六種顯示狀態(tài),分別對應 于 動態(tài)顯示的六個 畫面, 主程序中加入了撥碼開關讀取的代碼, 這樣讀入速度信息, 依據(jù)速度信息置 循環(huán)次數(shù) , 用以控制顯示速度。 為了避免 按鍵抖動的影響, 程序設計中 使用按鍵釋放檢測的方法。 按鍵值的檢測采用查表的方式完成, 容易根據(jù)偏移量找到 按鍵對應的字符 顯示 碼 ,用以輸出字符 。報告 第 14頁 程序框圖如下: 開始 初始化 8253 數(shù)碼管顯示數(shù)字 結束 NO YES 檢測鍵盤輸入 查找數(shù)字顯示碼 存儲顯示碼 鍵盤按下? 鍵盤釋放? 數(shù)字 OR控制? NO YES 數(shù)字 控制信息處理(清除、退格) 控制 退出? NO YES 微機原理硬件 實驗0~5 DB 0D9H,0DDH,61H,0FDH,0F9H 。 STACK SEGMENT STACK 39。 DB 100 DUP(0) STACK ENDS 。 MAIN PROC FAR MOV AX,DATA MOV DS,AX MOV ES,AX MOV DX,0E823H MOV AL,16H OUT DX,AL CLEAR:XOR DX,DX 。Clear all ID value INC SI LOOP LOPC DELETE: CMP DX,0 。Digits number decrease one MOV AL,0 微機原理硬件 實驗Display the digits CALL READ 。No Key pressed ? JE NEXT 。Key pressed! CLD 。Search array to find key code CMP CX,0 JE NFD 。happen,except sth wrong MOV BX,OFFSET ARRAY SUB DI,BX DEC DI CMP DI,9 。Key A and B not defined, 。Key C means clear all input digits CMP DI,13 。Key E means Exit the program. JMP NEXT ISNUM:NOP AGN: CALL READ 。Has the key been released? JNE AGN 。released。Store the input number to memery. INC DX 微機原理硬件 實驗All display unit has been occupied JE CLEAR JMP NEXT NFD: NOP 。 READ PROC NEAR 。Read Row info MOV BL,AL MOV DX,0E803H MOV AL,88H OUT DX,AL MOV AL,00H MOV DX,0E802H OUT DX,AL IN AL,DX 。Keep info in AL for SCASB POP DX RET READ ENDP 。Display 6 digits PUSH CX PUSH DX PUSH AX MOV BP,000FH LOPP:XOR SI,SI 微機原理硬件 實驗Control which char to display INC DX OUT DX,AL 。Every cha