打印

各位大侠,我是新人,能帮我看一下程序错了哪里吗??

[复制链接]
1579|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tsui|  楼主 | 2010-10-27 16:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我想做一个可调整时间的电子钟,由三个按键调整时间,但是程序做好后,调整时间只能递加而不能递减,各位仁兄能帮我看一下是程序哪里错了吗???程序如下:
        BUF_1  EQU  31H                 ;第一位数码管的段码存放地址
        BUF_2  EQU  32H                 ;第二位数码管的段码存放地址
        BUF_3  EQU  33H                 ;第三位数码管的段码存放地址
        BUF_4  EQU  34H                 ;第四位数码管的段码存放地址
        BUF_5  EQU  35H   ;第五位数码管的段码存放地址
        BUF_6  EQU  36H   ;第六位数码管的段码存放地址
                                       
        org  0000h
        ljmp  main
        org 000bh
        ljmp vot0
        org  0030h
main:   mov  sp,#60h                     ;初始化
           mov  TMOD,#01H
           mov  TH0,#0ech

           mov TL0,#078H
           setb  et0
           setb  ea
           setb   tr0                        
           mov  r1,#BUF_6
           mov  r2,#11011111b
           mov  r5,#0
           mov  r6,#0
           mov r7,#0
           mov r0,#0
loop:   jnb p1.0,key1
lcall  dis_buf                  
        lcall display
sjmp  loop
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;按键扫描
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
key1:
jnb p1.0,$
lcall dis_buf
lcall display
jnb p1.0,key2
        JNB  P1.2,WP1
        JB   P1.1,key1
jnb  p1.1,$
       inc   r5      
        cjne  r5,#24,key1
mov  r5,#0
SJMP  key1
WP1:    JNB  P1.2,$
        dec  r5
cjne  r5,#0,key1
MOV  r5,#23
        SJMP  key1
key2:
jnb p1.0,$
lcall dis_buf
lcall display
jnb p1.0,key3
        JNB  P1.2,WP2
        JB   P1.1,key2
jnb  p1.1,$
       inc   r6      
        cjne  r6,#60,key2
mov  r6,#0
SJMP key2
WP2:    JNB  P1.2,$
        dec  r6
cjne  r6,#0,key2
MOV  R6,#59
        SJMP  key2
key3:
jnb p1.0,$
lcall dis_buf
lcall display
jnb p1.0,key4
        JNB  P1.2,WP3
        JB   P1.1,key3
jnb  p1.1,$
       inc   r6      
        cjne  r6,#60,key3
mov  r6,#0
SJMP key2
WP3:    JNB  P1.2,$
        dec  r7
cjne  r7,#0,key3
MOV  R7,#59
        SJMP  key3
key4:
jnb p1.0,$
ajmp loop
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;显示数据准备子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
dis_buf:
        mov  dptr,#LED_TAB
        mov  a,r5
        mov  b,#10
        div  ab
        movc  a,@a+dptr
        mov  BUF_1,a
        mov  a,b
        movc  a,@a+dptr
        mov  BUF_2,a
anl  BUF_2,#01111111b          ;第二位的小数点
        mov  a,r6
        mov  b,#10
        div  ab
        movc  a,@a+dptr
        mov  BUF_3,a
        mov  a,b
        movc  a,@a+dptr
        mov BUF_4,a ;
anl buf_4,#01111111b
        mov  a,r7
        mov  b,#10
        div  ab
        movc  a,@a+dptr
        mov  BUF_5,a
        mov  a,b
        movc  a,@a+dptr
        mov BUF_6,a
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;显示子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
display:
        jbc   F0, display_1
        sjmp  display_ret
display_1:
        mov  p3,#11111111b
        mov  p2,@r1
        mov  a,r2
        anl  p3,a
        rr   a
        mov  r2,a
        dec  r1
        cjne  r1,#30h,display_ret
        mov  r1,#BUF_6
        mov  r2,#11011111b
display_ret:
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;中断服务子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
vot0:   setb   F0
        inc   r0        ;做50ms的计数
        cjne  r0,#200,vot0_ret
        mov   r0,#0
        inc   r7       ;做50ms的计数
        cjne  r7,#60,vot0_ret
        mov   r7,#0
        inc   r6        ;做1s的计数
cjne  r6,#60,vot0_ret
        mov   r6,#0
        inc   r5        ;做1分钟的计数
        cjne  r5,#24,vot0_ret
        mov   r5,#0
vot0_ret:
        mov  TH0,#0ech
mov TL0,#078H

        reti
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LED_TAB:                                 ;段码表
        DB  0C0H,0F9H,0A4H,0B0H,99H        ;0,1,2,3,4
DB   92H, 82H,0F8H, 80H,90H        ;5,6,7,8,9
end
而且我还想把要调整的地方会变成一闪一闪的,能实现吗??

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

1

帖子

0

粉丝