OR AL,00000010B OUT 92H,AL POP AX RET OPENA20 ENDP
DELAY PROC ;关闭a20地址线 PUSH CX MOV CX,1000H LOOPX: LOOP LOOPX POP CX RET DELAY ENDP
CLOSEA20 PROC ;关闭a20地址线 PUSH AX IN AL,92H AND AL,11111101B OUT 92H,AL POP AX RET CLOSEA20 ENDP CODE ENDS
END START
实验结果:向THS卡存储空间反复写256各A~Z,然后显示读提示信息,最后再从THS
卡存储空间读入256个A~Z,并在屏幕上显示读入数据。
实验五 七段数码管实验
一、实验目的
掌握数码管显示数字的原理,加深对8255的理解和应用。 二、实验内容
1、静态显示:将LED JUMP条线全部取下,将LED1和GND相连,8255CS<-->CS0,
PB0<->LED-A,PB1<->LED-B,PB2<->LED-C,PB3<->LED-D,PB4<->LED-E,PB5<->LED-F,PB6<->LED-G,PB7<->LED-DP。编程从键盘输入一位十进制数字(0-9),在七段数码管上显示出来。
2、动态显示:将LED2<->PA0,LED1<->PA1,其他的接线同静态显示方式一样。
编程在两个数码管上动态显示“56”
3、动态显示选作:实验连线和实验2动态显示一样,编程在两个数码管上循环显示00-99。 三、编程提示
1、实验箱上的七段数码管为共阴型段码,采用同相驱动,输入端加高电平,选中的数码管亮,
位码输入端低电平选中。 2、七段数码管的字型代码表如下表
四、程序框图(如图5)
实验程序
1、静态显示
;* 键盘输入数据(0-9)控制LED数码管显示 led jump调线帽全部取下来。;* ;*CS0--8255CS,PB0~PB7依次接led-A ~ led-dp led1 接地;*
DATA SEGMENT
IOPORT EQU 0A800H IO8255B EQU IOPORT+0A2H IO8255CON EQU IOPORT+0A6H
LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
MESG1 DB 0DH,0AH,'Input a num (0--9),other key is exit:',0DH,0AH,'$' DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX
MOV DX,IO8255CON ;使8255的B口为输出方式 MOV AX,90H OUT DX,AL
SSS: MOV DX,OFFSET MESG1 ;显示提示信息 MOV AH,09H
INT 21H
MOV AH,01 ;从键盘接收字符 INT 21H
CMP AL,'0' ;是否小于0 JL EXIT ;若是则退出 CMP AL,'9' ;是否大于9 JG EXIT ;若是则退出
SUB AL,30H ;将所得字符的ASCII码减30H
MOV BX,OFFSET LED ;bx为数码表的起始地址 XLAT ;求出相应的段码 MOV DX,IO8255B ;从8255的A口输出 OUT DX,AL
JMP SSS ;转SSS EXIT: MOV AH,4CH ;返回 INT 21H CODE ENDS
END START
实验结果:先把跳线冒拔掉,再从键盘输入0~9的任意数字,LED数码管显示相
应的数字,如:键盘输入9,led数码管显示数字9。
2、动态显示
;* LED数码管实验 动态显示“56” ;*
;* led jump调线帽全部取下来,CS0--8255CS,PB0~PB7依次接led-A~led-dp led2<->PA0,LED1<->PA1;*
DATA SEGMENT
IOPORT EQU 0A400H
IO8255A EQU IOPORT+0A0H IO8255B EQU IOPORT+0A2H
IO8255CON EQU IOPORT+0A6H
LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;段码 BUFFER1 DB 5,6 ;存放要显示的个位和十位 BZ DW ? ;位码 DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA
MOV DS,AX
MOV DX,IO8255CON ;将8255设为B,A口输出 MOV AL,80H
OUT DX,AL
MOV DI,OFFSET BUFFER1 ;设di为显示缓冲区 LOOP2: MOV BH,02
LLL: MOV BYTE PTR BZ,BH
PUSH DI DEC DI ADD DI, BZ
MOV BL,[DI] ;bl为要显示的数 POP DI MOV BH,0
MOV SI,OFFSET LED ;置led数码表偏移地址为SI ADD SI,BX ;求出对应的led数码
MOV AL,BYTE PTR [SI]
MOV DX,IO8255B ;自8255B的口输出 OUT DX,AL
MOV AL,BYTE PTR BZ ;使相应的数码管亮 MOV DX,IO8255A OUT DX,AL PUSH AX MOV AX,05
DELAY1:
MOV CX,60000
DELAY: LOOP DELAY ;延时 DEC AX
JNZ DELAY1 POP AX
MOV BH,BYTE PTR BZ SHR BH,1 JNZ LLL
MOV DX,0FFH MOV AH,06
INT 21H
JE LOOP2 ;有键按下则退出 MOV DX,IO8255B
MOV AL,0 ;关掉数码管显示 OUT DX,AL
MOV AH,4CH ;返回 INT 21H CODE ENDS
END START
实验结果:在LED数码管上面动态显示数字56,也要把跳线冒全部拔下。
3、动态显示
;* LED数码管实验 动态循环显示“00-99 led jump调线帽全部取下来。 *;
;* CS0--8255CS,PB0~PB7依次接led-A~led-dp led2<->PA0,LED1<->PA1 *;
DATA SEGMENT
IOPORT EQU 0A800H
IO8255A EQU IOPORT+0A0H
IO8255B EQU IOPORT+0A2H IO8255CON EQU IOPORT+0A6H
LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;段码 BUFFER1 DB 0,0 ;存放要显示的十位和个位 BZ DW ? ;位码 DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX
MOV DX,IO8255CON ;将8255设为A,B口输出 MOV AL,80H OUT DX,AL
MOV DI,OFFSET BUFFER1 ;设di为显示缓冲区 LOOP1: MOV CX,0100H ;循环次数 LOOP2: MOV BH,02
LLL: MOV BYTE PTR BZ,BH