用单片机AT89C51驱动两位数码管显示00--99依次循环程序代码

2023-01-12  

;两位数码管显示00--99依次循环

org 0000h

a_bit equ 20h ;数码管个位数存放内存位置

b_bit equ 21h ;数码管十位数存放内存位置

temp equ 22h ;计数器数值存放内存位置

star: mov temp,#0 ;初始化计数器,从0开始

stlop: acall display;调用显示子程序

inc temp;对计数器加1

mov a,temp

cjne a,#100,next ;判断计数器是否满100?

mov temp,#0;满100就清零重新开始

next: ljmp stlop;不满就循环执行

;显示子程序

display: mov a,temp ;将temp中的十六进制数转换成10进制

mov b,#10 ;10进制/10=10进制

div ab

mov b_bit,a ;十位在a

mov a_bit,b ;个位在b

MOV DPTR,#NUMTAB;指定查表启始地址

mov r0,#4

dpl1: mov r1,#250 ;

dplop: mov a,a_bit ;取个位数

MOVC A,@A+DPTR ;查个位数的7段代码

mov p0,a ;送出个位的7段代码

clr p2.7 ;开个位显示

acall d1ms ;显示162微秒

setb p2.7;关闭个位显示,防止鬼影

mov a,b_bit ;取十位数

MOVC A,@A+DPTR ;查十位数的7段代码

mov p0,a ;送出十位的7段代码

clr p2.6 ;开十位显示

acall d1ms ;显示162微秒

setb p2.6;关闭十位显示,防止鬼影

djnz r1,dplop ;循环执行250次

djnz r0,dpl1 ;循环执行250X4=1000次

ret

;2+2X80=162微秒,延时按12MHZ计算

D1MS: MOV R7,#80

DJNZ R7,$

RET

;实验板上的7段数码管0~9数字的共阴显示代码

NUMTAB:DB 0CFH,03H,5DH,5BH,93H,0DAH,0DEH,43H,0DFH,0DBH

end


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。