打印

编写汇编程序时遇到麻烦,请各位大侠帮忙下~~

[复制链接]
1607|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liang99740|  楼主 | 2007-9-3 14:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
初学单片机,想80S51做个简单的电子钟。。。

但是编写程序只能实现时间,自己想编个闹铃和12/24小时转化

可弄了好久都不知道怎么弄,大家帮帮忙啊~

P0输出数码管的A~G,P3口选择数码管G1~G8,P1.0~P1.2为调准时、分、秒,

大侠们帮帮忙了~帮看下怎么弄个闹铃和12/24小时转化;

谢谢了。。。

S_SET    BIT        P1.0                        ;数字钟秒控制位
M_SET    BIT        P1.1                        ;分钟控制位
H_SET    BIT        P1.2                        ;小时控制位
SECOND    EQU        30H
MINUTE    EQU        31H
HOUR    EQU        32H
TCNT    EQU        34H
        ORG        00H
        SJMP    START
        ORG        0BH
        LJMP    INT_T0
START:    MOV        DPTR,#TABLE
        MOV        HOUR,#0                        ;初始化
        MOV        MINUTE,#0
        MOV        SECOND,#0
        MOV        TCNT,#0
        MOV        TMOD,#01H
        MOV        TH0,#(65536-50000)/256        ;定时50毫秒
        MOV        TL0,#(65536-50000)MOD 256
        MOV        IE,#82H
        SETB    TR0
;****************************************************
;判断是否有控制键按下,是哪一个键按下
A1:        LCALL    DISPLAY        
        JNB        S_SET,S1
        JNB        M_SET,S2
        JNB        H_SET,S3                
        LJMP    A1
    S1:    LCALL    DELAY        ;去抖动
        JB        S_SET,A1
        
        INC        SECOND        ;秒值加1
        MOV        A,SECOND
        CJNE    A,#60,J0    ;判断是否加到60秒
        MOV        SECOND,#0
        LJMP    K1
    S2:    LCALL    DELAY
        JB        M_SET,A1
        
    K1:    INC        MINUTE        ;分钟值加1
        MOV        A,MINUTE
        CJNE    A,#60,J1    ;判断是否加到60分
        MOV        MINUTE,#0
        LJMP    K2
    S3:    LCALL    DELAY
        JB        H_SET,A1
        
    K2:    INC        HOUR        ;小时值加1
        MOV        A,HOUR
        CJNE    A,#24,J2    ;判断是否加到24小时
        MOV        HOUR,#0
        MOV        MINUTE,#0
        MOV        SECOND,#0
        LJMP    A1
;****************************************************
;等待按键抬起
J0:        JB        S_SET,A1
        LCALL    DISPLAY
        SJMP    J0
J1:        JB        M_SET,A1
        LCALL    DISPLAY
        SJMP    J1
J2:        JB        H_SET,A1
        LCALL    DISPLAY
        SJMP    J2
;***********************************************
;定时器中断服务程序,对秒,分钟和小时的计数
INT_T0:    MOV        TH0,#(65536-50000)/256
        MOV        TL0,#(65536-50000)MOD 256        
        INC        TCNT
        MOV        A,TCNT
        CJNE    A,#20,RETUNE    ;计时1秒
        INC        SECOND
        MOV        TCNT,#0
        MOV        A,SECOND
        CJNE    A,#60,RETUNE
        INC        MINUTE
        MOV        SECOND,#0
        MOV        A,MINUTE
        CJNE    A,#60,RETUNE
        INC        HOUR
        MOV        MINUTE,#0
        MOV        A,HOUR
        CJNE    A,#24,RETUNE
        MOV        HOUR,#0
        MOV        MINUTE,#0
        MOV        SECOND,#0
        MOV        TCNT,#0
RETUNE:    RETI
;******************************************
;显示控制子程序
DISPLAY:MOV        A,SECOND    ;显示秒
        MOV        B,#10
        DIV        AB
        CLR        P3.6
        MOVC    A,@A+DPTR
        MOV        P0,A
        LCALL    DELAY
        SETB    P3.6
        MOV        A,B
        CLR        P3.7
        MOVC    A,@A+DPTR
        MOV        P0,A
        LCALL    DELAY
        SETB    P3.7

        CLR        P3.5
        MOV        P0,#40H        ;显示分隔符
        LCALL    DELAY
        SETB    P3.5

        MOV        A,MINUTE    ;显示分钟
        MOV        B,#10
        DIV        AB
        CLR        P3.3
        MOVC    A,@A+DPTR
        MOV        P0,A
        LCALL    DELAY
        SETB    P3.3
        MOV        A,B
        CLR        P3.4
        MOVC    A,@A+DPTR
        MOV        P0,A
        LCALL    DELAY
        SETB    P3.4

        CLR        P3.2
        MOV        P0,#40H        ;显示分隔符
        LCALL    DELAY
        SETB    P3.2

           MOV        A,HOUR        ;显示小时
        MOV        B,#10
        DIV        AB
        CLR        P3.0
        MOVC    A,@A+DPTR
        MOV        P0,A
        LCALL    DELAY
        SETB    P3.0
        MOV        A,B
        CLR        P3.1
        MOVC    A,@A+DPTR
        MOV        P0,A
        LCALL    DELAY
        SETB    P3.1
        RET

TABLE:     DB         3FH,06H,5BH,4FH,66H
        DB        6DH,7DH,07H,7FH,6FH
DELAY:    MOV        R6,#10
D1:        MOV        R7,#250
        DJNZ    R7,$
        DJNZ    R6,D1
        RET

        END

相关帖子

沙发
ayb_ice| | 2007-9-3 18:32 | 只看该作者

网站上有例程...

使用特权

评论回复
板凳
gyt| | 2007-9-3 21:10 | 只看该作者

自己再想想

自己编出来,对你的水平提高有好处

使用特权

评论回复
地板
conwh| | 2007-9-3 21:42 | 只看该作者

整理一下,太乱

使用特权

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

本版积分规则

4

主题

16

帖子

0

粉丝