这是关于 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 ;返回主程序