?? yaokongrili.asm
字號:
MOV 44H,R1
MOV 65H,R2
MOV 45H,R2
MOV A,65H
CJNE A,#0,WAIT10 ;按鍵調整中消除小時高位0
MOV 65H,#0AH
MOV 45H,#0AH
WAIT10:
LCALL DISPLAY
JNB ADDNUM,WAIT10
AJMP SETG9
GDECHOUR:
MOV R7,HOUR ;小時減1
LCALL DEC1
MOV HOUR,A
CJNE A,#99H,GDECHOUR1
MOV HOUR,#23H
GDECHOUR1:
MOV DS1302_ADDR,#84H ;小時值送1302
MOV DS1302_DATA,HOUR
LCALL WRITE
MOV R0,HOUR
LCALL DIVIDE ;小時分離送顯示緩沖
MOV 64H,R1
MOV 44H,R1
MOV 65H,R2
MOV 45H,R2
MOV A,65H
CJNE A,#0,WAIT11 ;按鍵調整中消除小時高位0
MOV 65H,#0AH
MOV 45H,#0AH
WAIT11:
LCALL DISPLAY
JNB DECNUM,WAIT11
AJMP SETG9
SETG10:
SETB HOURFLASH ;調分時閃標志
GWAIT12:
LCALL DISPLAY
JNB MODE,GWAIT12
SETG11:
LCALL DISPLAY
JNB MODE,SETGOUT_1
JNB ADDNUM,GADDMINTUE
JNB DECNUM,GDECMINTUE
JNB DMODE,JUMPHOUR
AJMP SETG11
SETGOUT_1:
AJMP SETGOUT
JUMPHOUR:
LCALL DISPLAY
CLR HOURFLASH
JNB DMODE,JUMPHOUR
AJMP SETG9
GADDMINTUE:
MOV R7,MINUTE ;分加1
LCALL ADD1
MOV MINUTE,A
CJNE A,#60H,GADDMINTUE1
MOV MINUTE,#00H
GADDMINTUE1:
MOV DS1302_ADDR,#82H ;分值送1302
MOV DS1302_DATA,MINUTE
LCALL WRITE
MOV R0,MINUTE
LCALL DIVIDE ;分分離送顯示緩沖
MOV 62H,R1
MOV 42H,R1
MOV 63H,R2
MOV 43H,R2
CJNE A,#0,WAIT13
MOV 63H,#0AH
MOV 43H,#0AH
WAIT13:
LCALL DISPLAY
JNB ADDNUM,WAIT13
AJMP SETG11
GDECMINTUE:
MOV R7,MINUTE ;分減1
LCALL DEC1
MOV MINUTE,A
CJNE A,#99H,GDECMINTUE1
MOV MINUTE,#59H
GDECMINTUE1:
MOV DS1302_ADDR,#82H ;分值送1302
MOV DS1302_DATA,MINUTE
LCALL WRITE
MOV R0,MINUTE
LCALL DIVIDE ;分分離送顯示緩沖
MOV 62H,R1
MOV 42H,R1
MOV 63H,R2
MOV 43H,R2
MOV A,63H
CJNE A,#0,WAIT14
MOV 63H,#0AH
MOV 43H,#0AH
WAIT14:
LCALL DISPLAY
JNB DECNUM,WAIT14
AJMP SETG11
SETGOUT:
LCALL DISPLAY
JNB MODE,SETGOUT
MOV DS1302_ADDR,#80H
MOV DS1302_DATA,#00H ;1302晶振開始振蕩
LCALL WRITE
MOV DS1302_ADDR,#8EH
MOV DS1302_DATA,#80H ;禁止寫入1302
LCALL WRITE
CLR HOURFLASH
CLR DAYFLASH
CLR MONTHFLASH
CLR YEARFLASH
CLR CHOICE_ADJ
CLR ET1
CLR TR1 ;關閉定時器1
LJMP MAIN
;***********************************
;* 整點鳴叫程序 *
;***********************************
FENGMING:
MOV 27H,#250
MOV 2CH,#250
SA:
CPL BP
DJNZ 2CH,$
MOV 2CH,#200
CPL BP
DJNZ 2CH,$
MOV 2CH,#250
DJNZ 27H,SA
DJNZ 2FH,FENGMING
RET
;***********************************
;* 按鍵閃動調時程序 *
;***********************************
T1_INT:
CLR EA
PUSH ACC
PUSH PSW
GFLASH:
CPL KEEPFLASH
JB KEEPFLASH,GFLASH1
MOV 60H,40H ;顯示秒
MOV 61H,41H
MOV 62H,42H ;顯示分
MOV 63H,43H
MOV 64H,44H ;顯示小時
MOV 65H,45H
MOV 67H,47H ;顯示總天數
MOV 68H,48H
MOV 69H,49H
MOV 6AH,4AH ;顯示周次
MOV 6BH,4BH
MOV 70H,50H ;顯示日
MOV 71H,51H
MOV 72H,52H ;顯示農歷日
MOV 73H,53H
MOV 74H,54H ;顯示農歷月
MOV 75H,55H
MOV 76H,56H ;顯示星期
MOV 77H,57H ;顯示月
MOV 78H,58H
MOV 79H,59H ;顯示年
MOV 7AH,5AH
GFLASHOUT:
POP PSW
POP ACC
SETB EA
RETI
GFLASH1:
JB YEARFLASH,GFLASH2 ;調年閃
MOV 79H,#0AH
MOV 7AH,#0AH
MOV 76H,#0AH ;調年時星期閃
MOV 72H,#0AH ;農歷月日閃爍
MOV 73H,#0AH
MOV 74H,#0AH
MOV 75H,#0AH
MOV 67H,#0AH ;總天數閃爍
MOV 68H,#0AH
MOV 69H,#0AH
MOV 6AH,#0AH ;周次閃爍
MOV 6BH,#0AH
AJMP GFLASHOUT
GFLASH2:
JB MONTHFLASH,GFLASH3 ;調月閃
MOV 77H,#0AH
MOV 78H,#0AH
MOV 76H,#0AH ;調年時星期閃
MOV 72H,#0AH ;農歷月日閃爍
MOV 73H,#0AH
MOV 74H,#0AH
MOV 75H,#0AH
MOV 67H,#0AH ;總天數閃爍
MOV 68H,#0AH
MOV 69H,#0AH
MOV 6AH,#0AH ;周次閃爍
MOV 6BH,#0AH
LJMP GFLASHOUT
GFLASH3:
JB DAYFLASH,GFLASH4 ;調日閃
MOV 70H,#0AH
MOV 71H,#0AH
MOV 76H,#0AH ;調年時星期閃
MOV 72H,#0AH ;農歷月日閃爍
MOV 73H,#0AH
MOV 74H,#0AH
MOV 75H,#0AH
MOV 67H,#0AH ;總天數閃爍
MOV 68H,#0AH
MOV 69H,#0AH
MOV 6AH,#0AH ;周次閃爍
MOV 6BH,#0AH
LJMP GFLASHOUT
GFLASH4:
JB HOURFLASH,GFLASH5 ;調小時閃
MOV 64H,#0AH
MOV 65H,#0AH
LJMP GFLASHOUT
GFLASH5: ;調分鐘閃
MOV 62H,#0AH
MOV 63H,#0AH
LJMP GFLASHOUT
;*****************************
;* 秒燈閃爍程序 *
;*****************************
T0_INT:
PUSH ACC ;累加器入棧保護
PUSH PSW ;狀態字入棧保護
CLR ET0 ;關T0中斷允許
CLR TR0 ;關閉定時器T0
MOV A,#0B7H ;中斷響應時間同步修正
ADD A,TL0 ;低8位初值修正
MOV TL0,A ;重裝初值(低8位修正值)
MOV A,#3CH ;高8位初值修正
ADDC A,TH0 ;
MOV TH0,A ;重裝初值(高8位修正值)
SETB TR0 ;開啟定時器T0
CLR PSW.4
DJNZ SEC_FLA,INTT2OUT
MOV SEC_FLA,#10
CPL 10H
JB 10H,S1
SETB LED1 ; 秒指示燈閃爍
AJMP INTT2OUT
S1:
CLR LED1
INTT2OUT:
POP PSW ;出棧
POP ACC
SETB ET0
RETI
;*********************************
;* 寫1302程序 *
;*********************************
WRITE:
CLR EA
CLR SCLK
NOP
SETB RST
NOP
MOV A,DS1302_ADDR
MOV R4,#8
WRITE1:
RRC A ;送地址給1302
NOP
NOP
CLR SCLK
NOP
NOP
NOP
MOV IO,C
SETB SCLK ;送入地址在時鐘上升沿有效
NOP
NOP
NOP
NOP
DJNZ R4,WRITE1
CLR SCLK
NOP
MOV A,DS1302_DATA
MOV R4,#8
WRITE2:
RRC A
NOP ;送數據給1302,時鐘上升沿,數據輸入
CLR SCLK
NOP
NOP
MOV IO,C
NOP
NOP
NOP
SETB SCLK
NOP
NOP
DJNZ R4,WRITE2
CLR RST
SETB EA
RET
;*******************************
;* 讀1302程序 *
;*******************************
READ:
CLR EA
CLR SCLK
NOP
NOP
SETB RST
NOP
MOV A,DS1302_ADDR
MOV R4,#8
READ1:
RRC A
NOP
MOV IO,C
NOP
NOP
NOP
SETB SCLK ;送入地址在時鐘上升沿有效
NOP
NOP
NOP
CLR SCLK
NOP
NOP
DJNZ R4,READ1
MOV R4,#8
READ2:
CLR SCLK
NOP
NOP
NOP
MOV C,IO
NOP
NOP
NOP
NOP
NOP ;從ds1302中讀取數據,時鐘下降沿有效
RRC A
NOP
NOP
NOP
NOP
SETB SCLK
NOP
DJNZ R4,READ2
MOV DS1302_DATA,A
CLR RST
SETB EA
RET
;*********************************
;* 加1程序 *
;*********************************
ADD1:
CLR EA
MOV A,R7
ADD A,#01H
DA A
SETB EA
RET
;*********************************
;* 減1程序 *
;*********************************
DEC1:
CLR EA
MOV A,R7
ADD A,#99H
DA A
SETB EA
RET
;*********************************
;* 大小月加調整程序 *
;*********************************
MMONTH:
CLR EA
MOV R7,TIME_DAY ;大月日加1
LCALL ADD1
MOV TIME_DAY,A
CJNE A,#32H,MGOOUT
MOV TIME_DAY,#01H
MGOOUT:
SETB EA
RET
LMONTH:
CLR EA
MOV R7,TIME_DAY ;小月日加1
LCALL ADD1
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -