新闻  |   论坛  |   博客  |   在线研讨会
打零器程序
lcpeng | 2007-09-27 11:11:52    阅读:1728   发布文章

        ORG     0000H
        AJMP    MAIN    ; 转到主程序
        ORG     000BH
        AJMP    SERVE   ; 转到中断程序
;*********************主程序*************************
MAIN:   MOV     TMOD    ,#1
        MOV     30H      ,#00
        MOV     R6      ,#00
        MOV     R7      ,#00
        m_sec   EQU     20H     ;毫秒单元
        sec     EQU     21H     ;秒单元
        min     EQU     22H     ;分单元
        hour    EQU     23H     ;时单元
        SUWI    EQU     31H     ;冬季夏季标志位,0为冬季
        SK44    EQU     32H     ;按键SK4标志位
        SPEAK   BIT     P1.3    ;蜂鸣器
        LED     BIT     P3.3    ;按键指示灯
        LED1    BIT     P3.4    ;冬季时间指示灯
        LED2    BIT     P3.5    ;夏季时间指示灯
        SK1     BIT     P1.4    ;数字钟开始键
        SK2     BIT     P1.5    ;数字钟调整时间部分切换键
        SK3     BIT     P1.6    ;数字钟调整时间加1键
        SK4     BIT     P1.7    ;冬季夏季时间表切换键
        SETB    ET0             ;允许T0中断
        SETB    EA              ;允许CPU中断
        CLR     LED1
        MOV     TH0     ,#0ECH
        MOV     TL0     ,#78H  ;赋计数器初值
        MOV     33H     ,#00
        MOV     34H     ,#25
        MOV     35H     ,#50
        MOV     m_sec   ,#00   ;毫秒单元清零
        MOV     sec     ,#00   ;秒单元清零
        MOV     min     ,#00   ;分单元清零
        MOV     hour    ,#00   ;时单元清零
        MOV     SUWI    ,#00   ;冬季夏季标志位清零
        MOV     SK44    ,#00   ;按键SK44标志位清零
        SETB    TR0
        LCALL   RETURN         ;调用显示程序

;****************** 打铃时间判断*******************
NET11:  MOV     A       ,SUWI
        CJNE    A       ,#00    ,NET20
NET13:  MOV     DPTR    ,#TMTAB
NET12:  MOV     A       ,33H
        MOVC    A       ,@A+DPTR
        CJNE    A       ,hour   ,NET10
        INC     33H
        MOV     A       ,33H
        MOVC    A       ,@A+DPTR
        CJNE    A       ,min    ,NET15
        CLR     SPEAK
        CLR     LED            ;铃声响
        LCALL   DL1min         ;延时1分钟
        SETB    SPEAK
        SETB    LED             ;铃声停
        INC     33H
        DEC     34H
        MOV     A        ,34H
        CJNE    A        ,#00     ,NET16
        MOV     33H      ,#00
        SJMP    NET16
NET10:  INC     33H
NET15:  INC     33H
NET16:  LJMP    S1
NET20:  MOV     DPTR    ,#TMTAB
        MOV     A       ,35H
        MOVC    A       ,@A+DPTR
        CJNE    A       ,hour   ,NET18
        INC     35H
        MOV     A       ,35H
        MOVC    A       ,@A+DPTR
        CJNE    A       ,min    ,NET19
        INC     35H
SING1:  CLR     SPEAK
        CLR     LED            ;铃声响
        LCALL   DL1min         ;延时1分钟
        SETB    SPEAK
        SETB    LED             ;铃声停
        DEC     34H
        MOV     A        ,34H
        CJNE    A        ,#00     ,NET17
        MOV     35H      ,#50
        SJMP    NET17
NET18:  INC     35H
NET19:  INC     35H
NET17:  LJMP    S1
;************************************************
;*****************数字钟按键程序*****************
;************************************************

;*****************开始键************************
S1:     JB      SK1     ,S2       ;数字钟开始键
        LCALL   DL10ms
        JB      SK1     ,S2
        CLR     SPEAK
        CLR     LED
        JNB     SK1     ,$
        SETB    SPEAK
        SETB    LED
        SETB    TR0
        MOV     30H     ,#00
        MOV     R7      ,#00
;****************调整时间部分切换键********************
S2:     MOV     A       ,30H
        CJNE    A       ,#00   ,NET6
        JB      SK2     ,S3      ;数字钟调整时间部分切换键
        LCALL   DL10ms
        JB      SK2     ,S3
        CLR     SPEAK
        CLR     LED
        INC     30H
        JNB     SK2     ,$
        SETB    SPEAK
        SETB    LED
        INC     R7
        CLR     TR0
        SJMP    NET7
NET6:   JB      SK2     ,NET7
        LCALL   DL10ms
        JB      SK2     ,NET7
        CLR     SPEAK
        CLR     LED
        INC     30H
        JNB     SK2     ,$
        SETB    SPEAK
        SETB    LED
        INC     R7
NET7:   CJNE    R7       ,#1     ,NET1
        LCALL   MSH     ;分闪烁
        SJMP    S3
NET1:   MOV      R7     ,#0
        LCALL   HSH     ;时闪烁
        SJMP    S3
NET9:   LCALL   RETURN
;******************调整时间加1键*****************
S3:     JB      SK3    ,S4    ;数字钟调整时间键
        LCALL   DL10ms
        JB      SK3   ,S4
        CLR     SPEAK
        CLR     LED
        CJNE    R7     ,#1     ,NET2
        SETB    SPEAK
        SETB    LED
        LCALL   DL200ms
        INC     min    ;分单元加1
        MOV     A      ,min
        CJNE    A      ,#60    ,NET9  ;不等60时跳转显示,等60时将分单元清零
        MOV     min    ,#00
        LCALL    RETURN
        JB     SK3    ,NET4
        LJMP    S3
NET2:   SETB    SPEAK
        SETB    LED
        LCALL   DL200ms
        INC     hour   ;时单元加1
        MOV     A      ,hour
        CJNE    A      ,#24    ,NET9 ;不等24时跳转显示,等24时将时单元清零
        MOV     hour   ,#00
        LCALL    RETURN
        JNB     SK3    ,NET4
        LJMP    S3
NET4:   SJMP    S4

;****************冬季夏季时间表切换键**********************
S4:     MOV     A       ,SK44
        CJNE    A       ,#00    ,NET3
        ;CLR     LED1              ;冬季时间指示灯亮
        JB      SK4     ,NET25
        LCALL   DL10ms
        JB      SK4   ,NET25
        SETB    LED1           ;冬季时间指示灯灭
        CLR     LED2           ;  夏季时间指示灯亮
        CLR     SPEAK
        CLR     LED
        INC     SK44           ;按键SK4标志位加1
        INC     SUWI           ;冬季夏季时间标志位加1
        SJMP    NET5
NET3:   JB      SK4     ,NET25
        LCALL   DL10ms
        JB      SK4   ,NET25
        SETB    LED2          ; 夏季时间指示灯灭
        CLR     LED1          ;冬季时间指示灯亮
        CLR     SPEAK
        CLR     LED
        CLR     SK44          ;按键SK4标志位清零
        CLR     SUWI          ;冬季夏季时间标志位清零
NET5:   JNB     SK4   ,$
        SETB    SPEAK
        SETB    LED
NET25:  LJMP    NET11

;********************中断程序*********************

SERVE:  PUSH    PSW
        PUSH    ACC             ;保护现场
        MOV     TH0     ,#0ECH
        MOV     TL0     ,#78H   ;重新赋计数初值
        INC     m_sec          ;毫秒单元加1
        MOV     A       ,m_sec
        CJNE    A       ,#100    ,NEXT1
        MOV     m_sec    ,#00
        INC     sec            ;秒单元加1
        MOV     A       ,sec
        CJNE    A       ,#60    ,NEXT1
        MOV     sec     ,#00
        INC     min             ;
        MOV     A       ,min
        CJNE    A       ,#60    ,NEXT1
        MOV     min     ,#00
        INC     hour            ;
        MOV     A        ,hour
        CJNE    A        ,#24    ,NEXT1
        MOV     hour    ,#00
NEXT1:  LCALL   RETURN
        POP      ACC
        POP      PSW            ;恢复现场
        RETI                    ;中断返回

;********************数字钟显示程序******************
RETURN: MOV      A      ,sec  ;将秒送A
        MOV      B      ,#10
        DIV      AB
        MOV      24H    ,B     ;秒的个位
        MOV      25H    ,A     ;秒的十位
        MOV      A      ,min   ;将分送A
        MOV      B      ,#10
        DIV      AB
        MOV      26H    ,B    ;分的个位
        MOV      27H    ,A    ;分的十位
        MOV      A      ,hour ;将时送A
        MOV      B      ,#10
        DIV      AB
        MOV      28H    ,B      ;时的个位
        MOV      29H    ,A      ;时的十位
LCP:    MOV      R1     ,#24H
        MOV      R4     ,#6
        MOV      DPTR   ,#TAB
BK:     MOV      A      ,@R1
        MOVC     A      ,@A+DPTR
        MOV      SBUF   ,A
        JNB      TI     ,$
        CLR      TI
        INC      R1
        DJNZ     R4     ,BK
        RET


;******************字型码*********************
TMTAB:  DB 6,20,7,0,7,50,8,0,8,50,9,0,9,50,10,10,11,00
        DB 12,00,14,10,14,30,15,20,15,30,16,20,16,40,17
        DB 30,17,40,18,30,19,20,19,30,20,20,20,30,21,20;冬季时间表
TMTABS: DB 6,20,7,0,7,50,8,0,8,50,9,0,9,50,10,10,11,00
        DB 12,00,14,40,15,00,15,50,16,00,16,50,17,10,18
        DB 00,18,10,19,00,19,50,20,00,20,50,21,00,21,50;夏季时间表
TAB:    DB 11H,0D7H,32H,92H,0D4H,98H,18H,0D1H,10H,90H;0-9
        DB 05H,1CH,39H,16H,38H,68H,70H,0FEH,0EFH,0FFH;A  B, C,    D,  E, ,F   ,P, -,  ,.  ,COLSE
        DB 01H,0C7H,22H,82H,0C4H,88H,08H,0C3H,00H,80H;带小数点的字形码0.,1.,-----9.
;*******************延时10ms子程序******************
DL10ms:  MOV      R2     ,#10H
TS1:     MOV      R3     ,#0FFH
TS2:     DJNZ     R3     ,TS2
         DJNZ     R2     ,TS1
         RET
;*******************延时200ms子程序*******************
DL200ms:MOV    R3    ,#20
DL3:    MOV    R4    ,#10H
DL2:    MOV    R5    ,#0FFH
DL1:    DJNZ   R5    ,DL1
        DJNZ   R4    ,DL2
        DJNZ   R3    ,DL3
        RET

;*******************延时1分钟子程序******************
DL1min: MOV    70H    ,#100
DL6:    MOV    71H    ,#10H
DL5:    MOV    72H    ,#0FFH
DL4:    DJNZ   72H    ,DL4
        DJNZ   71H    ,DL5
        DJNZ   70H    ,DL6
        RET

;****************分显示闪烁子程序********************
MSH:    LCALL   RETURN
        LCALL   DL200ms
        MOV     A      ,#0FFH
        MOV     B      ,#0FFH
        MOV     26H    ,B
        MOV     27H    ,A
        LCALL   LCP
        LCALL   DL200ms
        RET

;****************时显示闪烁子程序********************
HSH:    LCALL   RETURN
        LCALL   DL200ms
        MOV     A      ,#0FFH
        MOV     B      ,#0FFH
        MOV     28H    ,B
        MOV     29H    ,A
        LCALL   LCP
        LCALL   DL200ms
        RET
        END

 

 

 

 

 

 

 

 

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
19861209
最近文章
IIC总线程序
2007-09-27 11:34:17
温度传感器Ds18b20程序
2007-09-27 11:14:20
打零器程序
2007-09-27 11:11:52
推荐文章
最近访客