单片机实验,做一个电子钟。只要显示分和秒,格式是XX:XX,在一个 4位 的数码显示器上显示。
下面是我写的程序
org 0000h
ljmp start
org 000bh
ljmp intt0
start: mov r0,#70h
mov r7,#06h
init: mov @r0,#00h
inc r0
djnz r7,init
mov tmod,#01h
mov tl0,#0b0h
mov th0,#03ch
setb ea
setb et0
setb tr0
start1: lcall scan
sjmp start1
scan: mov a,74h
mov b,#0ah
div ab
mov 71h,a
mov 70h,b
mov a,75h
mov b,#0ah
div ab
mov 73h,a
mov 72h,b
mov r1,#70h
mov r5,#0eeh
mov r3,#04h
scan1: mov a,r5
mov p2,a
mov a,@r1
mov dptr,#tab
movc a,@a+dptr
mov p0,a
mov a,r5
lcall dl1ms
inc r1
mov a,r5
rl a
mov r5,a
djnz r3,scan1
mov p2,#0ffh
mov p0,#0ffh
ret
tab: DB 03fH,06H,05bH,04fH,66H,6dH,7dH,07H,7fH,6fH,20H
intt0: push acc
push psw
clr et0
clr tr0
mov tl0,#0b0h
mov th0,#03ch
setb tr0
inc 76h
mov a,76h
cjne a,#14h,outt0
mov 76h,#00
inc 74h
mov a,74h
cjne a,#3ch,outt0
mov 74h,#00
inc 75h
mov a,75h
cjne a,#3ch,outt0
mov 75h,#00
outt0: setb et0
pop psw
pop acc
reti
dl1ms: mov r6,#14h
dl1: mov r7,#19h
dl2: djnz r7,dl2
djnz r6,dl1
ret
end
接线的话,p0接段码,p2的7-4接的控制那个数字亮的那个端口。70-73是虚拟缓冲区,放秒的个位,十位,分的个位,十位。74放秒的16进制,75放分的16进制,76是50ms计数器,记满20次就是1秒。
我用memory window 看了,70-73虚拟区的数据都是正常的,但是就是在数码显示器上显示不对。老师说我可能是循环的地方出错了,但是我自己看不出来,我觉得主要是scan1的那个部分出错了。求求有没有大神,帮忙看看哪里有问题,最好快点。
如果问题解决了,会追加悬赏。