|
- AJMP TIME1_3
- TIME1_2:MOV STOREKEYNUMT1 , KEYNUMT1 ;加1后存儲當(dāng)前的KEYNUMT1的值
- ACALL ADDBUFF0 ;分加1
- TIME1_3:JNB P3.2,TIME1_1 ;若p3.2已關(guān),則退出增時,否則繼續(xù)循環(huán)
- CLR ET1
- CLR PT1
- CLR TR1
- AJMP START1
- ;********************
- ;*****時間增1分******
- ;********************
- ADDBUFF0:MOV A , MBUFF ; 若按鍵小于1s,則分增1
- ADD A , #1
- DA A
- MOV MBUFF , A
- ANL A , #0FH
- MOV MBUFF1 , A
- MOV A , MBUFF
- SWAP A
- ANL A , #0FH
- MOV MBUFF2 , A
- MOV A , MBUFF
- CJNE A , #60H , ADDBUFF1
- MOV MBUFF , #00H
- MOV MBUFF2 , #00H
- MOV MBUFF1 , #00H
- MOV A , HBUFF ;時增1
- ADD A , #1
- DA A
- MOV HBUFF , A
- ANL A , #0FH
- MOV HBUFF1 , A
- MOV A , HBUFF
- SWAP A
- ANL A , #0FH
- MOV HBUFF2 , A
- MOV A , HBUFF
- CJNE A , #24H , ADDBUFF1 ;若沒到24小時,則不必初值置0
- MOV HBUFF , #00H
- MOV HBUFF2 , #00H
- MOV HBUFF1 , #00H
- ADDBUFF1:RET
- ;*********************************
- ;*int1中斷子程序******************
- ;*********************************
-
- ADJUSTTIME2: NOP
- ACALL DL100MS
- MOV C , P3.3
- JC TIME2_6 ;如果(P3.3按鍵<100ms以上) 則不做處理
- MOV KEYNUMT2 , #00H ;否則進(jìn)入定鬧設(shè)置
- MOV STOREKEYNUMT2 , KEYNUMT2 ;記錄當(dāng)前NUMT2的數(shù)據(jù),以看下次有沒改變
- TIME2_1:NOP
- MOV TH1 , #3CH ;T1置初值,進(jìn)行100ms計時,用于調(diào)整時間
- MOV TL1 , #0B0H
- SETB ET1 ;開T1中斷
- SETB PT1 ;設(shè)T1中斷優(yōu)先級最高
- SETB TR1 ;允許T1計時
- TIME2_2:ACALL ALARMDISPLAY
- MOV A , KEYNUMT2
- CJNE A , STOREKEYNUMT2 ,TIME2_3
- AJMP TIME2_4
- TIME2_3: MOV STOREKEYNUMT2 , KEYNUMT2
- MOV A , ALARMMBUFF ; 若按鍵小于1s,則分增1
- ADD A , #1
- DA A
- MOV ALARMMBUFF , A
- ANL A , #0FH
- MOV ALARMMBUFF1 , A
- MOV A , ALARMMBUFF
- SWAP A
- ANL A , #0FH
- MOV ALARMMBUFF2 , A
- MOV A , ALARMMBUFF
- CJNE A , #60H , TIME2_4
- MOV ALARMMBUFF , #00H
- MOV ALARMMBUFF2 , #00H
- MOV ALARMMBUFF1 , #00H
- MOV A , ALARMHBUFF ;時增1
- ADD A , #1
- DA A
- MOV ALARMHBUFF , A
- ANL A , #0FH
- MOV ALARMHBUFF1 , A
- MOV A , ALARMHBUFF
- SWAP A
- ANL A , #0FH
- MOV ALARMHBUFF2 , A
- MOV A , ALARMHBUFF
- CJNE A , #24H , TIME2_4 ;若沒到24小時,則初值不必置0
- MOV ALARMHBUFF , #00H
- MOV ALARMHBUFF2 , #00H
- MOV ALARMHBUFF1 , #00H
- TIME2_4:NOP
- JNB P3.3,TIME2_2 ;若按鍵已經(jīng)未按,則退出循環(huán)
- CLR ET1
- CLR TR1
- MOV KEYNUMT2 , #00H
- MOV NUMT2 , #00H
- MOV R2 , #10 ; 直到p3.3 20s鐘內(nèi)都是未按,此時復(fù)原數(shù)據(jù),即退出設(shè)置
- TIME2_7:MOV R1 , #200
- TIME2_5:ACALL ALARMDISPLAY
- ACALL DL1MS
- JNB P3.3 , TIME2_1
- DJNZ R1 , TIME2_5
- DJNZ R2 , TIME2_7
- TIME2_6:CLR ET1
- CLR PT1
- CLR TR1
- LJMP START1
- ;***********************************
- ;**T1中斷子程序*********************
- ;***********************************
- INTERT1:NOP
- MOV TH1 , #3CH ;T1置初值,進(jìn)行100ms計時,用于調(diào)整時間
- MOV TL1 , #0B0H
- PUSH ACC
- PUSH PSW
- CLR ET0
- CLR ET1 ;關(guān)T1中斷
- MOV A , NUMT1
- INC A
- MOV NUMT1 , A ;中斷一次則相應(yīng)的增加NUMT1
- CJNE A , #5 , INTERT1NEXT ;每中斷五次,即半秒,都增加KEYNUMT1
- MOV A ,KEYNUMT1
- INC A
- MOV KEYNUMT1 , A
- MOV NUMT1 , #00H ;NUMT1已經(jīng)是5了,則處理過KEYNUMT1后,重置NUMT1
- INTERT1NEXT:NOP
- MOV A , NUMT2 ;中斷一次則相應(yīng)的增加NUMT1
- INC A
- MOV NUMT2 , A
- CJNE A, #5,ENDINTERT1 ;每中斷五次,即半秒,都增加KEYNUMT1
- MOV A , KEYNUMT2
- INC A
- MOV KEYNUMT2 , A
- MOV NUMT2 , #00H ;NUMT1已經(jīng)是5了,則處理過KEYNUMT1后,重置NUMT1
- ENDINTERT1: SETB ET1
- SETB ET0
- POP ACC
- POP PSW
- RETI
- ;**************
- ;** 整點(diǎn)報時 **
- ;**************
- ZDBS: MOV A , MBUFF ;在整點(diǎn)時,響半秒
- JNZ ZDBSEND
- MOV A , SBUFF
- CJNE A , #3CH , ZDBSEND
- CLR P3.2
- ACALL DL0FIVE
- SETB P3.2
- ZDBSEND:RET
- ;**************
- ;**定鬧顯示子程序**
- ;**************
- ALARMDISPLAY: MOV P1 ,#0FFH ;使時的十位亮
- MOV A , ALARMHBUFF2
- MOVC A , @A+DPTR
- SETB ACC.7
- MOV P1 , A
- CLR P3.0
- ACALL DL1MS
- SETB P3.0
- MOV A , ALARMHBUFF1 ;使時的個位亮
- MOVC A , @A+DPTR
- MOV C , DP
- MOV ACC.7 , C
- MOV P1 , A
- CLR P3.1
- ACALL DL1MS
- SETB P3.1
- MOV A ,ALARMMBUFF2 ;使分的十位亮
- MOVC A , @A+DPTR
- MOV C , DP
- MOV ACC.7 , C
- MOV P1 , A
- CLR P3.4
- ACALL DL1MS
- SETB P3.4
- MOV A , ALARMMBUFF1 ;使時的個位亮
- MOVC A , @A+DPTR
- SETB ACC.7
- MOV P1,A
- CLR P3.5
- ACALL DL1MS
- SETB P3.5
- RET
- ;********************************
- ;**晚上顯示子程序****************
- ;******************************** ;降低顯示的占空比,數(shù)碼管進(jìn)入節(jié)能
- NIGHTDISPLAY: NOP
- MOV P1 ,#0FFH
- MOV A , HBUFF2
- MOVC A , @A+DPTR
- SETB ACC.7
- MOV P1 , A
- CLR P3.0
- ACALL DL1MS ;亮1ms
- SETB P3.0
- ACALL DL1MS
- ACALL DL1MS ;暗2ms
- MOV A , HBUFF1
- MOVC A , @A+DPTR
- MOV C , DP
- MOV ACC.7 , C
- MOV P1 , A
- CLR P3.1
- ACALL DL1MS
- SETB P3.1
復(fù)制代碼
|
|