📄 遥控开关程序.asm
字号:
ORG 0000H
ljmp kkp ;摇控器采用常见的M50462AP遥控器
ORG 0003H
LJMP LOOP
kkp:
MOV P2,#0ffH ;主程序开放中断
SETB EA
SETB EX0 ;开放外部中断0
SETB IT0 ;外部中断0下降沿触发有效
MOV 50H,#00H
mov 51h,#00h
mov r1,#0ah
rp:Cpl P3.5 ;让蜂鸣器响一会儿指示已经接通电源
lcall d3s
djnz r1,rp
clr p3.5
LP2: MOV A,50H ;定时初始化
CJNE A,#00H,LP
SJMP LP2
LP: LCALL D60S ;调用1 分钟程序
DJNZ 50H,LP ;判断定时到了没有
MOV A,51H
cjne A,#00H,RP2
SJMP LP2
RP2:MOV R1,#08H
RP1:CLR P3.3 ;定时结束
CLR P3.5 ;发光二极管闪烁8次
LCALL D3S
SETB P3.3 ;蜂鸣器响8次
SETB P3.5
LCALL D3S
LCALL D3S
DJNZ R1,RP1
MOV P2,#0FFH ;关闭电风扇电源
MOV 50H,#00H ;定时清零
MOV P1,#0FFH ; 关闭档位显示,数码管不显示
MOV P0,#0FFH ;关闭定时指示灯
clr P3.5
SJMP LP2
LOOP:CLR EX0 ;中断子程序,关闭外部中断
MOV R0,#30H ;
MOV R3,#00H ;8位计数清零
LCALL IRIN ;调用红外判断程序
SETB EX0 ;开放中断
RETI ;中断返回
IRIN:JNB P3.2,ILL2 ;等待红外信号出现
RET
ILL2:JB P3.2,IRIN
LCALL DEL ;延迟一次
JB P3.2,IRIN
ILL:JB P3.2,I5 ;确认红外信号出现
SJMP ILL
I5:MOV R2,#00H ;脉冲宽度计数
L1:LCALL DEL ;0.1ms计数
JNB P3.2,L3 ;等待红外信号变为高电平
INC R2
CJNE R2,#1DH,L1
RET
L3:MOV A,#13 ;判断0和1装入数据
CLR C
SUBB A,R2 ;判断高低位
MOV A,@R0
RRC A
MOV @R0,A
INC R3
CJNE R3,#8,ILL ;8位用户码接收完了吗
MOV R3,#00H
INC R0
ILL1:JB P3.2,I51 ;接收8位功能码
SJMP ILL1
I51:MOV R2,#00H
L11:LCALL DEL ;调用0.1MS延时程序
JNB P3.2,L31
INC R2
CJNE R2,#1DH,L11
kp:RET
L31:MOV A,#13 ;判断0和1装入数据
CLR C
SUBB A,R2
MOV A,@R0
RRC A
MOV @R0,A
INC R3
CJNE R3,#8,ILL1 ;8位功能码接收完了吗
;*************************
MOV A,30H ;判断用户码=47H吗
CJNE A,#47H,KP
CLR P3.3 ;蜂鸣器响一下
LCALL D3S
SETB P3.3
MOV A,31H ;将31H的功能码送入A
CJNE A,#00H,KP1 ;判断功能码进入相应的子程序
MOV P2,#0FEH ;1档(最慢)
MOV P1,#0F9H ;数码管显示1
SETB P3.5
LCALL D3S
RET
KP1:CJNE A,#08H,KP2 ;2档
MOV P2,#0FDH
MOV P1,#0a4h ;数码管显示2
SETB P3.5
LCALL D3S
RET
KP2:CJNE A,#10H,KP3 ;3档
MOV P2,#0FBH
MOV P1,#0b0h ;数码管显示3
SETB P3.5
LCALL D3S
RET
KP3:CJNE A,#18H,KP4 ;4档
MOV P2,#0F7H
MOV P1,#99h ;数码管显示4
SETB P3.5
LCALL D3S
RET
KP4:CJNE A,#20H,KP5 ;5档(最快)
MOV P2,#0EFH
MOV P1,#92h ;数码管显示5
SETB P3.5
LCALL D3S
RET
KP5:CJNE A,#22H,KP6 ;定时判断
MOV A,51H
CJNE A,#01H,OP6
MOV P0,#0FDH ;音量增大键第二次按下定时30分钟
mov 50h,#30
MOV 51H,#02H
lcall D3S
RET
OP6:jc OP7
CJNE A,#02H,OP8 ;音量增大键第三次按下定时45分钟
MOV P0,#0FBH
MOV 50H,#45
MOV 51H,#03H
LCALL D3S
RET
OP7:MOV P0,#0FEH ;音量增大键第一次按下定时15分钟
MOV 50H,#15
MOV 51H,#01H
LCALL D3S
RET
OP8:CJNE A,#03H,OP9 ;音量增大键第四次按下定时60分钟
MOV P0,#0FAH
MOV 50H,#60
MOV 51H,#04H
LCALL D3S
RET
OP9:CJNE A,#04H,OP10 ;音量增大键第五次按下定时90分钟
MOV P0,#0F8H
MOV 50H,#90
MOV 51H,#05H
LCALL D3S
RET
OP10:MOV P0,#0FFH ;音量增大键第六次按下取消定时
MOV 50H,#01H
mov 51H,#00H
lcall d3s
ret
kp6:CJNE A,#02H,KP8 ;红色关机键按下时关机
MOV P1,#0FFH
MOV P2,#0FFH
CLR P3.5
MOV P0,#0FFH
MOV 50H,#01H
mov 51h,#00h
LCALL D3S
RET
KP8:RET
DEL:MOV R5,#01H ;时间1ms
DELAY1:MOV R6,#02H
E1:MOV R7,#11H
E2:DJNZ R7,E2
DJNZ R6,E1
DJNZ R5,DELAY1
RET
D3S:MOV R4,#01H ;时间260MS
TP14: MOV R6,#0FFH
TP12: MOV R5,#0FFH
TP11: NOP
NOP
DJNZ R5,TP11
DJNZ R6,TP12
DJNZ R4,TP14
RET
D60S:MOV R4,#0C0H ;1分钟
QP3:MOV R6,#0ECH
QP2:MOV R5,#0FDH
QP1: NOP
NOP
NOP
DJNZ R5,QP1
DJNZ R6,QP2
DJNZ R4,QP3
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -