维修网

 找回密码
 注册

QQ登录

只需一步,快速开始

微信扫码 , 快速开始

搜索附件  
维修网 附件中心 电子技术与产品开发 单片机开发与学习 本人刚做的时钟: 55767db1.rar

热门下载

附件中心&附件聚合2.0
For Discuz! X2.5 © hgcad.com

本人刚做的时钟: 55767db1.rar

 

本人刚做的时钟:
2051,4路闹铃,6位时间及日期显示,1位星期单独显示,段码P1.4-1.7输出 位码P1.1-1.3+138+9015输出,为了布线方便138的A接P1.3,C接P1.1,下面是源程序,有高手改下让程序小点为,多加一路闹铃,
TIMERKEY BIT P3.1
SETKEY BIT P3.2
MODEKEY BIT P3.3
BEEPOUT BIT P3.0

SDISP0 EQU 10H
SDISP1 EQU 11H
MDISP0 EQU 12H
MDISP1 EQU 13H
HDISP0 EQU 14H
HDISP1 EQU 15H

TIMER0M EQU 16H
TIMER0H EQU 17H

TIMER1M EQU 18H
TIMER1H EQU 19H

TIMER2M EQU 1AH
TIMER2H EQU 1BH

TIMER3M EQU 1CH
TIMER3H EQU 1DH

TM0DISP0 EQU 1FH
TM0DISP1 EQU 25H
TH0DISP0 EQU 26H
TH0DISP1 EQU 27H

TM1DISP0 EQU 28H
TM1DISP1 EQU 29H
TH1DISP0 EQU 2AH
TH1DISP1 EQU 2BH

TM2DISP0 EQU 2CH
TM2DISP1 EQU 2DH
TH2DISP0 EQU 2EH
TH2DISP1 EQU 2FH

TM3DISP0 EQU 30H
TM3DISP1 EQU 31H
TH3DISP0 EQU 32H
TH3DISP1 EQU 33H


TIMERTEMPM EQU 34H
TIMERTEMPH EQU 35H

;TS1DISP0 EQU 31H


;TS2DISP0 EQU 1BH


TMDISP0 EQU 36H
TMDISP1 EQU 37H
THDISP0 EQU 38H
THDISP1 EQU 39H
WEEKDISP0 EQU 46H
DADISP0 EQU 40H
DADISP1 EQU 41H
MODISP0 EQU 42H
MODISP1 EQU 43H
YEDISP0 EQU 44H
YEDISP1 EQU 45H

ORG 0000H
JMP START
ORG 000BH
JMP TOUT
ORG 001BH
JMP FLASHTOUT

START:
MOV R0,#80H ;清寄存器
CR0:
DJNZ R0,CR1
NOP
JMP START1
CR1:
MOV @R0,#00H
NOP
NOP
JMP CR0
START1:
MOV IE,#0CAH ;设置定时时间(100ms)
MOV IP,#0C2H
MOV SP,#47H ;设置找钱地址
MOV TMOD,#11H ;设置定时器0为定时定时模式1
MOV 0FH,#1
MOV 0EH,#1
SETB 21H.0 ;DISPTIME
MOV HDISP0,#8FH
MOV WEEKDISP0,#7FH ;2007年1月1日星期18:00
MOV TH0,#3CH
MOV TL0,#0B0H
MOV TH1,#3FH
MOV TL1,#0B0H
MOV R5,#1H
MOV R6,#20
MOV R2,#8
MOV 23H,#0AAH
SETB 20H.0
SETB RS0
MOV R6,#1
MOV R7,#1
MOV R5,#0
CLR RS0
SETB TR0 ;开始定时

CDISP:
MOV SP,#47H
JNB 23H.0,KEY10;定时时间是否到
JB 23H.1,OUTBEEP;定时是否开启
KEY10:
JNB 23H.2,KEY20;定时时间是否到
JB 23H.3,OUTBEEP;定时是否开启
KEY20:
JNB 23H.4,KEY30;定时时间是否到
JB 23H.5,OUTBEEP;定时是否开启
KEY30:
JNB 23H.6,ALTM;定时时间是否到
JNB 23H.7,ALTM;定时是否开启
OUTBEEP:
CLR BEEPOUT;两个条件中考都满足,开启讯响器
ALTM:
JB 21H.1,ZZ1
JB 21H.2,ZZ2
JB 21H.3,ZZ3
JB 21H.4,ZZ4
JB 20H.4,ZZ5
CALL WEEKDISP
CALL TIMEDISP
JMP KEYSCAN
ZZ1:
CALL WEEKDISP
CALL TIMER0DISP
JMP KEYSCAN
ZZ2:
CALL WEEKDISP
CALL TIMER1DISP
JMP KEYSCAN
ZZ3:
CALL WEEKDISP
CALL TIMER2DISP
JMP KEYSCAN
ZZ4:
CALL TIMER3DISP
CALL WEEKDISP
JMP KEYSCAN
ZZ5:
CALL DATEDISP
CALL WEEKDISP
KEYSCAN:
JNB SETKEY,TOSET
JNB TIMERKEY,TOTIMER
JNB MODEKEY,TOMODE;模式按钮 20H.7
JMP CDISP

TOMODE:
NOP
JNB MODEKEY,TOMODE
CALL MODE
JMP CDISP
TOTIMER:
NOP
JNB TIMERKEY,TOTIMER
CALL TIMER
JMP CDISP
TOSET:
NOP
JNB SETKEY,TOSET
CALL SETTOSET
JMP CDISP
MODE:
SETB TR1
JB 21H.0,MODE1
JB 21H.1,MODE2
JB 21H.2,MODE3
JB 21H.3,MODE4
JB 21H.4,MODE5
JB 20H.4,MODE61
RET
MODE61:
JMP MODE6
MODE1:
JB 21H.5,MODE2
JB 21H.6,MODE2
JB 21H.7,MODE2
JB 20H.6,MODE2
CLR 20H.4
SETB 21H.0
CLR 21H.1
CLR 21H.2
CLR 21H.3
CLR 21H.4
SETB 21H.5
RET
MODE2:
CLR 21H.5
CLR 21H.6
CLR 21H.7
CLR 20H.6
JB 22H.0,MODE3
JB 22H.1,MODE3
CLR 20H.4
CLR 21H.0
SETB 21H.1
CLR 21H.2
CLR 21H.3
CLR 21H.4
SETB 22H.0
RET
MODE3:
CLR 22H.0
CLR 22H.1
JB 22H.2,MODE4
JB 22H.3,MODE4
CLR 20H.4
CLR 21H.0
CLR 21H.1
SETB 21H.2
CLR 21H.3
CLR 21H.4
SETB 22H.2
RET
MODE4:
CLR 22H.2
CLR 22H.3
JB 22H.4,MODE5
JB 22H.5,MODE5
CLR 20H.4
CLR 21H.0
CLR 21H.1
CLR 21H.2
SETB 21H.3
CLR 21H.4
SETB 22H.4
RET
MODE5:
CLR 22H.4
CLR 22H.5
JB 22H.6,MODE6
JB 22H.7,MODE6
CLR 20H.4
CLR 21H.0
CLR 21H.1
CLR 21H.2
CLR 21H.3
SETB 21H.4
SETB 22H.6
RET
MODE6:
CLR 22H.6
CLR 22H.7
JB 20H.1,MODE7
JB 20H.2,MODE7
JB 20H.3,MODE7
SETB 20H.4
CLR 21H.0
CLR 21H.1
CLR 21H.2
CLR 21H.3
CLR 21H.4
SETB 20H.1
RET
MODE7:
MOV 22H,#0H
MOV 21H,#0H
SETB 21H.0
CLR 20H.1
CLR 20H.2
CLR 20H.3
CLR 20H.4
CLR TR1
CLR 20H.7
RET

SETTIMER31:
MOV TIMERTEMPM,TIMER3M
CALL SETTRM
MOV TM3DISP1,TMDISP1
MOV TM3DISP0,TMDISP0
MOV TIMER3M,TIMERTEMPM
JMP CDISP
SETTIMER32:
MOV TIMERTEMPH,TIMER3H
CALL SETTRH
MOV TH3DISP1,THDISP1
MOV TH3DISP0,THDISP0
MOV TIMER3H,TIMERTEMPH
JMP CDISP

SETTOSET:
JNB 21H.0,TOSET1
JB 21H.5,SETM
JB 21H.6,SETH
JB 21H.7,SETWEEK
JB 20H.6,SETS
RET
TOSET1:
JNB 21H.1,TOSET2
JB 22H.0,SETTIMER01
JB 22H.1,SETTIMER02
CPL 23H.1
RET
TOSET2:
JNB 21H.2,TOSET3
JB 22H.2,SETTIMER11
JB 22H.3,SETTIMER12
CPL 23H.3
RET
TOSET3:
JNB 21H.3,TOSET4
JB 22H.4,SETTIMER21
JB 22H.5,SETTIMER22
CPL 23H.5
RET
TOSET4:
JNB 21H.4,TOSET5
JB 22H.6,SETTIMER31
JB 22H.7,SETTIMER32
CPL 23H.7
TOSET5:
JNB 20H.4,TOSET6
JB 20H.1,SETDATE
JB 20H.2,SETMONTH
JB 20H.3,SETYEAR
TOSET6:
RET
SETM:
CALL MINUTESET
JMP CDISP
SETH:
CALL HOURSET
JMP CDISP
SETS:
CALL SECONDSET
JMP CDISP
SETWEEK:
CALL WEEKSET
JMP CDISP
SETTIMER01:
MOV TIMERTEMPM,TIMER0M
CALL SETTRM
MOV TM0DISP1,TMDISP1
MOV TM0DISP0,TMDISP0
MOV TIMER0M,TIMERTEMPM
JMP CDISP
SETTIMER02:
MOV TIMERTEMPH,TIMER0H
CALL SETTRH
MOV TH0DISP1,THDISP1
MOV TH0DISP0,THDISP0
MOV TIMER0H,TIMERTEMPH
JMP CDISP

SETTIMER11:
MOV TIMERTEMPM,TIMER1M
CALL SETTRM
MOV TM1DISP1,TMDISP1
MOV TM1DISP0,TMDISP0
MOV TIMER1M,TIMERTEMPM
JMP CDISP
SETTIMER12:
MOV TIMERTEMPH,TIMER1H
CALL SETTRH
MOV TH1DISP1,THDISP1
MOV TH1DISP0,THDISP0
MOV TIMER1H,TIMERTEMPH
JMP CDISP

SETTIMER21:
MOV TIMERTEMPM,TIMER2M
CALL SETTRM
MOV TM2DISP1,TMDISP1
MOV TM2DISP0,TMDISP0
MOV
TIMER2M,TIMERTEMPM
JMP CDISP
SETTIMER22:
MOV TIMERTEMPH,TIMER2H
CALL SETTRH
MOV TH2DISP1,THDISP1
MOV TH2DISP0,THDISP0
MOV TIMER2H,TIMERTEMPH
JMP CDISP
SETDATE:
CALL DATESET
JMP CDISP
SETMONTH:
CALL MONTHSET
JMP CDISP
SETYEAR:
CALL YEARSET
JMP CDISP
SETTRH:
MOV A,TIMERTEMPH
INC A
MOV TIMERTEMPH,A
MOV B,#100
DIV AB
MOV A,#10;余数继续分离十位和个位
XCH A,B
DIV AB
SWAP A
MOV THDISP1,A
MOV A,B
SWAP A
MOV THDISP0,A
MOV A,TIMERTEMPH
CJNE A,#24,SETTRHEND
MOV A,#00H
MOV THDISP0,#00H
MOV THDISP1,#00H
SETTRHEND:
MOV TIMERTEMPH,A
RET
SETTRM:
MOV A,TIMERTEMPM
INC A
MOV TIMERTEMPM,A
MOV B,#100
DIV AB
MOV A,#10;余数继续分离十位和个位
XCH A,B
DIV AB
SWAP A
MOV TMDISP1,A
MOV A,B
SWAP A
MOV TMDISP0,A
MOV A,TIMERTEMPM
CJNE A,#60,SETTRMEND
MOV A,#00H
MOV TMDISP0,#00H
MOV TMDISP1,#00H
SETTRMEND:
MOV TIMERTEMPM,A
RET
SECONDSET:
MOV R4,#00H
MOV SDISP0,#00H
MOV SDISP1,#00H
JMP TSETBACK
MINUTESET:
INC R3
MOV A,R3
MOV B,#100
DIV AB
MOV A,#10;余数继续分离十位和个位
XCH A,B
DIV AB
SWAP A
MOV MDISP1,A
MOV A,B
SWAP A
MOV MDISP0,A
CJNE R3,#60,TSETBACK
MOV R3,#00H
MOV MDISP0,#00H
MOV MDISP1,#00H
JMP TSETBACK
HOURSET:
INC R2
MOV A,R2
MOV B,#100
DIV AB
MOV A,#10;余数继续分离十位和个位
XCH A,B
DIV AB
SWAP A
MOV HDISP1,A
MOV A,B
SWAP A
MOV HDISP0,A
CJNE R2,#24,TSETBACK
MOV R2,#00H
MOV HDISP0,#00H
MOV HDISP1,#00H
JMP TSETBACK
WEEKSET:
MOV A,WEEKDISP0
ANL A,#0F0H
SWAP A
CJNE A,#08H,WEEKSET1
MOV A,#00H
WEEKSET1:
INC A
CJNE A,#07H,WEEKSET2
MOV A,#08H
WEEKSET2:
SWAP A
ORL A,#0FH
MOV WEEKDISP0,A
TSETBACK:
RET
DATESET:
SETB RS0;设定子程序
INC R7
MOV A,R7
MOV B,#10
DIV AB
SWAP A
MOV DADISP1,A
MOV A,B
SWAP A
MOV DADISP0,A
MOV A,R5;润年判断
JZ ISRUN1
MOV B,#4
DIV AB
MOV A,B
JNZ NOTRUN1
ISRUN1:
CJNE R6,#2,MONTH11;是润年,当前月是否为二月
CJNE R7,#30,DATESETBACK;是润年的二月,到29天?
MOV R7,#1;日第一天
MOV DADISP0,#1FH
MOV DADISP1,#0FH
JMP DATESETBACK
NOTRUN1:
CJNE R6,#2,MONTH11;不是润年,是否当前月为二月
CJNE R7,#29,DATESETBACK;不是润年的二月,到28天?
MOV R7,#1
MOV DADISP0,#1FH
MOV DADISP1,#0FH
JMP DATESETBACK
MONTH11:
JB 20H.0,BIGMONTH1;大月吗?
CJNE R7,#31,DATESETBACK;小月是否到了月底
MOV R7,#1;日重新开始
MOV DADISP0,#1FH
MOV DADISP1,#0FH
JMP DATESETBACK;跳到月加一
BIGMONTH1:
CJNE R7,#32,DATESETBACK;大月是否到了月底
MOV R7,#1;日重新开始
MOV DADISP0,#1FH
MOV DADISP1,#0FH
DATESETBACK:
CLR RS0
RET

MONTHSET:
SETB RS0
INC R6;月加一
MOV A,R6
MOV B,#10;余数继续分离十位和个位
DIV AB
SWAP A
MOV MODISP1,A
MOV A,B
SWAP A
MOV MODISP0,A
CJNE R6,#13,BIGSMALL1;判断是否到了年底
MOV R6,#1;月重新开始
MOV MODISP0,#1FH
MOV MODISP1,#0
SETB 20H.0;一月大
JMP MONTHSETBACK
BIGSMALL1:
CJNE R6,#8,OTHERCON1;是八月,则仍为大月
SETB 20H.0
JMP MONTHSETBACK
OTHERCON1:
CPL 20H.0;不是八月,大小月与上一个取反
MONTHSETBACK:
CLR RS0
RET

YEARSET:
SETB RS0
CALL YEARUP
CLR RS0
RET

;定时按钮
TIMER:
JNB 23H.0,TIMER01
CLR 23H.0
SETB BEEPOUT
RET
TIMER01:
JNB 23H.2,TIMER02
CLR 23H.2
SETB BEEPOUT
RET
TIMER02:
JNB 23H.4,TIMER03
CLR 23H.4
SETB BEEPOUT
RET
TIMER03:
JNB 23H.6,TIMER1
CLR 23H.6
SETB BEEPOUT
RET

TIMER1:
JNB 21H.0,TIMER2
JNB 21H.5,TIMER10
CLR 21H.5
SETB 21H.6
CLR 21H.7
CLR 20H.6
RET
TIMER10:
JNB 21H.6,TIMER11
CLR 21H.5
CLR 21H.6
CLR 21H.7
SETB 20H.6
RET
TIMER11:
JNB 20H.6,TIMER12
CLR 21H.5
CLR 21H.6
SETB 21H.7
CLR 20H.6
RET
TIMER12:
JNB 21H.7,TIMER13
SETB 21H.5
CLR 21H.6
CLR 21H.7
CLR 20H.6
RET
TIMER13:
CLR 20H.4
CLR 21H.0
SETB 21H.1
CLR 21H.2
CLR 21H.3
CLR 21H.4
RET
TIMER2:
JNB 21H.1,TIMER3
JNB 22H.0,TIMER20
CLR 22H.0
SETB 22H.1
RET
TIMER20:
JNB 22H.1,TIMER21
SETB 22H.0
CLR 22H.1
RET
TIMER21:
CLR 20H.4
CLR 21H.0
CLR 21H.1
SETB 21H.2
CLR 21H.3
CLR 21H.4
RET
TIMER3:
JNB 21H.2,TIMER4
JNB 22H.2,TIMER30
CLR 22H.2
SETB 22H.3
RET
TIMER30:
JNB 22H.3,TIMER31
SETB 22H.2
CLR 22H.3
RET
TIMER31:
CLR 20H.4
CLR 21H.0
CLR 21H.1
CLR 21H.2
SETB 21H.3
CLR 21H.4
RET
TIMER4:
JNB 21H.3,TIMER5
JNB 22H.4,TIMER40
CLR 22H.4
SETB 22H.5
RET
TIMER40:
JNB 22H.5,TIMER41
SETB 22H.4
CLR 22H.5
RET
TIMER41:
CLR 20H.4
CLR 21H.0
CLR 21H.1
CLR 21H.2
CLR 21H.3
SETB 21H.4
RET
TIMER5:
JNB 21H.4,TIMER6
JNB 22H.6,TIMER50
CLR 22H.6
SETB 22H.7
RET
TIMER50:
JNB 22H.7,TIMER51
SETB 22H.6
CLR 22H.7
RET
TIMER51:
SETB 20H.4
CLR 21H.0
CLR 21H.1
CLR 21H.2
CLR 21H.3
CLR 21H.4
RET
TIMER6:
JNB 20H.1,TIMER61
CLR 20H.1
SETB 20H.2
CLR 20H.3
RET
TIMER61:
JNB 20H.2,TIMER62
CLR 20H.1
CLR 20H.2
SETB 20H.3
RET
TIMER62:
JNB 20H.3,TIMER63
SETB 20H.1
CLR 20H.2
CLR 20H.3
RET
TIMER63:
CLR 20H.4
SETB 21H.0
CLR 21H.1
CLR 21H.2
CLR 21H.3
CLR 21H.4
RET

TOUT:
PUSH ACC
PUSH PSW
CLR ET0
CLR TR0
MOV A,#0B7H ;中断响应时间同步修正
ADD A,TL0 ;低8位初值修正
MOV TL0,A ;重装初值(低8位修正值)
MOV A,#3CH ;高8位初值修正
ADDC A,TH0 ;
MOV TH0,A ;重装初值(高8位修正值)
SETB TR0
SETB ET0
DJNZ R6,TRETURN
MOV R6,#20
CALL TUP
TRETURNOP PSW
POP ACC
RETI
FLASHTOUT:
PUSH ACC
PUSH PSW
MOV TH1,#3CH
MOV TL1,#0B0H
SETB TR1
DJNZ R5,FTRETURN
MOV R5,#5
CPL 20H.7
FTRETURNOP PSW
POP ACC
RETI
TUP:
INC R4;一秒到后,时间加累加
MOV A,R4
MOV B,#100
DIV AB
MOV A,#10;余数继续分离十位和个位
XCH A,B
DIV AB
SWAP A
MOV SDISP1,A
MOV A,B
SWAP A
MOV SDISP0,A
CJNE R4,#60,BACK
MOV R4,#00
MOV SDISP0,#00H
MOV SDISP1,#00H
INC R3;分加一
JNB 23H.1,NOTIMER01
CALL COMPARE
NOTIMER01:
JNB 23H.3,NOTIMER02
CALL COMPARE1
NOTIMER02:
JNB 23H.5,NOTIMER03
CALL COMPARE2
NOTIMER03:
JNB 23H.7,NOTIMER0
CALL COMPARE3
NOTIMER0:MOV A,R3
MOV B,#100
DIV AB
MOV A,#10;余数继续分离十位和个位
XCH A,B
DIV AB
SWAP A
MOV MDISP1,A
MOV A,B
SWAP A
MOV MDISP0,A
CJNE R3,#60,BACK
MOV R3,#00H
MOV MDISP0,#00H
MOV MDISP1,#00H
INC R2 ;时加一
JNB 23H.1,NOTIMER11
CALL COMPARE
NOTIMER11:
JNB 23H.3,NOTIMER12
CALL COMPARE1
NOTIMER12:
JNB 23H.5,NOTIMER13
CALL COMPARE2
NOTIMER13:
JNB 23H.7,NOTIMER1
CALL COMPARE3
NOTIMER1:MOV A,R2
MOV B,#100
DIV AB
MOV A,#10;余数继续分离十位和个位
XCH A,B
DIV AB
SWAP A
MOV HDISP1,A
MOV A,B
SWAP A
MOV HDISP0,A
CJNE R2,#24,BACK
MOV R2,#00
MOV HDISP0,#00H
MOV HDISP1,#00H
CALL WEEKSET;星期加一
CALL DATEUP
BACK: RET
DATEUP: SETB RS0;用到寄存器组1
INC R7;日加1
MOV A,R7
MOV B,#100
DIV AB
MOV A,#10;余数继续分离十位和个位
XCH A,B
DIV AB
SWAP A
MOV DADISP1,A
MOV A,B
SWAP A
MOV DADISP0,A
MOV A,R5;润年判断
JZ ISRUN
MOV B,#4
DIV AB
MOV A,B
JNZ NOTRUN
ISRUN:
CJNE R6,#2,MONTH1;是润年,当前月是否为二月
CJNE R7,#30,TODUBACK0;是润年的二月,到29天?
MOV R7,#1;日第一天
MOV DADISP0,#2FH
MOV DADISP1,#0FH
JMP MONTHUP;月份加一
TODUBACK0:JMP TODUBACK
NOTRUN:
CJNE R6,#2,MONTH1;不是润年是否当前月为二月
CJNE R7,#29,TODUBACK0;不是润年的二月,到28天?
MOV R7,#1
MOV DADISP0,#1FH
MOV DADISP1,#0FH
JMP MONTHUP
MONTH1:
JB 20H.0,BIGMONTH;大月吗?
CJNE R7,#31,TODUBACK0;小月是否到了月底
MOV R7,#1;日重新开始
MOV DADISP0,#1FH
MOV DADISP1,#0FH
JMP MONTHUP;跳到月加一
BIGMONTH:
CJNE R7,#32,TODUBACK;大月是否到了月底
MOV 7,#1;日重新开始
MOV DADISP0,#1FH
MOV DADISP1,#0FH
MONTHUP:INC R6;月加一
MOV A,R6
MOV B,#100
DIV AB
MOV A,#10;余数继续分离十位和个位
XCH A,B
DIV AB
SWAP A
MOV MODISP1,A
MOV A,B
SWAP A
MOV MODISP0,A
CJNE R6,#13,BIGSMALL;判断是否到了年底
MOV R6,#1;月重新开始
MOV MODISP0,#1FH
MOV MODISP1,#0FH
SETB 20H.0;一月大
JMP YEARUP
BIGSMALL:
CJNE R6,#8,OTHERCON;是八月,则仍为大月
SETB 20H.0
JMP TODUBACK
OTHERCON:CPL 20H.0;不是八月,大小月与上一个月取反
JMP TODUBACK
YEARUP: INC R5
MOV A,R5
MOV B,#100
DIV AB
MOV A,#10;余数继续分离十位和个位
XCH A,B
DIV AB
SWAP A
MOV YEDISP1,A
MOV A,B
SWAP A
MOV YEDISP0,A
CJNE R5,#100,TODUBACK
MOV R5,#00;新世纪
MOV YEDISP0,#0
MOV YEDISP1,#0
TODUBACK:
CLR RS0
RET
;时间显示子程序
TIMEDISP:
JNB 20H.6,BB0
JB 20H.7,SNODISP
BB0:
MOV A,SDISP0
CALL DISPSIX
; MOV A,20H
MOV A,SDISP1
CALL DISPFIF
SNODISP:
JNB 21H.5,BB1
JB 20H.7,MNODISP
BB1:
MOV A,MDISP0
CALL DISPFOR
MOV A,MDISP1
CALL DISPTHI
MNODISP:
JNB 21H.6,BB2
JB 20H.7,HNODISP
BB2:
MOV A,HDISP0
CALL DISPSEC
MOV A,HDISP1
CALL DISPFIR
HNODISP:RET
WEEKDISP:
JNB 21H.7,BB3
JB 20H.7,WNODISP
BB3:
MOV A,WEEKDISP0
ORL A,#0FH
ANL A,#0F7H
MOV P1,A
CALL DELAY
WNODISP:
RET

;闹铃显示子程序
TIMER0DISP:
JNB 22H.0,BB6;设定分标志位
JB 20H.7,TMN0DISP
BB6:
MOV A,TM0DISP0
CALL DISPFOR
MOV A,TM0DISP1
CALL DISPTHI
TMN0DISP:
JNB 22H.1,BB7
JB 20H.7,THNODISP
BB7:
MOV A,TH0DISP0
CALL DISPSEC
MOV A,TH0DISP1
CALL DISPFIR
THNODISP:
JNB 23H.1,TDRET;定时是否开启标志位
MOV P1,#1BH
CALL DELAY
TDRET:
RET
TIMER1DISP:
JNB 22H.2,BB61;设定分标志位
JB 20H.7,TMN1DISP
BB61:
MOV A,TM1DISP0
CALL DISPFOR
MOV A,TM1DISP1
CALL DISPTHI
TMN1DISP:
JNB 22H.3,BB71
JB 20H.7,THN1DISP
BB71:
MOV A,TH1DISP0
CALL DISPSEC
MOV A,TH1DISP1
CALL DISPFIR
THN1DISP:
JNB 23H.3,TD1RET;定时是否开启标志位
MOV P1,#2BH
CALL DELAY
TD1RET:
RET
;;;;;;;;;;;;;;;;;;;;;;;;
TIMER2DISP:
JNB 22H.4,BB62
JB 20H.7,TMN2DISP
BB62:
MOV A,TM2DISP0
CALL DISPFOR
MOV A,TM2DISP1
CALL DISPTHI
TMN2DISP:
JNB 22H.5,BB72
JB 20H.7,THN2DISP
BB72:
MOV A,TH2DISP0
CALL DISPSEC
MOV A,TH2DISP1
CALL DISPFIR
THN2DISP:
JNB 23H.5,TD2RET;定时是否开启标志位
MOV P1,#3BH
CALL DELAY
TD2RET:
RET

TIMER3DISP:
JNB 22H.6,BB63
JB 20H.7,TMN3DISP
BB63:
MOV A,TM3DISP0
CALL DISPFOR
MOV A,TM3DISP1
CALL DISPTHI
TMN3DISP:
JNB 22H.7,BB73
JB 20H.7,THN3DISP
BB73:
MOV A,TH3DISP0
CALL DISPSEC
MOV A,TH3DISP1
CALL DISPFIR
THN3DISP:
JNB 23H.7,TD3RET;定时是否开启标志位
MOV P1,#4BH
CALL DELAY
TD3RET:
RET
;;;;;;;;;;;;;;;;;;;
DATEDISP:
JNB 20H.1,BB88
JB 20H.7,MONDISP
BB88:
MOV A,DADISP0
CALL DISPSIX
MOV A,DADISP1
CALL DISPFIF
MONDISP:
JNB 20H.2,BB99
JB 20H.7,YENDISP
BB99:
MOV A,MODISP0
CALL DISPFOR
MOV A,MODISP1
CALL DISPTHI
YENDISP:
JNB 20H.3,BB89
JB 20H.7,YDISRET
BB89:
MOV A,YEDISP0
CALL DISPSEC
MOV A,YEDISP1
CALL DISPFIR
YDISRET:
RET

;定时比较子程序
COMPARE:
CLR 23H.0
SETB BEEPOUT
MOV A,TIMER0M;取第二组寄存器的R4,即定时分的存放值
CJNE A,03H,NOTEQU;与寄存器第一组的R3比较,分比较
MOV A,TIMER0H;取第二组寄存器的R2,即定时时的存入值
CJNE A,02H,NOTEQU;与寄存器第一组的R2比较,时比较
SETB 23H.0
CLR BEEPOUT
RET
COMPARE1:
CLR 23H.2
SETB BEEPOUT
MOV A,TIMER1M;取第二组寄存器的R4,即定时分的存放值
CJNE A,03H,NOTEQU;与寄存器第一组的R3比较,分比较
MOV A,TIMER1H;取第二组寄存器的R2,即定时时的存入值
CJNE A,02H,NOTEQU;与寄存器第一组的R2比较,时比较
SETB 23H.2;定时时间到,准备开启BEEP
CLR BEEPOUT
RET
COMPARE2:
CLR 23H.4
SETB BEEPOUT
MOV A,TIMER2M;取第二组寄存器的R4,即定时分的存放值
CJNE A,03H,NOTEQU;与寄存器第一组的R3比较,分比较
MOV A,TIMER2H;取第二组寄存器的R2,即定时时的存入值
CJNE A,02H,NOTEQU;与寄存器第一组的R2比较,时比较
SETB 23H.4;定时时间到,准备开启BEEP
CLR BEEPOUT
RET
COMPARE3:
CLR 23H.6
SETB BEEPOUT
MOV A,TIMER3M;取第二组寄存器的R4,即定时分的存放值
CJNE A,03H,NOTEQU;与寄存器第一组的R3比较,分比较
MOV A,TIMER3H;取第二组寄存器的R2,即定时时的存入值
CJNE A,02H,NOTEQU;与寄存器第一组的R2比较,时比较
SETB 23H.6;定时时间到,准备开启BEEP
CLR BEEPOUT
NOTEQU:
RET

;延时子程序
DELAY:
MOV R7,#05FH
DJNZ R7,$
RET

;显示

DISPFIR:
ORL A,#0FH
ANL A,#0F1H
MOV P1,A
CALL DELAY
RET

DISPSEC:
ORL A,#0FH
ANL A,#0F9H
MOV P1,A
CALL DELAY
RET

DISPTHI:
ORL A,#0FH
ANL A,#0F5H
MOV P1,A
CALL DELAY
RET

DISPFOR:
ORL A,#0FH
ANL A,#0FDH
MOV P1,A
CALL DELAY
RET

DISPFIF:
ORL A,#0FH
ANL A,#0F3H
MOV P1,A
CALL DELAY
RET

DISPSIX:
ORL A,#0FH
ANL A,#0FBH
MOV P1,A
CALL DELAY
RET

END
用到的几个 标志位:

20H.1 日设置标志

20H.2 月设置标志

20H.3 年设置标志

20H.4 日期显示标志

20H.6 秒设置标志

20H.7 设置时的显示状态标志(闪烁)

20H.0 大月标志

21H.0 时间显示标志

21H.1 闹铃1显示标志

21H.2 闹铃2显示标志

21H.3 闹铃3显示标志

21H.4 闹铃4显示标志

21H.5 分设置标志

21H.6 时设置标志

21H.7 星期设置标志

22H.0 闹铃1分设置标志

22H.1 闹铃1时设置标志

........

22H.6 闹铃4分设置标志

22H.7 闹铃4时设置标志

23H.0 闹铃1时间到标志

23H.1 闹铃1开关标志

........

23H.6 闹铃4时间到标志

23H.7 闹铃4开关标志

编程过程中遇到的问题是:

1.在按设置键的时候在按30次左右的时候,SP溢出,因此强制SP复位,不知有何影响 目前还没发现问题;

2.按键去抖动的时候没法消除,因此用检测按键是否弹起检测按键是否按下,这样的后果是不能连加。

3.程序比较大,2051刚够用。呵呵,有高手改下会小很多的。

时间比较准,15天左右快了大概有40多秒,跟电脑的时间比较。
印制板有误,仅供参考,我是用这个板子做的,做了些改动,段码连线应该下移一位,即,A-B,B-C.G不动,星期显示的由于管子不同,连线也大不相同,根据所用管子自己改动  


按键处理程序比较简单,有兴趣可以做做,2张单面板做

QQ|申请友链|手机版|小黑屋|最新贴|维修网 ( 粤ICP备09047344号

GMT+8, 2024-5-15 06:31 , Processed in 0.239287 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部