返回主页  单片机教程  XL2000开发板  单片机学习  自制编程器 单片机资料  电子技术  产品介绍 如何购买  进入论坛

;;           AT89C51时钟程序         ;; 

;6位数字钟。
;***************************************************************************
;* (程序转载请著明出处  *
;*  E-mail:sxj1974@163.com (51c51 test web)  51单片机学习网,自学单片机的网站      *
;* tel:13714407535 石学军 www.51c51.com www.8951.com 51单片机学习网系列自学单片机例程
*  
;***************************************************************************

org 00h
;显示缓冲单元在70H—75H,70H—71H显示秒,72H—73H显示分,74H—75H显示时

;时间计数单元在70H—71H(秒)、76H—77H(分)、78H—79H(时),7AH单元放熄灭符(#0AH)

;计数单元采用BCD码计数,定时器T0设置为50MS溢出中断,为秒计数用,定时器T1为调整时闪烁用

;P3.2为调整按钮,P1口为字符输出口,采用共阳显示管。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; 中断入口程序 ;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;

ORG 0000H

LJMP START

ORG 0003H

RETI

ORG 000BH

LJMP INTT0

ORG 0013H

RETI

ORG 001BH

LJMP INTT1

ORG 0023H

RETI

ORG 002BH

RETI

;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; 主 程 序 ;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;

START: MOV R0, #70H

MOV R7, #0BH

MOV 20H, #00H

CLEARDISP: MOV @R0, #00H

INC R0

DJNZ R7,CLEARDISP

MOV 7AH,#0AH

MOV TMOD,#11H

MOV TL0, #0B0H

MOV TH0, #3CH

MOV TL1, #0B0H

MOV TH1, #3CH

SETB EA

SETB ET0

SETB TR0

MOV R4,#14H

start1: LCALL DISPLAY

JNB P3.2,SETMM1

SJMP Start1

SETMM1: LJMP SETMM

;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; 1秒定时程 序 ;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;

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

DJNZ R4, OUTT0

ADDSS: MOV R4,#14H

MOV R0,#71H

ACALL ADD1 ;加1程序

MOV A,R3

CLR C

CJNE A,#60H,ADDMM

ADDMM: JC OUTT0

ACALL CLR0

MOV R0,#77H

ACALL ADD1

MOV A,R3

CLR C

CJNE A,#60H,ADDHH

ADDHH: JC OUTT0

ACALL CLR0

MOV R0,#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

;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; 闪动调时程 序 ;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;

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

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

;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; 时钟调整程序 ;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;

SETMM: cLR ET0

CLR TR0

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

MOV R5,#0BFH

PLAY: MOV A,R5

MOV P2,A

MOV A,@R1



MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV P0,A

LCALL DL1MS

INC R1

MOV A,R5

JNB ACC.1,ENDOUT

RR A

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

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