这是关于51单片机数码管显示的简单实验,数码管依次从0计数显示至9,然后再跳回至0重新开始计数,如此反复。电路中的数码管选用共阳型的,公共端直接接电源,数据端连至89S52的P0口。电路图和汇编程序详解如下,供初学者参考:
(点击放大)

ORG 0000H ;程序从0开始
START: MOV R3,#0 ;使R3寄存器加载0
LJMP LOOP1 ;跳到LOOP1处执行
LOOP: CJNE R3,#10,LOOP1 ;如果R3不等于10,则跳至LOOP1处执行
LJMP START ;否则跳至START处执行
LOOP1: MOV A,R3 ;将寄存器R3的内容复制到ACC
MOV DPTR,#TABLE ;将DPTR指向编码表位置
MOVC A,@A+DPTR ;根据ACC的值取出编码表中的编码
MOV P0,A ;P0口输出ACC的内容
CALL DELAY ;调用延时子程序
INC R3 ;将R3寄存器的内容加1
LJMP LOOP ;跳至LOOP处执行
DELAY: ;0.2S延时子程序(12MHz晶振下)
MOV R7,#2 ;R7寄存器加载2次数
D1: MOV R6,#200 ;R6寄存器加载200次数
D2: MOV R5,#250 ;R5寄存器加载250次数
DJNZ R5,$ ;本行执行R5次
DJNZ R6,D2 ;D2执行R6次
DJNZ R7,D1 ;D1执行R7次
RET ;返回主程序
TABLE: ;编码表
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;共阳数码管0~9字形编码
END ;程序结束
原创文章如转载,请注明:转载自萬用電路板 [ http://www.jiangx.net/ ]