|
- AJMP TIME1_3
- TIME1_2:MOV STOREKEYNUMT1 , KEYNUMT1 ;加1后存储当前的KEYNUMT1的值
- ACALL ADDBUFF0 ;分加1
- TIME1_3:JNB P3.2,TIME1_1 ;若p3.2已关,则退出增时,否则继续循环
- 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 ;否则进入定闹设置
- MOV STOREKEYNUMT2 , KEYNUMT2 ;记录当前NUMT2的数据,以看下次有没改变
- TIME2_1:NOP
- MOV TH1 , #3CH ;T1置初值,进行100ms计时,用于调整时间
- MOV TL1 , #0B0H
- SETB ET1 ;开T1中断
- SETB PT1 ;设T1中断优先级最高
- 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 ;若按键已经未按,则退出循环
- CLR ET1
- CLR TR1
- MOV KEYNUMT2 , #00H
- MOV NUMT2 , #00H
- MOV R2 , #10 ; 直到p3.3 20s钟内都是未按,此时复原数据,即退出设置
- 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置初值,进行100ms计时,用于调整时间
- MOV TL1 , #0B0H
- PUSH ACC
- PUSH PSW
- CLR ET0
- CLR ET1 ;关T1中断
- MOV A , NUMT1
- INC A
- MOV NUMT1 , A ;中断一次则相应的增加NUMT1
- CJNE A , #5 , INTERT1NEXT ;每中断五次,即半秒,都增加KEYNUMT1
- MOV A ,KEYNUMT1
- INC A
- MOV KEYNUMT1 , A
- MOV NUMT1 , #00H ;NUMT1已经是5了,则处理过KEYNUMT1后,重置NUMT1
- INTERT1NEXT:NOP
- MOV A , NUMT2 ;中断一次则相应的增加NUMT1
- INC A
- MOV NUMT2 , A
- CJNE A, #5,ENDINTERT1 ;每中断五次,即半秒,都增加KEYNUMT1
- MOV A , KEYNUMT2
- INC A
- MOV KEYNUMT2 , A
- MOV NUMT2 , #00H ;NUMT1已经是5了,则处理过KEYNUMT1后,重置NUMT1
- ENDINTERT1: SETB ET1
- SETB ET0
- POP ACC
- POP PSW
- RETI
- ;**************
- ;** 整点报时 **
- ;**************
- ZDBS: MOV A , MBUFF ;在整点时,响半秒
- 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
- ;********************************
- ;**晚上显示子程序****************
- ;******************************** ;降低显示的占空比,数码管进入节能
- 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
复制代码
|
|