基于Proteus+8051汇编应用实例系列之一--单只数码管循环显示数字

背景:

        最近在回顾51单片机相关基础知识,看了几本书,总是有种蜻蜓点水的感觉,一开始也是用C51写几个程序,又感觉不能找到单片机的感觉,觉得还是在写PC版本的程序。后来仔细想想,还是有必要用汇编直写程序,因为汇编更能体验控制硬件的过程,才能找到与单片机亲密接触的感觉,更能深入了解单片机的每一部分,更灵活地掌控它,为后面编写复杂的程序奠定基础。

        后来在网上发现《单片机C语言程序设计实训100例基于8051+Proteus仿真》发布的Proteus仿真文件,正好可以拿这些仿真练手,将它用C写的效果,通过汇编语言实现,自我感觉主意不错,马上行动,即开始了这一系列之旅……

 

入正题:

题目描述:用程序实现一个7段数码管(共阴极)循环显示0~F这16个数字(16进制),Proteus仿真图如下所示:

由上图易看出通过P0口来控制数码管,数码管为共阴极,低电平亮。

代码文件main.asm

		;; 单个数码管循环显示0~F数字
		ORG	000H
START:
		MOV R4,#0				;循环显示10次

LOOP:							;循环显示数字,R4递增
		MOV A,R4
		MOV DPTR,#NTABLE
		MOVC A,@A+DPTR
		MOV P0,A
		CALL DELAY
		INC R4
		CJNE	R4,#16,LOOP		;R4递增到16时结束循环
		JMP START

		;; 数码管显示编码表
NTABLE:	DB	3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,76H

DELAY:							;延时500ms
		MOV R1,#50
D1:		MOV R2,#20
D2:		MOV R3,#248
		DJNZ	R3,$
		DJNZ	R2,D2
		DJNZ	R1,D1

		RET
		END

 

注:

1)此汇编程序涉及到延时小程序,以及MOV,MOVC,CJNE以及数据表的用法 ,注意体会汇编的思想方式,以及运行过程。

2)通过Keil编译生成Hex文件,并在Proteus里让51单片机读取到,运行仿真即可看到循环显示0~F的效果,相关代码和Proteus文件请下载相关附件。

 

另附上7段数码管共阴和共阳的两种编码:

单片机LED共阳极段码表【0-F】

DB          0c0H,0f9H,0a4H,0b0H,99H,92H,82H,0f8H       ;[0-7]
DB          80H,90H,88H,83H,0c6H,0a1H,86H,8eH          ;[8-F]


 

单片机LED共阴极段码表【0-F】

DB         3FH,06H,5BH,4FH,66H,6DH,7DH,07H          ;[0-7]
DB         7FH,6FH ,77H,7CH,39H,5EH,79H,71H,76H     ;[8-F]


 


 

你可能感兴趣的:(51汇编,单片机,Proteus)