三档八小时遥控电风扇控制电路和单片机程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
三档八小时遥控电风扇控制电路和单片机程序
-----广东、五华、李标清
大家都知道风扇是每家每户都不可缺少一个电器用品,现在已到夏天了气温渐渐上升用鸿运扇(或台扇)原来的机械式定时器,由于有些老人家说太噪很难入睡,普通型的定时器最长定时时间1小时,特别型的好像2小时经常都是睡到半梦半醒又被热醒了,只好拿风扇来“开刀”了,把它改成遥控三档八小时控制风扇,哈哈!如果朋友们也有这种困扰就不要等了马上开始行动吧!硬件联接与功能简介如下:
;*****************************风扇控制程序*******************************
;用P3.0\P3.1\P3.7 分别控制风速定时关机
;P3.3\P3.4\P3.5分别为风速1 风速2 风速3
;P1.0~P1.7分别接共阳极数码管A~H指示----->定时:\1H~8H定时\ 风速: 一~二~三
;P1.7也作开机OUT控制,全部都是低电平有效。
;开发软件:TKStudio V3.2.5 (2011-05-22)
;注意晶体: 4MHZ MCU:89C2051系列
;************************************************************************
电原理图如下:
电路板实物图:
电路工作原理:
市电220V/50HZ经J1进入后按下SW0开机键(或RY1的开关组,开机后由主控芯片控制保持RY1自锁)后通过R2\C0(泄放电阻R10)限流\D1\D2\ZD1\C2整流滤波稳压后得到12V的直流电压(用来给RY1提供工作电压用),再经Q4\ZD2稳压为5V直流给CPU AT89C2051 供电。
开机后默认为风速一档DS1显示为中文的一,不定时状态(即风扇一直工作到按下SW3关机键或市电停止为止,当然风扇马达有故障也会)每按下SW2定时按键一次DS1显示值会自动加一,定时时间也相对应的加一(可从1~8,再到不显示阿拉伯数字,循环。
当不显示阿拉伯数字时表示长通不定时),如果风扇是工作在定时自动关机状态时DS1会以约1秒钟的时间来切换当前风速与定时的时间值,显示阿拉伯数字对
(此应定时时间如果为1小时即1小时后风扇会自动停止工作,为了低碳包括整个电路都会停止工作,
按键可以通过红外遥控器来实现)。
如果每按下SW1风速按键一次则同样DS1显示值会加一(从中文的一~ 三,循环),分别对应控制风扇马达的1~3档(此按键可以通过红外遥控器来实现)。
如果控按下SW3则整个电路都会停止工作,(此按键可以通过红外遥控器来实现)。
此次设计的遥控器要求是NEC编码格式的遥控器,且不具备遥控码学习工能。
故仿制的朋友要在原程序里面更改遥控器解码部分的用户码与按键的操作码,需要改动的部分在原程序里面有详细的注释。
与本文所提供的HEX文件对应的遥远控器可以用以(众合RM-139C型万能电视机遥控器的代码为000时),遥控器上的POWER键对应本电路的SW3关机键,睡眠键对应本电路的SW2定时键,回看键对应本电路的SW1风速键。
#1:本电路带有强电请仿制的朋友注意安全。
;*****************************风扇控制程序*******************************
;用P3.0\P3.1\P3.7 分别控制风速定时关机
;P3.3\P3.4\P3.5分别为风速1 风速2 风速3
;P1.0~P1.7分别接共阳极数码管A~H指示----->定时:\1H~8H定时\ 风速: 一~二~三
;P1.7也作开机OUT控制,全部都是低电平有效。
;开发软件:TKStudio V3.2.5 (2009-12-18)
;注意晶体: 4MHZ MCU:89C2051系列
;程序设计:广东、五华、李标清2011-05-22
;************************************************************************
;
;代码的特征:
; 1. HT6221键码的形成
; 当一个键按下超过36ms 振荡器使芯片激活如果这个键按下且延迟大约108ms,
; 这108ms 发射代码由一个起始码9ms, 一个结果码4.5ms, 低8 位地址码9ms~18ms,
; 高8 位地址码9ms~18ms,8 位数据码9ms~18ms 和这8 位数据的反码9ms~18ms 组成
; 如果键按下超过108ms 仍未松开接下来发射的代码连发代码将仅由起始码9ms
; 和结束码2.5ms 组成.
; 2.代码格式以接收代码为准接收代码与发射代码反向
;
;888888888888888888888888888888888888888888888888888888888888888888888888
ORG 0000H
SwFengSu BIT P3.0 ;风速
SwTime BIT P3.1 ;定时
SwOff BIT P3.7 ;关机
FengSu1 BIT P3.3 ;风速1
FengSu2 BIT P3.4 ;风速2
FengSu3 BIT P3.5 ;风速3
JMP START
ORG 0003H
JMP YAO_KONG
ORG 000BH ;定时器0入口
JMP TIME ;中断程序
ORG 0030H
START:
MOV SP,#60H
MOV P3,#0F7H ;11110111B ;默认为风速1
MOV 22H,#09H ;使其取得一.的显示码
MOV R3,#00H
MOV R2,#00H
MOV R4,#00H
CLR 20H.0 ;开关标志位
MOV TMOD,#01H ;定时器0工作于方式1
MOV TH0,#HIGH(65536-50000)
MOV TL0,#LOW(65536-50000);50MS(当4mhz晶体时为150MS)
SETB EA ;开总中断
SETB ET0 ;定时器0中断允许
SETB EX0
SETB IT0
LOOP:
JNB 20H.0,ON ;不是关机即转ON处
OFF: MOV P1,#8EH ;显示F且P1.7为高即关机
MOV P3,#0FFH ;风速全部关
JMP OFF
ON: MOV DPTR,#TABLE
MOV A,R4 ;
JB 20H.1,ON1 ;如果20H.1=1 即显示定时值
MOV A,22H ;使其取得一.二.三.的显示码
ON1:
MOVC A,@A+DPTR
MOV P1,A ;送P1口显示
CALL SW_OFF
CALL SW_FengSu
CALL SW_Time
JMP LOOP
SW_OFF:
JB SwOff,SWO ;是否有关机键压下
CALL DELAY ;防抖
JB SwOff,SWO
JNB SwOff,$
SW1:
SETB 20H.0 ;取反即为高电平故关闭总电源
SWO:
RET
SW_FengSu:;调风速键
JB SwFengSu,LAO ;是否有调风速键压下
CALL DELAY
JB SwFengSu,LAO
LA1: MOV PSW,#00H
CLR 20H.1 ;标志位置0 显示风速值
SETB 20H.2 ;延时轮流显示标志位
MOV 21H,#8 ;延时轮流显示
INC R3
JNB SwFengSu,$
C01:;风速2
CJNE R3,#01H,C02
MOV 22H,#0AH ;使其取得二.的显示码
SETB F engSu1 ;关风速1
CALL DELAY ;延时防抖14946us
CALL DELAY ;延时防抖14946us
CLR FengSu2 ;开风速2
JMP LAO
C02: ;风速3
CJNE R3,#02H,C03
MOV 22H,#0BH ;使其取得三.的显示码
SETB F engSu2 ;关风速2
CALL DELAY ;延时防抖14946us
CALL DELAY ;延时防抖14946us
CLR FengSu3 ;开风速3
JMP LAO
C03: ;风速1
MOV 22H,#09H ;使其取得一.的显示码
SETB F engSu3 ;关风速3
CALL DELAY ;延时防抖14946us
CALL DELAY ;延时防抖14946us
CLR FengSu1 ;开风速1
MOV R3,#00H
LAO: RET
SW_Time:;调定时键
JB SwTime,LBO ;是否有定时键压下
CALL DELAY
JB SwTime,LBO
LB:
MOV PSW,#00H
SETB 20H.1 ;标志位置1 显示定时值
SETB 20H.2 ;延时轮流显示/风速标志位置1
JNB SwTime,$
MOV 21H,#8 ;延时轮流显示
MOV R7,#00H
MOV R6,#00H
MOV R5,#00H
INC R4 ;定时时间加1 小时
CJNE R4,#09H,C04 ;如果大于8即长通不会定时关机
CLR 20H.1 ;标志位置0 显示风速值
MOV R4,#00H
CLR TR0
RET
C04:
SETB TR0
LBO:
RET
DELAY:;延时防抖14946us
MOV R1,#10 ;1*3=3
DD: MOV R0,#248 ;1*3=3
DJNZ R0,$ ;2*3*248*10=14880
DJNZ R1,DD ;2*3*10=60
RET
TIME:
PUSH ACC
PUSH PSW
MOV TH0,#HIGH(65536-50000)
MOV TL0,#LOW(65536-50000);重置初定时值
INC R7
INC R5
CJNE R5,#7,TT1 ;150MS*7=1S到了吗?
MOV R5,#00H
JNB 20H.2,TT2 ;延时轮流显示/风速标志位置
DJNZ 21H,TT1
CLR 20H.2
TT2:
CPL 20H.1 ;标志位置0 显示风速值
TT1:
CJNE R7,#200,TT ;150MS*200=30S到了吗?
MOV R7,#00H
INC R6
CJNE R6,#120,TT ;30S*120=3600S到了吗?
MOV R6,#00H
DJNZ R4,TT ;将R4的值减1
SETB 20H.0 ;取反即为高电平故关闭总电源TT: POP PSW
POP ACC
RETI
YAO_KONG:
PUSH PSW
PUSH ACC
CLR EA
MOV PSW,#10H
IR: MOV R6,#10
SB: ACALL DELAY882
JB P3.2,REM_BAK
DJNZ R6,SB
JNB P3.2,$
ACALL DELAY2400
JNB P3.2,REM_BAK
ACALL DELAY2400
MOV R1,#1AH
MOV R2,#4
PP: MOV R3,#8
JJ: JNB P3.2,$
LCALL DELAY882
MOV C,P3.2
JNC UUU
LCALL DELAY1000
UUU:
MOV A,@R1
RRC A
MOV @R1,A
DJNZ R3,JJ
INC R1
DJNZ R2,PP
DAN_JI:
;(众合RM-139C型万能电视机遥控器的代码为000时)
;遥控器上的POWER键对应本电路的SW3关机键
;睡眠键对应本电路的SW2定时键
;回看键对应本电路的SW1风速键)
NOP
MOV A,1AH
XRL A,#40H ;用户码低八位40H (若你的遥控器不一样请修改其中的立即数)
JNZ REM_BAK
MOV A,1BH
XRL A,#0BFH ;用户码高八位BFH (若你的遥控器不一样请修改其中的立即数)
JNZ REM_BAK
MOV A,1CH
CPL A
XRL A,1DH
JNZ REM_BAK
MOV A,1CH
CJNE A,#12H,E81 ;遥控器关机键的操作码(若你的遥控器不一样请修改其中的立即数)
CALL SW1 ;关机
JMP REM_BAK
E81: CJNE A,#17H,E82 ;遥控器定时键的操作码(若你的遥控器不一样请修改其中的立即数) CALL LB ;定时
JMP REM_BAK
E82: CJNE A,#0BH,E83 ;遥控器关风速键的操作码(若你的遥控器不一样请修改其中的立即数) CALL LA1 ;风速
E83: ;CJNE A,#83H,E84
REM_BAK:
POP ACC
POP PSW
SETB E A
RETI
DELAY882: ;882us
MOV R7,#73 ;3*1=3
;NOP ;3*1=3
D3: NOP ;3*1*73=219 NOP ;3*1*73=219
DJNZ R7,D3 ;2*3*73=438
RET
DELAY1000: ;999us
MOV R7,#83 ;3*1=3
D4: NOP ;3*1*83=249 NOP ;3*1*83=249
DJNZ R7,D4 ;2*3*83=498
RET
DELAY2400: ;2403us
MOV R7,#89 ;3*1=3
D5: NOP ;3*89=267
NOP ;3*89=267
NOP ;3*89=267
NOP ;3*89=267
NOP ;3*89=267
NOP ;3*89=267
NOP ;3*89=267
DJNZ R7,D5 ;2*3*89=534
RET
TABLE:;P1.0-P1.7分别接共阳极数码管A-H DB 40H ;0.
DB 79H ;1.
DB 24H ;2.
DB 30H ;3.
DB 19H ;4.
DB 12H ;5.
DB 02H ;6.
DB 58H ;7.
DB 00H ;8.
DB 3FH ;一.
DB 37H ;二.
DB 36H ;三.
END。