📄
字号:
SETB P2.0
MOV A,R0
ANL A,#0FH
MOVC A,@A+DPTR
MOV P1,A
CLR P2.1
ACALL DL ;送显时低位
SETB P2.1
MOV R1,ON_MINUTE
MOV A,R1
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV P1,A
CLR P2.2
ACALL DL ;送显分高位
SETB P2.2
MOV A,R1
ANL A,#0FH
MOVC A,@A+DPTR
MOV P1,A
CLR P2.3
ACALL DL ;送显分低位
SETB P2.3
RET
;*************************************************************************************************
; 关机时间显示子程序 *
;*************************************************************************************************
DISP3: MOV R0,OFF_HOUR
MOV DPTR,#TAB ;笔划段码表指针
MOV A,R0
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV P1,A
CLR P2.0
ACALL DL ;送显时高位
SETB P2.0
MOV A,R0
ANL A,#0FH
MOVC A,@A+DPTR
MOV P1,A
CLR P2.1
ACALL DL ;送显时低位
SETB P2.1
MOV R1,OFF_MINUTE
MOV A,R1
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV P1,A
CLR P2.2
ACALL DL ;送显分高位
SETB P2.2
MOV A,R1
ANL A,#0FH
MOVC A,@A+DPTR
MOV P1,A
CLR P2.3
ACALL DL ;送显分低位
SETB P2.3
RET
;************************************************************************************************************
; 延时0.16ms子程序 *
;************************************************************************************************************
DL: MOV 31H,#80
DL2: DJNZ 31H,DL2
RET
;****************************************************************************************************
; 延时10MS子程序,用於消除按键抖动而产生误动作 *
;****************************************************************************************************
DEL: MOV 32H,#200
DEL1: MOV 33H,#250
DEL2: DJNZ 33H,DEL2
DJNZ 32H,DEL1
RET
;*************************************************************************************************************
; 按键中断处理子程序 *
;*************************************************************************************************************
INTEX0: PUSH ACC ;保护现场
PUSH PSW
CLR EX0 ;关外部中断INT0
JB K1,$ ;判断K1按下否,未按则等待,K1按下
;LED1亮, LED2熄灭
DISP1_0: ACALL DISP1 ;
JNB K1,DISP1_0 ;等待K1释放
ACALL DEL ;K1按下开机指示LED1亮,LED2熄灭
PH4: CLR P3.1 ;LED1亮
SETB P3.0 ;LED2熄灭
PH0: ACALL DISP1 ;调当前时间显示子程
JB K2,PH01 ;判K2按下否,未按则转到判K3
DISP1_1: ACALL DISP1 ;
JNB K2,DISP1_1 ;等待K2释放
ACALL DEL
MOV R0,C_HOUR
MOV A,#01H
ADD A,R0
DA A
MOV C_HOUR,A ;当前时间时加1
CJNE A,#24H,PH0 ;超过24吗(超过清0)
MOV C_HOUR,#0
PH01: JB K3,PH1 ;判K3按下否,未按则转判K4
DISP1_2: ACALL DISP1 ;
JNB K3,DISP1_2 ;等待K3释放
ACALL DEL
MOV R0,C_MINUTE
MOV A,#01H
ADD A,R0
DA A
MOV C_MINUTE,A ;当前时间分加1
CJNE A,#60H,PH0 ;超过60吗(超过清0)
MOV C_MINUTE,#0
PH1: JB K4,PH10 ;判K4按下否,未按则转到判K1
DISP1_3: ACALL DISP1 ;
JNB K4,$ ;等待K4释放
ACALL DEL
AJMP TEND ;K4按下,转启动
PH10: JB K1,PH0 ;判K1按下否,未按则再
DISP1_4: ACALL DISP1 ;
JNB K1,DISP1_4 ;等待K1释放
ACALL DEL ;K1按下开机指示LED1熄灭,LED2亮
SETB P3.1 ;LED1熄灭
CLR P3.0 ;LED2亮
PH2: ACALL DISP2 ;调开机时间显示子程序
JB K2,PH201 ;判K2按下否,未按则转到判K3
DISP2_1: ACALL DISP2 ;
JNB K2,DISP2_1 ;等待K2释放
MOV R0,ON_HOUR
MOV A,#01H
ADD A,R0
DA A
MOV ON_HOUR,A ;开机时间时加1
CJNE A,#24H,PH2 ;超过24吗(超过清0)
MOV ON_HOUR,#0
PH201: JB K3,PH210 ;判K3按下否,未按则转判K4
DISP2_2: ACALL DISP2 ;
JNB K3,DISP2_2 ;等待K3释放
ACALL DEL
MOV R0,ON_MINUTE
MOV A,#01H
ADD A,R0
DA A
MOV ON_MINUTE,A ;开机时间分加1
CJNE A,#60H,PH2 ;超过60吗(超过清0)
MOV ON_MINUTE,#0
PH210: JB K1,PH2 ;判K1按下否,未按则再
DISP2_3: ACALL DISP2 ;
JNB K1,DISP2_3 ;等待K1释放
ACALL DEL ;K1按下关机指示LED1. LED2亮
CLR P3.0 ;LED1亮
CLR P3.1 ;LED2亮
PH3: ACALL DISP3 ;调关机时间显示子程序
JB K2,PH301 ;判K2按下否,未按则转到判K3
DISP3_1: ACALL DISP3 ;
JNB K2,DISP3_1 ;等待K2释放
ACALL DEL
MOV R0,OFF_HOUR
MOV A,#01H
ADD A,R0
DA A
MOV OFF_HOUR,A ;关机时间时加1
CJNE A,#24H,PH3 ;超过24吗(超过清0)
MOV OFF_HOUR,#0
PH301: JB K3,PH310 ;判K3按下否,未按则转判K4
DISP3_2: ACALL DISP3 ;
JNB K3,DISP3_2 ;等待K3释放
ACALL DEL
MOV R0,OFF_MINUTE
MOV A,#01H
ADD A,R0
DA A
MOV OFF_MINUTE,A ;关机时间分加1
CJNE A,#60H,PH3 ;超过60吗(超过清0)
MOV OFF_MINUTE,#0
PH310: JB K1,PH3 ;判K1按下否,未按则再
DISP3_3: ACALL DISP3 ;
JNB K1,DISP3_3 ;等待K1释放
ACALL DEL
AJMP PH4 ;转当前时间调整
TEND: SETB EX0 ;开INT0中断
SETB TR0 ;允许T0计数
SETB 01H ;置00H为1,启动计数
SETB ET0 ;允许T0中断
SETB P3.7 ;置P3.7口为1
POP PSW ;恢复现场
POP ACC
RETI ;中断返回
;**********************************************************************
;;;;;;;;;;;;;;;;;;;;;;;;; 遥控接收程序 ;;;;;;;;;;;;;;;;;;;;;;;
;**********************************************************************
;采用中断接收
INTEX1:
CLR EA ;
CLR TR1 ;
JNB SI,$ ;
NOP
NOP
JNB SI,$
SETB TR1 ;
MOV R2,TH1 ;取T0计数次数
MOV R3,TL1
MOV R4,#00H ;0096H~03B6H为数据窗口0
MOV R5,#96H ;窗口0的下限
LCALL SUB0 ;计数值小于00FAH吗?
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -