基于51单片机的汇编程序:六位8段数码管(共阴极)动态显示“123456”

六位8段数码管(共阴极)动态显示“123456”

2022-04-19,51单片机学习笔记

硬件连接图如下:
在这里插入图片描述

代码如下:

;适用于51单片机开发板,数码管动态扫描显示“123456”
;P0--连接两个锁存器数据输入端口,两个锁存器输出端口分别连接数码管段显和位显
;P2.6--段显控制信号,P2.7--位显控制信号,连接对应锁存器,作为片选信号

ADDR_SEG	BIT	P2.6	;段显锁存器片选信号
ADDR_BIT	BIT	P2.7	;位显锁存器片选信号
	ORG		0000H		;程序起始地址
	LJMP	MAIN		;跳转到主函数
	ORG		0030H		;主函数起始地址
MAIN:
	MOV		70H,#6		;在70H~75H这段地址空间存放字形编码索引
	MOV		71H,#5		;高位地址存放高位数据,当前显示效果为‘123456’
	MOV		72H,#4		;显示内容  “0 1 2 3 4 5 6 7 8 9  A  b  C  d  E  F  . 空”
	MOV		73H,#3		;10进制索引“0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17”
	MOV		74H,#2		;16进制索引“0 1 2 3 4 5 6 7 8 9 0A 0B 0C 0D 0E 0F 10 11”
	MOV		75H,#1

	MOV		R0,#70H		;初始化为 段显数据首地址
	MOV		R2,#0DFH	;初始化为 1101 1111B ,为0时点亮
LP:
	MOV		A,R2		;送入当前位显
	MOV		P0,A		;选中位使能
	SETB	ADDR_BIT	;位显有效
	CLR		ADDR_BIT	;位显锁定

	RR		A			;位显循环右移一位(便于下一位使能)
	MOV		R2,A		;存放当前位显

	MOV		DPTR,#TAB	;送入段显数据表的首地址
	MOV		A,@R0		;段显编码偏移地址索引
	MOVC	A,@A+DPTR	;段显编码物理地址索引
	MOV		P0,A		;选中段使能
	SETB	ADDR_SEG	;段显有效
	CLR		ADDR_SEG	;段显锁定

	ACALL	DELAY		;延时
	INC		R0			;段显数据地址更新,准备下一个段显内容
	CJNE	R0,#76H,LP	;若段显地址没有溢出,本次扫描没有结束(还没有到最低位数码管),跳转到LP,继续扫描下一位数码管
	MOV		R0,#70H		;否则,重新装载段显数据首地址
	MOV		R2,#0DFH	;重新装载位显数据首地址(返回最高位的数码管)
	SJMP	LP			;返回LP,进入下一次扫描

DELAY:					;当前调用一次延时2ms
	MOV		R6,#4		;Delay=4*250*2us=2000us=2ms
DP1:MOV		R7,#250		;
	DJNZ	R7,$		;f=12MHz, T=1/f=1us, delta t(DJNZ)=2*T=2 us
	DJNZ	R6,DP1		;DJNZ执行一次占用2个指令周期,f=12M时,指令周期T=1us
	RET

TAB:					;8段共阴极数码管字形编码表  00H~11H(0~17)共18个字形
	DB	3FH,  06H,  5BH,  4FH,  66H,  6DH  ;0 1 2 3 4 5
	DB	7DH,  07H,  7FH,  6FH,  77H,  7CH  ;6 7 8 9 A b
	DB	39H,  5EH,  79H,  71H,  80H,  00H  ;C d E F dp 无
	
	END



写在最后:
本文仅为个人学习笔记,纰漏之处,欢迎斧正!

  • 13
    点赞
  • 96
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值