INT 21H ;程序终止 START ENDP CODE ENDS
END START 非规则字
SSTACK SEGMENT STACK DW 32 DUP(?) SSTACK ENDS CODE SEGMENT START PROC FAR
ASSUME CS:CODE
MOV AX, 8000H ; 存储器扩展空间段地址 MOV DS, AX
AA0: MOV SI, 0000H ; 数据首地址 MOV CX, 0010H MOV AX, 0000H AA1: MOV [SI], AX INC AX INC CX INC SI LOOP AA1 JMP AA1
MOV AX,4C00H
INT 21H ;程序终止 START ENDP CODE ENDS
END START
实验八 键盘扫描及显示设计实验
一、实验目的
了解键盘扫描及数码显示的基本原理,熟悉8255的编程。
二、实验设备
PC机一台,TD-PITE实验装臵一套。
三、实验内容
将8255单元与键盘及数码管显示单元连接,编写实验程序,扫描键盘输入,并将扫描结果送数码管显示。键盘采用4×4键盘,每个数码管显示值可为0~F共16个数。实验具体内容如下:将键盘进行编号,记作0~F,当按下其中一个按键时,将该按键对应的编号在一个 数码管上显示出来,当再按下一个按键时,便将这个按键的编号在下一个数码管上显示出来,数码管上可以显示最近4次按下的按键编号。
四、程序清单 MY8255_A EQU 0600H
MY8255_B EQU 0602H MY8255_C EQU 0604H MY8255_CON EQU 0606H SSTACK SEGMENT STACK DW 16 DUP(?) SSTACK ENDS DATA SEGMENT
DTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV SI,3000H MOV AL,00H
MOV [SI],AL ;清显示缓冲 MOV [SI+1],AL MOV [SI+2],AL MOV [SI+3],AL MOV [SI+4],AL MOV [SI+5],AL MOV DI,3005H
MOV DX,MY8255_CON ;写 8255 控制字 MOV AL,81H OUT DX,AL
BEGIN: CALL DIS ;调用显示子程序 CALL CLEAR ;清屏 CALL CCSCAN ;扫描 JNZ INK1 JMP BEGIN INK1: CALL DIS CALL DALLY CALL DALLY CALL CLEAR CALL CCSCAN
JNZ INK2 ;有键按下,转到 INK2 JMP BEGIN ;确定按下键的位臵 INK2: MOV CH,0FEH MOV CL,00H COLUM: MOV AL,CH
MOV DX,MY8255_A OUT DX,AL
MOV DX,MY8255_C IN AL,DX
L1: TEST AL,01H JNZ L2
MOV AL,00H JMP KCODE L2: TEST AL,02H JNZ L3
MOV AL,04H JMP KCODE
L3: TEST AL,04H JNZ L4
MOV AL,08H JMP KCODE L4: TEST AL,08H JNZ NEXT
MOV AL,0CH KCODE: ADD AL,CL CALL PUTBUF PUSH AX KON: CALL DIS CALL CLEAR CALL CCSCAN JNZ KON POP AX NEXT: INC CL MOV AL,CH TEST AL,08H JZ KERR ROL AL,1 MOV CH,AL JMP COLUM KERR: JMP BEGIN
CCSCAN: MOV AL,00H ; MOV DX,MY8255_A OUT DX,AL
MOV DX,MY8255_C IN AL,DX NOT AL AND AL,0FH RET
CLEAR: MOV DX,MY8255_B ;键盘扫描子程序 清屏子程序
MOV AL,00H OUT DX,AL RET
DIS: PUSH AX ;显示子程序 MOV SI,3000H MOV DL,0DFH MOV AL,DL AGAIN: PUSH DX
MOV DX,MY8255_A OUT DX,AL MOV AL,[SI]
MOV BX,OFFSET DTABLE AND AX,00FFH ADD BX,AX MOV AL,[BX] MOV DX,MY8255_B OUT DX,AL CALL DALLY INC SI POP DX MOV AL,DL TEST AL,01H JZ OUT1 ROR AL,1 MOV DL,AL JMP AGAIN OUT1: POP AX RET
DALLY: PUSH CX ; MOV CX,0006H T1:
MOV AX,009FH T2:
DEC AX JNZ T2 LOOP T1 POP CX RET
PUTBUF: MOV SI,DI ; MOV [SI],AL DEC DI
CMP DI,2FFFH JNZ GOBACK MOV DI,3005H
延时子程序 存键盘值到相应位的缓冲中
相关推荐: