实验八、 数码管显示实验

实验八、 数码管显示实验

1、实验目的
  1. 学习“七段共阴极数码管”显示的基本原理;
  2. 掌握通过并行接口芯片控制多个数码管显示的方法。
2、实验内容

用一片8255接口芯片的A口和B口分别连接数码管段码接口(ABCDEFG Dp)和位码接口(X1~X6)。编写程序实现以下两种显示方式:

  1. 使六位数码管从右到左逐位显示移动的数字 0 到 9,即数字 0 从最右端移动到最左端,数字 1 从最右端移动到最左端,….,数字 9 从最右端移动到最左端,循环上述过程;
  2. 使六位数码管从左到右显示稳定的数字“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、实验记录
  1. 位选信号:机器上一共有6个数码管,通过X1 ~ X6端口可以选择让段选信号输出到哪些数码管中。从电路图中可以知道,X1 ~ X6端口输出1的时候是不选择,输出0的时候是选择。

  2. 段选信号:数码管中一共有8段LED灯,通过输入8位二进制数码选择控制让对应的LED灯亮灭。输入1控制亮,输入0控制灭。

  3. 显示问题:每次选择另一个数码管控制常亮之后,原来已经亮的数码管就会被熄灭,原因是其位选信号被置0,而另一个数码管的位选信号被置高。所以要把位选6个数码管写在一个6次循环里,并外置一个死循环来让6个数码管都能常亮。

  4. 实验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
  1. 实验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、扩展实验

并没有做,也没有代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值