实验八、 数码管显示实验
1、实验目的
- 学习“七段共阴极数码管”显示的基本原理;
- 掌握通过并行接口芯片控制多个数码管显示的方法。
2、实验内容
用一片8255接口芯片的A口和B口分别连接数码管段码接口(ABCDEFG Dp)和位码接口(X1~X6)。编写程序实现以下两种显示方式:
- 使六位数码管从右到左逐位显示移动的数字 0 到 9,即数字 0 从最右端移动到最左端,数字 1 从最右端移动到最左端,….,数字 9 从最右端移动到最左端,循环上述过程;
- 使六位数码管从左到右显示稳定的数字“123456”。
3、实验原理
7段共阴极数码管的原理图及显示效果如图 3-8-1 所示,其中包含组成字符的 7个笔画A ~ G 以及一个小数点 Dp。7段共阴极数码管显示 0 ~9,A ~ F,其编码依次为: 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H。当显示小数点“.”时在当前编码上置最高位为1(80H)。熄灭可用编码 00H,或置位选信号无效。
六位数码管的电路以及外部接口如图 3-9-1 所示。可通过位选信号(X1~X6)来选择点亮特定的数码管,并通过输入段码(ABCDEFG Dp)来显示特定数字。对于同时显示多位数字时,可对位码进行扫描。
4、实验记录
-
位选信号:机器上一共有6个数码管,通过X1 ~ X6端口可以选择让段选信号输出到哪些数码管中。从电路图中可以知道,X1 ~ X6端口输出1的时候是不选择,输出0的时候是选择。
-
段选信号:数码管中一共有8段LED灯,通过输入8位二进制数码选择控制让对应的LED灯亮灭。输入1控制亮,输入0控制灭。
-
显示问题:每次选择另一个数码管控制常亮之后,原来已经亮的数码管就会被熄灭,原因是其位选信号被置0,而另一个数码管的位选信号被置高。所以要把位选6个数码管写在一个6次循环里,并外置一个死循环来让6个数码管都能常亮。
-
实验1:循环移位显示0到9
A8255 EQU 0640H ;8255的端口A的地址
B8255 EQU 0642H ;8255的端口B的地址
C8255 EQU 0644H ;8255的端口C的地址
M8255 EQU 0646H ;8255的控制地址
DATA SEGMENT
TAB:
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX ;这两行可以将DATA的数据导入使用
MOV DX,M8255
MOV AL,80H
OUT DX,AL ;设置8255的控制方式为ABC端口都输出
LEA BX,TAB ;存放TAB的首地址
MOV SI,00H ;地址偏移量
MAIN:
MOV AL,11011111B ;位选码初始设置,选最右端的数码管
MOV CX,06H ;设置LOOP循环次数为6次
M1:
MOV DX,A8255
OUT DX,AL ;通过8255先输出位选码
SHR AL,1 ;将位选码右移一位
OR AL,11000000B ;由于右移缺位补零,需要手动将0修改成1
PUSH AX ;保存AX的值
MOV DX,B8255
MOV AL,[BX+SI] ;TAB首地址+地址偏移量
OUT DX,AL ;通过8255输出段选码
POP AX ;取出保存的AX的值
CALL DELAY ;需要一个延迟
LOOP M1 ;LOOP循环,返回M1标签位
INC SI ;地址偏移量自增,将会选择下一个数字的段选码
CMP SI,0AH ;检测偏移量是否越界
JNE M1F ;没有越界则跳转
MOV SI,00H ;越界则置零
M1F:
JMP MAIN
DELAY: ;一个肉眼可见的延迟,大概3/10秒左右
PUSH BX
PUSH CX
MOV BX, 0003H
DEL2: MOV CX, 0FFFFH
DEL3: LOOP DEL3
DEC BX
JNZ DEL2
POP CX
POP BX
RET
CODE ENDS
END START
- 实验2:稳定显示数字1 ~ 6(由于部分代码重复,这里只记录重要代码)
LEA BX,TAB ;存放TAB的首地址
MAIN2:
MOV AL,11011111B ;位选码初始设置
MOV SI,00H ;地址偏移量
MOV CX,06H ;设置LOOP循环次数
M2:
MOV DX,A8255
OUT DX,AL ;先输出位选码
SHR AL,1 ;位选码右移
OR AL,11000000B
PUSH AX
MOV DX,B8255
MOV AL,[BX+SI] ;再输出段选码
OUT DX,AL
POP AX
INC SI ;自增偏移量,选下一个数字
CALL DELAY ;需要一个短暂延迟
LOOP M2 ;LOOP循环
JMP MAIN2
DELAY: ;一个很短的延迟
PUSH BX
MOV BX, 01FFH
DEL:
DEC BX
JNZ DEL
POP BX
RET
5、扩展实验
并没有做,也没有代码。