1.掌握8255A和8086CPU接口方法,掌握8255A的工作方式和编程原理。
2.掌握多位数码管动态扫描显示的工作原理和编程方法。
设计8255A 与多位共阴极数码管接口电路,实现在四位LED共阴极数码管上显示数字2023
8255A工作在方式0基本输入输出方式
8255A方式控制字
D7
D6
D5
D4
D3
D2
D1
D0
1
A口方式
A口IO
C口高4位IO
B口方式
B口IO
C口低4位IO
在Proteus软件中绘制硬件电路图。8255A片上地址:PA端口地址为70H、PB端口地址72H、PC端口地址为74H、控制端口地址为76H
共阴极数码管段码表 |
|||||||||
数值 |
dp |
g |
f |
e |
d |
c |
b |
a |
|
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
3F |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
06 |
2 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
5B |
3 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
4F |
4 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
66 |
5 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
6D |
6 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
7D |
7 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
07 |
8 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
7F |
9 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
6F |
A |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
77 |
B |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
7F |
C |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
39 |
D |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
5E |
E |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
79 |
F |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
71 |
DATA SEGMENT
;共阴极数码管段码表
SEGTAB DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH,
;显示字符 0 1 2 3 4 5 6 7 8 9
DB 77H, 7CH, 39H, 5EH, 79H, 71H, 00H
;显示字符 A B C D E F 空
OUTBUFF DB 2,0,2,3 ;显示字符
DATA ENDS
STACK SEGMENT
S DB 100 DUP(0)
TOP EQU $-S
STACK ENDS
;声明端口地址
A_PORT EQU 70H
B_PORT EQU 72H
C_PORT EQU 74H
CRTL_PORT EQU 76H
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:
MOV AX, DATA
MOV DS, AX
MOV AL, 10000000B ;8255A初始化
OUT CRTL_PORT, AL ;写入控制字
LOOP1:
CALL DISP
JMP LOOP1 ;无条件循环
MOV AH, 4CH
INT 21H
;显示函数 子程序
DISP PROC
AGAIN:
MOV CL, 0FEH ;位选, 第一位显示
LEA SI, OUTBUFF ;获取被显示字符的偏移地址
LEDDISP:
MOV AL, CL
OUT C_PORT, AL ;C口输出AL的内容,选中第一个数码管
LEA BX, SEGTAB ;获取段码表的偏移地址
MOV AL, [SI] ;取出被显示的字符
XLAT ;换码[BX+AL]->[AL]
OUT B_PORT, AL ;换码后, AL内存的内容就是 数组SEGTAB[OUTBUFF]
PUSH CX ;延时程序
MOV CX, 100
Delay: LOOP Delay
POP CX ;延时结束 要POP CX
MOV AL, 0 ;清零操作
OUT B_PORT, AL
CMP CL, 0F7H ;比较指令,判断是否循环左移
JE NEXT
INC SI
ROL CL, 1 ;1111 1110 不带进位的循环左移 P106
JMP LEDDISP
NEXT:RET
DISP ENDP
CODE ENDS
END START
运行结果:
暂停仿真效果: