2、4位共阴数码实验,如记数、数据显示等
a_bit equ 20h ;千位
b_bit equ 21h ;百位
c_bit equ 22h;十位
d_bit equ 23h;个位
temp equ 24h ;计数器数值存放位置
temp1 equ 25h
star: mov temp,#0 ;初始化,从0开始
mov temp1,#0
stlop: acall display;调用显示子程序
inc temp;计数器加1
mov a,temp
cjne a,#100,next ;判断是否满100
mov temp,#0
inc temp1
mov a,temp1
cjne a,#60,next
mov temp1,#0;清0
;mov temp,#0;
next: ljmp stlop;不满则循环
;显示子程序
display: mov a,temp ;将temp中十六进制数转换成十进制数
mov b,#10 ;10/10=10进制
div ab
mov b_bit,a ;十位在a
mov a_bit,b ;个位在b
mov a,temp1
mov b,#10
div ab
mov c_bit,a;千位在c
mov d_bit,b;百位在d
mov dptr,#numtab ;指定查表地址
;mov r0,#2;4
dpl1: mov r1,#50;250 ;
dplop: mov a,a_bit ;取个位数
MOVC A,@A+DPTR ;查个位数的7段代码
mov p0,a ;送出个位的7段
clr p2.6 ;开个位显示
acall d1ms ;调用延时
setb p2.6;关毕显示
mov a,b_bit ;
MOVC A,@A+DPTR ;
mov p0,a ;
clr p2.5;
acall d1ms ;
setb p2.5
mov a,d_bit ;
MOVC A,@A+DPTR ;
mov p0,a ;
clr p2.4
acall d1ms
setb p2.4
mov a,c_bit
MOVC A,@A+DPTR
mov p0,a
clr p2.3;
acall d1ms ;
setb p2.3
djnz r1,dplop ;
;djnz r0,dpl1
ret
;2+2X80=162微秒延时,按12MHZ频率算
D1MS: MOV R7,#80
DJNZ R7,$
RET
;实验板上的7段数码管0~9数字的共阴显示代码
numtab:DB 0EBH,00AH,067H,06EH,08EH,0ECH,0EDH,02AH,0EFH,0EEH
end