原创 辉光管电子时钟源程序

2010-10-9 23:47 2270 5 5 分类: MCU/ 嵌入式

;*******************************************
; 定时器溢出周期为50MS
; P3.4为显示开关按钮,P3.5为调整时钟,P3.6为调整分钟
; 70-71H 秒计时单元
; 72-73H 分显示单元 注意:72H放个位数 73H放十位数
; 74-75H 小时显示单元
; 76-77H 分计计时单元
; 78-79H 小时计时单元
; 7AH 放“熄灭符”数据
;  6BH 放 分调整标志
;  6AH 放小时调整标志
;**********************************************
XSZ        EQU    7AH


           ORG    0000H
           LJMP   START
           ORG    000BH
           LJMP   INTT0


;****************************************
; 主 程 序
;****************************************
START:     MOV    P0,#00H
           MOV    P1,#00H
           MOV    P2,#00H
           CLR    P3.0
           CLR    P3.1
           CLR    P3.2
           CLR    P3.3
           CLR    P3.7
           MOV    R0,#70H ;清70H-7AH共11个内存单元
           MOV    R7,#0BH
           SETB   XSZ
CLEARDISP: MOV    @R0,#00H
           INC    R0
           DJNZ   R7,CLEARDISP
           MOV    20H,#00H ;清20H(标志用)
           MOV    TMOD,#01H ;设T0为16位定时器
           MOV    TL0,#0B0H ;50MS定时初值(T0计时用)
           MOV    TH0,#3CH ;50MS定时初值
           SETB   EA
           SETB   ET0
           SETB   TR0
           MOV    R4,#14H ;1秒定时用初值(50MS×20)
START1:    JNB    XSZ,START2      ;关辉光电子管显示,为0跳过显示
           LCALL  DISPLAY    ;调用显示子程序
START2:    JNB    P3.5,SET_H  ;此按键是小时加1
           JNB    P3.6,SET_M  ;此按键是分钟加1
           JNB    P3.4,SET_X
           MOV    A,70H
           CJNE   A,60H,START3
           LJMP   START1
START3:    SETB   P3.7       ;秒闪
           LCALL  DL05S
           CLR    P3.7
           MOV    60H,70H
           LJMP   START1
SET_H:     LJMP   SET_HH
SET_M:     LJMP   SET_MM
SET_X:     LJMP   SET_XX


;****************************************
; 1秒计时程序
;T0中断服务程序
;****************************************
INTT0:     PUSH   ACC
           PUSH   PSW
           CLR    ET0
           CLR    TR0
           MOV    A,#0B0H ;中断响应时间同步修正,要精确调整在这里!!!
           ADD    A,TL0
           MOV    TL0,A
           MOV    A,#3CH
           ADDC   A,TH0
           MOV    TH0,A
           SETB   TR0
           DJNZ   R4, OUTT0
ADDSS:     MOV    R4,#014H
           MOV    R0,#71H ;指向秒计时单元(70H-71H)
           ACALL  ADD1
           MOV    A,R3
           CLR    C
           CJNE   A,#60H,ADDMM ;
ADDMM:     JC     OUTT0 ;小于60秒时中断退出
           ACALL  CLR0 ;大于或等于60秒时对秒计时单元清0
           MOV    R0,#77H ;指向分计时单元(76H-77H)
           ACALL  ADD1
           MOV    A,R3
           CLR    C
           CJNE   A,#60H,ADDHH ;
ADDHH:     JC     OUTT0 ;小于60分时中断退出
           ACALL  CLR0 ;大于或等于60分时分计时单元清0
           MOV    R0,#79H ;指向小时计时单元(78H-79H)
           ACALL  ADD1
           MOV    A,R3
           CLR    C
           CJNE   A,#24H,HOUR
HOUR:      JC     OUTT0
           ACALL  CLR0
OUTT0:     MOV    72H,76H
           MOV    73H,77H
           MOV    74H,78H
           MOV    75H,79H
           POP    PSW
           POP    ACC
           SETB   ET0
           RETI
;
;***************************************
; 加1子 程 序
;***************************************
ADD1:      MOV    A,@R0
           DEC    R0
           SWAP   A
           ORL    A,@R0
           ADD    A,#01H
           DA     A
           MOV    R3,A
           ANL    A,#0FH
           MOV    @R0,A
           MOV    A,R3
           INC    R0
           SWAP   A
           ANL    A,#0FH
           MOV    @R0,A
           RET


;***************************************
;清零程序
;对计时单元复零用
;***************************************
CLR0:      CLR    A
           MOV    @R0,A
           DEC    R0
           MOV    @R0,A
           RET
;****************************************
;显示程序
;显示数据在70H-75H单元内
;***************************************
DISPLAY:   JB     6BH,DIS10
           LJMP   DISP30
DIS10:     MOV    A,75H
           CJNE   A,#00H,DIS11
           CLR    P1.0
           CLR    P1.1
           LJMP   DIS20
DIS11:     CJNE   A,#01H,DIS12
           SETB   P1.0
           CLR    P1.1
           LJMP   DIS20
DIS12:     CJNE   A,#02H,DIS20
           CLR    P1.0
           SETB   P1.1
DIS20:     MOV    A,74H
           CJNE   A,#00H,DIS21
           SETB   P1.2
           CLR    P1.3
           CLR    P1.4
           CLR    P1.5
           CLR    P1.6
           CLR    P1.7
           CLR    P3.0
           CLR    P3.1
           CLR    P3.2
           CLR    P3.3
           LJMP   DISP30
DIS21:     CJNE   A,#01H,DIS22
           CLR    P1.2
           SETB   P1.3
           CLR    P1.4
           CLR    P1.5
           CLR    P1.6
           CLR    P1.7
           CLR    P3.0
           CLR    P3.1
           CLR    P3.2
           CLR    P3.3
           LJMP   DISP30
DIS22:     CJNE   A,#02H,DIS23
           CLR    P1.2
           CLR    P1.3
           SETB   P1.4
           CLR    P1.5
           CLR    P1.6
           CLR    P1.7
           CLR    P3.0
           CLR    P3.1
           CLR    P3.2
           CLR    P3.3
           LJMP   DISP30
DIS23:     CJNE   A,#03H,DIS24
           CLR    P1.2
           CLR    P1.3
           CLR    P1.4
           SETB   P1.5
           CLR    P1.6
           CLR    P1.7
           CLR    P3.0
           CLR    P3.1
           CLR    P3.2
           CLR    P3.3
           LJMP   DISP30
DIS24:     CJNE   A,#04H,DIS25
           CLR    P1.2
           CLR    P1.3
           CLR    P1.4
           CLR    P1.5
           SETB   P1.6
           CLR    P1.7
           CLR    P3.0
           CLR    P3.1
           CLR    P3.2
           CLR    P3.3
           LJMP   DISP30
DIS25:     CJNE   A,#05H,DIS26
           CLR    P1.2
           CLR    P1.3
           CLR    P1.4
           CLR    P1.5
           CLR    P1.6
           SETB   P1.7
           CLR    P3.0
           CLR    P3.1
           CLR    P3.2
           CLR    P3.3
           LJMP   DISP30
DIS26:     CJNE   A,#06H,DIS27
           CLR    P1.2
           CLR    P1.3
           CLR    P1.4
           CLR    P1.5
           CLR    P1.6
           CLR    P1.7
           SETB   P3.0
           CLR    P3.1
           CLR    P3.2
           CLR    P3.3
           LJMP   DISP30
DIS27:     CJNE   A,#07H,DIS28
           CLR    P1.2
           CLR    P1.3
           CLR    P1.4
           CLR    P1.5
           CLR    P1.6
           CLR    P1.7
           CLR    P3.0
           SETB   P3.1
           CLR    P3.2
           CLR    P3.3
           LJMP   DISP30
DIS28:     CJNE   A,#08H,DIS29
           CLR    P1.2
           CLR    P1.3
           CLR    P1.4
           CLR    P1.5
           CLR    P1.6
           CLR    P1.7
           CLR    P3.0
           CLR    P3.1
           SETB   P3.2
           CLR    P3.3
           LJMP   DISP30
DIS29:     CJNE   A,#09H,DISP30
           CLR    P1.2
           CLR    P1.3
           CLR    P1.4
           CLR    P1.5
           CLR    P1.6
           CLR    P1.7
           CLR    P3.0
           CLR    P3.1
           CLR    P3.2
           SETB   P3.3
           LJMP   DISP30
DISP30:    JB     6AH,DIS30        ;判断是否是小时设置
           LJMP   DIS50
DIS30:     MOV    A,73H
           CJNE   A,#00H,DIS31
           SETB   P0.0
           CLR    P0.1
           CLR    P0.2
           CLR    P0.3
           CLR    P0.4
           CLR    P0.5
           LJMP   DIS40
DIS31:     CJNE   A,#01H,DIS32
           CLR    P0.0
           SETB   P0.1
           CLR    P0.2
           CLR    P0.3
           CLR    P0.4
           CLR    P0.5
           LJMP   DIS40
DIS32:     CJNE   A,#02H,DIS33
           CLR    P0.0
           CLR    P0.1
           SETB   P0.2
           CLR    P0.3
           CLR    P0.4
           CLR    P0.5
           LJMP   DIS40
DIS33:     CJNE   A,#03H,DIS34
           CLR    P0.0
           CLR    P0.1
           CLR    P0.2
           SETB   P0.3
           CLR    P0.4
           CLR    P0.5
           LJMP   DIS40
DIS34:     CJNE   A,#04H,DIS35
           CLR    P0.0
           CLR    P0.1
           CLR    P0.2
           CLR    P0.3
           SETB   P0.4
           CLR    P0.5
           LJMP   DIS40
DIS35:     CJNE   A,#05H,DIS40
           CLR    P0.0
           CLR    P0.1
           CLR    P0.2
           CLR    P0.3
           CLR    P0.4
           SETB   P0.5
DIS40:     MOV    A,72H
           CJNE   A,#00H,DIS41
           SETB   P0.6
           CLR    P0.7
           CLR    P2.0
           CLR    P2.1
           CLR    P2.2
           CLR    P2.3
           CLR    P2.4
           CLR    P2.5
           CLR    P2.6
           CLR    P2.7
           LJMP   DIS50
DIS41:     CJNE   A,#01H,DIS42
           CLR    P0.6
           SETB   P0.7
           CLR    P2.0
           CLR    P2.1
           CLR    P2.2
           CLR    P2.3
           CLR    P2.4
           CLR    P2.5
           CLR    P2.6
           CLR    P2.7
           LJMP   DIS50
DIS42:     CJNE   A,#02H,DIS43
           CLR    P0.6
           CLR    P0.7
           SETB   P2.0
           CLR    P2.1
           CLR    P2.2
           CLR    P2.3
           CLR    P2.4
           CLR    P2.5
           CLR    P2.6
           CLR    P2.7
           LJMP   DIS50
DIS43:     CJNE   A,#03H,DIS44
           CLR    P0.6
           CLR    P0.7
           CLR    P2.0
           SETB   P2.1
           CLR    P2.2
           CLR    P2.3
           CLR    P2.4
           CLR    P2.5
           CLR    P2.6
           CLR    P2.7
           LJMP   DIS50
DIS44:     CJNE   A,#04H,DIS45
           CLR    P0.6
           CLR    P0.7
           CLR    P2.0
           CLR    P2.1
           SETB   P2.2
           CLR    P2.3
           CLR    P2.4
           CLR    P2.5
           CLR    P2.6
           CLR    P2.7
           LJMP   DIS50
DIS45:     CJNE   A,#05H,DIS46
           CLR    P0.6
           CLR    P0.7
           CLR    P2.0
           CLR    P2.1
           CLR    P2.2
           SETB   P2.3
           CLR    P2.4
           CLR    P2.5
           CLR    P2.6
           CLR    P2.7
           LJMP   DIS50
DIS46:     CJNE   A,#06H,DIS47
           CLR    P0.6
           CLR    P0.7
           CLR    P2.0
           CLR    P2.1
           CLR    P2.2
           CLR    P2.3
           SETB   P2.4
           CLR    P2.5
           CLR    P2.6
           CLR    P2.7
           LJMP   DIS50
DIS47:     CJNE   A,#07H,DIS48
           CLR    P0.6
           CLR    P0.7
           CLR    P2.0
           CLR    P2.1
           CLR    P2.2
           CLR    P2.3
           CLR    P2.4
           SETB   P2.5
           CLR    P2.6
           CLR    P2.7
           LJMP   DIS50
DIS48:     CJNE   A,#08H,DIS49
           CLR    P0.6
           CLR    P0.7
           CLR    P2.0
           CLR    P2.1
           CLR    P2.2
           CLR    P2.3
           CLR    P2.4
           CLR    P2.5
           SETB   P2.6
           CLR    P2.7
           LJMP   DIS50
DIS49:     CJNE   A,#09H,DIS50
           CLR    P0.6
           CLR    P0.7
           CLR    P2.0
           CLR    P2.1
           CLR    P2.2
           CLR    P2.3
           CLR    P2.4
           CLR    P2.5
           CLR    P2.6
           SETB   P2.7
DIS50:     RET


;****************************************
;小时加1调整程序
;****************************************
SET_HH:    CLR    ET0
           CLR    TR0
           CLR    6AH
           LCALL  DISPLAY
SETHH1:    JNB    P1.1,SETHH1
SET6:      JB     P3.5,SET6
           LCALL  DL05S
           JNB    P3.5,SETOUT
           MOV    R0,#79H
           LCALL  ADD1
           MOV    A,R3
           CLR    C
           CJNE   A,#24H,HOUU
HOUU:      JC     SET6
           LCALL  CLR0
           AJMP   SET6
SETOUT:    JNB    P3.5,SETOUT
           LCALL  DL05S
           JNB    P3.5,SETOUT
           SETB   TR0
           SETB   ET0
           SETB   6AH
           LJMP   START1 ;跳回主程序


;****************************************
;分钟加1调整程序
;*****************************************
SET_MM:    CLR    ET0
           CLR    TR0
           CLR    6BH
           LCALL  DISPLAY
SET2:      JNB    P3.6,SET2 ;(键未释放),等待
SET4:      JB     P3.6,SET4 ;等待键按下
           LCALL  DL05S     ;有键按下,延时0.5秒
           JNB    P3.6,SETOUT_M  ;按下时间大于0.5秒转退出程序
           MOV    R0,#77H
           LCALL  ADD1
           MOV    A,R3
           CLR    C
           CJNE   A,#60H,HHH
HHH:       JC     SET4
           LCALL  CLR0
           CLR    C
           AJMP   SET4
SETOUT_M:  JNB    P3.6,SETOUT_M
           LCALL  DL05S
           JNB    P3.6,SETOUT_M
           SETB   TR0
           SETB   ET0
           SETB   6BH
           LJMP   START1 ;跳回主程序


;****************************************
;辉光电子管显示开关程序
;*****************************************
SET_XX:    JNB    XSZ,SET_XX1
           MOV    P0,#00H
           MOV    P1,#00H
           MOV    P2,#00H
           CLR    P3.0
           CLR    P3.1
           CLR    P3.2
           CLR    P3.3
           CLR    P3.7
           CLR    XSZ
           LJMP   START1
SET_XX1:   SETB   XSZ
           LJMP   START1    ;跳回主程序


;****************************************
;延时程序
;****************************************
DL1S:      LCALL  DL05S
           LCALL  DL05S
           RET
DL05S:     MOV    R3,#20H
DL05S1:    DJNZ   R3,DL05S1
           RET


           END

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
5
关闭 站长推荐上一条 /3 下一条