;------------------------------------------------------------------------------
KEY5:
CJNE A,#05H,POTHER ;开关机处理程序
JB KAI,GUAN
CLR MDI
CLR LED_M
SETB KAI
JMP MAIN ;返
GUAN: SETB LLOW ;关低中高
SETB MDI
SETB HIGHT
CLR KAI
JMP MAIN
POTHER:
JMP MAIN ;其他键的不处理直接返回
;==============================================================================
;T0定时中断处理
;==============================================================================
LP0:
PUSH ACC ;中断处理
PUSH PSW
MOV TH0,#3CH ;定时50MS
MOV TL0,#0B0H
DJNZ CUZHI,GRET ;1S到后向下执行
MOV CUZHI,#20 ;给50MS的寄存器给初值
INC SEN
MOV A,SEN
CJNE A,#60,GRET ;1分钟到后向下执行
INC MIN
MOV A,MIN
JB SJ01,LOOP_1H ;定时1小时的处理
JB SJ02,LOOP_2H ;定时2小时的处理
JB SJ03,LOOP_4H ;定时4小时的处理
CJNE A,#30,GRET ;半小时到后向下执行
MOV P1,#0FFH ;关断所有档位
MOV P0,#0FFH
SETB SJ01 ;将1H的标志位进行置 1
JMP GRET
LOOP_1H:
CJNE A,#60,GRET ;1小时到后向下执行
MOV P1,#0FFH
MOV P0,#0FFH
CLR SJ01 ;将1H的标志位进行置 0
SETB SJ02 ;将2H的标志位进行置 1
JMP GRET
LOOP_2H:
CJNE A,#60,GRET ;1小时到后向下执行
INC HOUR
MOV A,HOUR
CJNE A,#2,GRET
MOV P1,#0FFH ;关断
MOV P0,#0FFH
CLR SJ02 ;关断2H的标志位
SETB SJ03 ;将4H的标志位进行置位
JMP GRET ;中断返回
LOOP_4H:
CJNE A,#60,GRET ;1小时到后向下执行
INC HOUR
MOV A,HOUR
CJNE A,#4,GRET ;4小时到后向下执行
MOV P1,#0FFH ;关断
MOV P0,#0FFH
CLR SJ03 ;将4H的标志位进行清零
JMP GRET ;中断返回
GRET:
CLR TR0
POP PSW
POP ACC
RETI
;==============================================================================
;INT0中断处理程序:对接收数据进行接收
;==============================================================================
JISH_INT0:
PUSH ACC
PUSH PSW
CLR EX0 ;关断中断
MOV R6,#10 ;避开9MS时间的引导码
SB: CALL DY882US
JB P3.2,EXIT ;,EX检测为1时退出
DJNZ R6,SB ;检测为0时,引导码过
JNB P3.2,$; ;检测为0时,等待
ACALL DY4700US ;避开4。5MS时间的引导码
MOV R7,#16 ;避开系统码
JJJJA: JNB P3.2,$
LCALL DY882US
MOV C,P3.2 ;将P3.2送C中
JNC UUUA ;若C=0则转
LCALL DY1000US
UUUA: DJNZ R7,JJJJA
MOV R1,#MRD
MOV R2,#2
PP: MOV R3,#8 ;右移的次数
JJJJ: JNB P3.2,$ ;=0则等
LCALL DY882US
MOV C,P3.2 ;送C中
JNC UUU
LCALL DY1000US
UUU: MOV A,@R1 ;送存贮的首址
RRC A
MOV @R1,A ;送存贮单元中
DJNZ R3,JJJJ ;完成一个字节,没完则
INC R1
DJNZ R2,PP
MOV A,MRD
CPL A
CJNE A,31H,EXIT ;进行数据码和数据的反码进行比较
EXIT: POP PSW
POP ACC
SETB LREC ;置REC的标志位
SETB EX0 ;打开INT0的中断
RETI
;==============================================================================
;INT1的中断处理
;==============================================================================
KEY_INT1:
PUSH ACC
PUSH PSW
CLR EX1 ;关断INT1
LCALL SCANKEY
CALL KEY_K10 ;置高、中、低的标志位
CALL FENG_3 ;置风类的标志位
CALL JS ;置定时时间标志位
SETB LKEYON ;按键标志位
SETB EX1 ;打开中断位
POP PSW
POP ACC
RETI
;------------------------------------------------------------------------------
;定时的置位标志程序
;------------------------------------------------------------------------------
JS:
CLR SJ00
CLR SJ01
CLR SJ02
CLR SJ03
MOV A,MRD
CJNE A,#04H,KEY_K4D ;
INC TIME
MOV A,TIME
CJNE A,#5,KEY_K4
MOV TIME,#1
KEY_K4:
MOV A,TIME
CJNE A,#1,KEY_K4A ;等1则置ZRF
SETB SJ00
JMP KEY_K4D
KEY_K4A:
CJNE A,#2,KEY_K4B ;等2则置SMF
SETB SJ01
JMP KEY_K4D
KEY_K4B:
CJNE A,#3,KEY_K4C ;等3则置ZCF
SETB SJ02
JMP KEY_K4D
KEY_K4C:
CJNE A,#4,KEY_K4D ;等3则置ZCF
SETB SJ03
JMP KEY_K4D
KEY_K4D:
RET
;------------------------------------------------------------------------------
;高中低档的置标志位子程序
;------------------------------------------------------------------------------
KEY_K10:
CLR DANG01
CLR DANG02
CLR DANG03
MOV A,MRD
CJNE A,#01H,KEY_K1C ;
INC FENG
MOV A,FENG
CJNE A,#4,KEY_K1
MOV FENG,#1
KEY_K1:
MOV A,FENG
CJNE A,#1,KEY_K1A
SETB DANG01
JMP KEY_K1C
KEY_K1A:
CJNE A,#2,KEY_K1B
SETB DANG02
JMP KEY_K1C
KEY_K1B:
CJNE A,#3,KEY_K1C
SETB DANG03
JMP KEY_K1C
KEY_K1C:
RET
;------------------------------------------------------------------------------
;自然风、睡眠风、正常风的置标志位子程序
;------------------------------------------------------------------------------
FENG_3:
CLR ZRF
CLR SMF
CLR ZCF
MOV A,MRD
CJNE A,#03H,KEY_K3C ;
INC FLEI
MOV A,FLEI
CJNE A,#4,KEY_K3
MOV FLEI,#1
KEY_K3:
MOV A,FLEI
CJNE A,#1,KEY_K3A ;等1则置ZRF
SETB ZRF
JMP KEY_K3C
KEY_K3A:
CJNE A,#2,KEY_K3B ;等2则置SMF
SETB SMF
JMP KEY_K3C
KEY_K3B:
CJNE A,#3,KEY_K3C ;等3则置ZCF
SETB ZCF
JMP KEY_K3C
KEY_K3C:
RET
;==============================================================================
;扫描键盘程序。
;==============================================================================
SCANKEY:
MOV A,P1
CPL A
ANL A,#0FH
MOV R2,A ;将行号存入R2中
MOV P1,#0F0H ;将列置输入端
MOV A,P1
CPL A
ANL A,#0F0H ;取列号并存入A中
MOV R1,#03H ;置列初号
MOV R3,#03H ;置循环次数
CLR C
PINT01: RLC A ;取列号
JC PINT01
DEC R1
DJNZ R3,PINT01
PINT02: MOV A,R2 ;取行号
MOV R2,#00H
MOV R3,#03H ;置循环次数
PINT03: RRC A
JC PINT04
INC R2
DJNZ R3,PINT03
PINT04: MOV A,R2
CLR C
RLC A
RLC A
ADD A,R1
MOV MRD,A ;键号存于MRD单元中
RET
;==============================================================================
DY20MS:
MOV 53H,#8AH
DELAY_0:
PUSH 53H
DELAY_1:
DJNZ 53H,DELAY_1
POP 53H
DJNZ 53H,DELAY_0
RET
;==============================================================================
DY6S:
MOV R7,#12H
DEYLAY_00:
MOV 53H,#0DDH
DELAY_11:
PUSH 53H
DELAY_22:
DJNZ 53H,DELAY_22
POP 53H
DJNZ 53H,DELAY_11
DJNZ R7,DEYLAY_00
RET
;==============================================================================
DY8S: MOV R7,#16
DEYLAY_33:
MOV 53H,#0DDH
DELAY_44:
PUSH 53H
DELAY_55:
DJNZ 53H,DELAY_55
POP 53H
DJNZ 53H,DELAY_44
DJNZ R7,DEYLAY_33
RET
;==============================================================================
DY10S: MOV R7,#20
MOV R7,#12H
DEYLAY_66:
MOV 53H,#0DDH
DELAY_77:
PUSH 53H
DELAY_88:
DJNZ 53H,DELAY_88
POP 53H
DJNZ 53H,DELAY_77
DJNZ R7,DEYLAY_66
RET
;==============================================================================
DY882US:MOV R4,#20
D1: MOV R5,#20
DJNZ R5,$
DJNZ R4,D1
RET
DY1000US:
MOV R4,#2
D3: MOV R5,#248
DJNZ R5,$
DJNZ R4,D3
RET
DY4700US:
YS2: MOV R4,#10
D2: MOV R5,#235
DJNZ R5,$
DJNZ R4,D2
RET
END