新闻  |   论坛  |   博客  |   在线研讨会
单片机的6位数码管电子钟程序
tvb2058 | 2007-10-04 11:22:38    阅读:9953   发布文章

单片机的6位数码管电子钟程序

;;显示缓冲单元在70H75H70H71H显示秒,72H73H显示分,74H75H显示时
;;时间计数单元在70H71H(秒)、76H77H(分)、78H79H(时),7AH单元放熄灭符(#0AH
;;计数单元采用BCD码计数,定时器T0设置为50MS溢出中断,为秒计数用,
;;定时器T1为调整时闪烁用
;;P3.2为调整按钮,P0口为字符输出口,P2.1-P2.6为位控制口-采用共阳显示管。
      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
     ;; 中断入口程序 ;;
      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      ;
      ORG 0000H
      LJMP START
      ORG 0003H
      RETI  ;;不用的中断,抗干扰
;---------------------------------
      ORG 000BH  ;;定时器0中断
      LJMP INTT0
;--------------------------------------------
      ORG 0013H
      RETI  ;;不用的中断,抗干扰
;;;===========================================
      ORG 001BH  ;;定时器1中断,调整时闪烁
      LJMP INTT1
;----------------------------------------------
      ORG 0023H
      RETI  ;;不用的中断,抗干扰
      ORG 002BH
      RETI  ;;不用的中断,抗干扰
      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      ;; ;;
      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
START:
      MOV R0, #70H ;;时间计数单元在70H
      MOV R7, #0BH ;;
      MOV 20H, #00H ;;

CLEARDISP:
      MOV @R0, #00H ;;清地址单元70H--7BH
      INC R0
      DJNZ R7,CLEARDISP
      MOV 7AH,#0AH ;;地址单元7AH熄灭符=0AH(1010)

      MOV TMOD,#11H ;;定时器0-1方式1工作
      MOV TL0, #0B0H ;;
      MOV TH0, #3CH ;;3CB0H

      MOV TL1, #0B0H ;;
      MOV TH1, #3CH ;;3CB0H
      SETB EA  ;;总中断允许
      SETB ET0  ;;定时器0中断允许
      SETB TR0  ;;启动定时器0

      MOV R4,#14H ;;20D

START1:
      LCALL DISPLAY ;;调显示
      JNB P3.2,SETMM1 ;查询按键
      SJMP Start1 ;;
SETMM1:
      LJMP SETMM
     ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      ;; 1秒定时程 ;;定时中断0
      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INTT0:
      PUSH ACC
      PUSH PSW
      CLR ET0
      CLR TR0
      MOV A,#0B7H ;中断同步修正重新设定定时初值
      ADD A,TL0
      MOV TL0,A
      MOV A,#3CH
      ADD A,TH0
      MOV TH0,A
      SETB TR0  ;;启动定时器0
      DJNZ R4, OUTT0 ;;1秒到
ADDSS:   ;;秒处理70H-71H
      MOV R4,#14H ;;20D
      MOV R0,#71H ;;
      ACALL ADD1  ;;1程序秒
      MOV A,R3
      CLR C
      CJNE A,#60H,ADDMM ;;1分到
ADDMM:    ;;分处理76H-77H
      JC OUTT0
      ACALL CLR0
      MOV R0,#77H
      ACALL ADD1 ;;1程序
      MOV A,R3
      CLR C
      CJNE A,#60H,ADDHH ;;1小时到
ADDHH:    ;;小时处理78H-79H
      JC OUTT0
      ACALL CLR0
      MOV R0,#79H
      ACALL ADD1 ;;1程序-
      MOV A,R3
      CLR C
      CJNE A,#24H,HOUR ;;1天到
HOUR:
      JC OUTT0  ;;C=0
      ACALL CLR0
OUTT0:
      MOV 72H,76H ;;72H-73H
      MOV 73H,77H ;;
      MOV 74H,78H ;;74H-75H
      MOV 75H,79H ;;
      POP PSW
      POP ACC
      SETB ET0
      RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   ;; 闪动调时程 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INTT1:
      PUSH ACC  ;;
      PUSH PSW
      MOV TL1, #0B0H ;;
      MOV TH1, #3CH ;;
      DJNZ R2,INTT1OUT ;;
      MOV R2,#06H ;;
      CPL 02H  ;;
      JB 02H,FLASH1 ;;
      MOV 72H,76H ;;
      MOV 73H,77H ;;
      MOV 74H,78H ;;
      MOV 75H,79H ;;
INTT1OUT:  ;;
      POP PSW
      POP ACC
      RETI
 FLASH1:
      JB 01H,FLASH2 ;;
      MOV 72H,7AH ;;
      MOV 73H,7AH ;;
      MOV 74H,78H ;;
      MOV 75H,79H ;;
      AJMP INTT1OUT ;;
 FLASH2:
      MOV 72H,76H ;;
      MOV 73H,77H ;;
      MOV 74H,7AH ;;
      MOV 75H,7AH ;;
      AJMP INTT1OUT ;;
      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      ;; 1程序 ;;
      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      ;
ADD1: MOV A,@R0  ;;--71H
      DEC R0  ;;--70H
      SWAP A  ;;
      ORL A,@R0  ;;
      ADD A,#01H ;;
      DA A  ;;
      MOV R3,A  ;;
      ANL A,#0FH ;;
      MOV @R0,A  ;;70H
      MOV A,R3  ;;
      INC R0  ;;71H
      SWAP A  ;;
      ANL A,#0FH ;;
      MOV @R0,A  ;;71H
      RET
      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      ;; 清零程序 ;;
      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      ;
CLR0: CLR A
      MOV @R0,A
      DEC R0
      MOV @R0,A
      RET
     ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      ;; 时钟调整程序 ;;
      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      ;
SETMM:
      CLR ET0  ;;禁止定时器0中断
      CLR TR0  ;;停止定时器0
      LCALL DL1S
      JB P3.2,CLOSEDIS
      MOV R2,#06H
      SETB ET1
      SETB TR1
SET2:
      JNB P3.2,SET1
      SETB 00H
SET4:
      JB P3.2,SET3
      LCALL DL05S
      JNB P3.2,SETHH
      MOV R0,#77H ;1分程序
      LCALL ADD1
      MOV A,R3
      CLR C
      CJNE A,#60H,HHH
HHH: JC SET4
      LCALL CLR0
      CLR C
      AJMP SET4
CLOSEDIS:
      SETB ET0
      SETB TR0
CLOSE:
      JB P3.2,CLOSE
      LCALL DISPLAY
      JB P3.2,CLOSE
WAITH:
      JNB P3.2,WAITH
      LJMP START1
SETHH:
      CLR 00H
SETHH1:
      JNB P3.2,SET5
      SETB 01H
SET6: JB P3.2,SET7
      LCALL DL05S
      JNB P3.2,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.2,SETOUT1
      LCALL DISPLAY
      JNB P3.2,SETOUT
      CLR 01H
      CLR 00H
      CLR 02H
      CLR TR1
      CLR ET1
      SETB TR0
      SETB ET0
      LJMP START1
SET1: LCALL DISPLAY
      AJMP SET2
SET3: LCALL DISPLAY
      AJMP SET4
SET5: LCALL DISPLAY
      AJMP SETHH1
SET7: LCALL DISPLAY
      AJMP SET6
SETOUT1: LCALL DISPLAY
      AJMP SETOUT
      ;
      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

      ;; 显示程序 ;;
      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DISPLAY:
      MOV R1,#70H ;;70H—71H显示秒,72H—73H显示分,74H—75H显示时
      MOV R5,#0BFH ;;1011 1111 开始显示 P2.6
PLAY:
      MOV A,R5  ;;
      MOV P2,A  ;;1011 1111
      MOV A,@R1  ;;
      MOV DPTR,#TAB ;;
      MOVC A,@A+DPTR ;;
      MOV P0,A  ;;段
      LCALL DL1MS ;;延时1MS
      INC R1  ;;
      MOV A,R5  ;;
      JNB ACC.1,ENDOUT ;;=0跳 显示到P2.1=0
      RR A  ;;1011 1111---1101 1111
      MOV R5,A  ;;
      AJMP PLAY  ;;
ENDOUT:
      SETB P2.1
MOV P0,#0FFH
      RET
 TAB: DB 28h,7eh,0a2h,62h,74h,61h,21h,7ah,20h,60h
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; 延时程序 ;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DL1MS: MOV R6,#14H
   DL1: MOV R7,#19H ;;84*14=1176
   DL2: DJNZ R7,DL2
        DJNZ R6,DL1
      RET
   ;-----------------------
 DS20MS: ACALL DISPLAY
      ACALL DISPLAY
      ACALL DISPLAY
      RET
 DL1S: LCALL DL05S
      LCALL DL05S
      RET
 DL05S: MOV R3,#20H
 DL05S1: LCALL DISPLAY
         DJNZ R3,DL05S1
      RET
END
比较典型的时钟程序,计数器,定时器,键控,动态扫描显示,

 

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

参与讨论
登录后参与讨论
啤酒花 [ 匿名]  2008-01-08 11:49:03 

哈哈~~谢谢

推荐文章
最近访客