当前位置:文档之家› 三档八小时遥控电风扇控制电路和单片机程序

三档八小时遥控电风扇控制电路和单片机程序

三档八小时遥控电风扇控制电路和单片机程序-----广东、五华、李标清大家都知道风扇是每家每户都不可缺少一个电器用品,现在已到夏天了气温渐渐上升用鸿运扇(或台扇)原来的机械式定时器,由于有些老人家说太噪很难入睡,普通型的定时器最长定时时间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.代码格式以接收代码为准接收代码与发射代码反向;;888888888888888888888888888888888888888888888888888888888888888888888888ORG 0000HSwFengSu BIT P3.0 ;风速SwTime BIT P3.1 ;定时SwOff BIT P3.7 ;关机FengSu1 BIT P3.3 ;风速1FengSu2 BIT P3.4 ;风速2FengSu3 BIT P3.5 ;风速3JMP STARTORG 0003HJMP YAO_KONGORG 000BH ;定时器0入口JMP TIME ;中断程序ORG 0030HSTART:MOV SP,#60HMOV P3,#0F7H ;11110111B ;默认为风速1MOV 22H,#09H ;使其取得一.的显示码MOV R3,#00HMOV R2,#00HMOV R4,#00HCLR 20H.0 ;开关标志位MOV TMOD,#01H ;定时器0工作于方式1MOV TH0,#HIGH(65536-50000)MOV TL0,#LOW(65536-50000);50MS(当4mhz晶体时为150MS)SETB EA ;开总中断SETB ET0 ;定时器0中断允许SETB EX0SETB IT0LOOP:JNB 20H.0,ON ;不是关机即转ON处OFF: MOV P1,#8EH ;显示F且P1.7为高即关机MOV P3,#0FFH ;风速全部关JMP OFFON: MOV DPTR,#TABLEMOV A,R4 ;JB 20H.1,ON1 ;如果20H.1=1 即显示定时值MOV A,22H ;使其取得一.二.三.的显示码ON1:MOVC A,@A+DPTRMOV P1,A ;送P1口显示CALL SW_OFFCALL SW_FengSuCALL SW_TimeJMP LOOPSW_OFF:JB SwOff,SWO ;是否有关机键压下CALL DELAY ;防抖JB SwOff,SWOJNB SwOff,$SW1:SETB 20H.0 ;取反即为高电平故关闭总电源SWO:RETSW_FengSu:;调风速键JB SwFengSu,LAO ;是否有调风速键压下CALL DELAYJB SwFengSu,LAOLA1: MOV PSW,#00HCLR 20H.1 ;标志位置0 显示风速值SETB 20H.2 ;延时轮流显示标志位MOV 21H,#8 ;延时轮流显示INC R3JNB SwFengSu,$C01:;风速2CJNE R3,#01H,C02MOV 22H,#0AH ;使其取得二.的显示码SETB F engSu1 ;关风速1CALL DELAY ;延时防抖14946usCALL DELAY ;延时防抖14946usCLR FengSu2 ;开风速2JMP LAOC02: ;风速3CJNE R3,#02H,C03MOV 22H,#0BH ;使其取得三.的显示码SETB F engSu2 ;关风速2CALL DELAY ;延时防抖14946usCALL DELAY ;延时防抖14946usCLR FengSu3 ;开风速3JMP LAOC03: ;风速1MOV 22H,#09H ;使其取得一.的显示码SETB F engSu3 ;关风速3CALL DELAY ;延时防抖14946usCALL DELAY ;延时防抖14946usCLR FengSu1 ;开风速1MOV R3,#00HLAO: RETSW_Time:;调定时键JB SwTime,LBO ;是否有定时键压下CALL DELAYJB SwTime,LBOLB:MOV PSW,#00HSETB 20H.1 ;标志位置1 显示定时值SETB 20H.2 ;延时轮流显示/风速标志位置1JNB SwTime,$MOV 21H,#8 ;延时轮流显示MOV R7,#00HMOV R6,#00HMOV R5,#00HINC R4 ;定时时间加1 小时CJNE R4,#09H,C04 ;如果大于8即长通不会定时关机CLR 20H.1 ;标志位置0 显示风速值MOV R4,#00HCLR TR0RETC04:SETB TR0LBO:RETDELAY:;延时防抖14946usMOV R1,#10 ;1*3=3DD: MOV R0,#248 ;1*3=3DJNZ R0,$ ;2*3*248*10=14880DJNZ R1,DD ;2*3*10=60RETTIME:PUSH ACCPUSH PSWMOV TH0,#HIGH(65536-50000)MOV TL0,#LOW(65536-50000);重置初定时值INC R7INC R5CJNE R5,#7,TT1 ;150MS*7=1S到了吗?MOV R5,#00HJNB 20H.2,TT2 ;延时轮流显示/风速标志位置DJNZ 21H,TT1CLR 20H.2TT2:CPL 20H.1 ;标志位置0 显示风速值TT1:CJNE R7,#200,TT ;150MS*200=30S到了吗?MOV R7,#00HINC R6CJNE R6,#120,TT ;30S*120=3600S到了吗?MOV R6,#00HDJNZ R4,TT ;将R4的值减1SETB 20H.0 ;取反即为高电平故关闭总电源TT: POP PSWPOP ACCRETIYAO_KONG:PUSH PSWPUSH ACCCLR EAMOV PSW,#10HIR: MOV R6,#10SB: ACALL DELAY882JB P3.2,REM_BAKDJNZ R6,SBJNB P3.2,$ACALL DELAY2400JNB P3.2,REM_BAKACALL DELAY2400MOV R1,#1AHMOV R2,#4PP: MOV R3,#8JJ: JNB P3.2,$LCALL DELAY882MOV C,P3.2JNC UUULCALL DELAY1000UUU:MOV A,@R1RRC AMOV @R1,ADJNZ R3,JJINC R1DJNZ R2,PPDAN_JI:;(众合RM-139C型万能电视机遥控器的代码为000时);遥控器上的POWER键对应本电路的SW3关机键;睡眠键对应本电路的SW2定时键;回看键对应本电路的SW1风速键)NOPMOV A,1AHXRL A,#40H ;用户码低八位40H (若你的遥控器不一样请修改其中的立即数)JNZ REM_BAKMOV A,1BHXRL A,#0BFH ;用户码高八位BFH (若你的遥控器不一样请修改其中的立即数)JNZ REM_BAKMOV A,1CHCPL AXRL A,1DHJNZ REM_BAKMOV A,1CHCJNE A,#12H,E81 ;遥控器关机键的操作码(若你的遥控器不一样请修改其中的立即数)CALL SW1 ;关机JMP REM_BAKE81: CJNE A,#17H,E82 ;遥控器定时键的操作码(若你的遥控器不一样请修改其中的立即数) CALL LB ;定时JMP REM_BAKE82: CJNE A,#0BH,E83 ;遥控器关风速键的操作码(若你的遥控器不一样请修改其中的立即数) CALL LA1 ;风速E83: ;CJNE A,#83H,E84REM_BAK:POP ACCPOP PSWSETB E ARETIDELAY882: ;882usMOV R7,#73 ;3*1=3;NOP ;3*1=3D3: NOP ;3*1*73=219 NOP ;3*1*73=219DJNZ R7,D3 ;2*3*73=438RETDELAY1000: ;999usMOV R7,#83 ;3*1=3D4: NOP ;3*1*83=249 NOP ;3*1*83=249DJNZ R7,D4 ;2*3*83=498RETDELAY2400: ;2403usMOV R7,#89 ;3*1=3D5: NOP ;3*89=267NOP ;3*89=267NOP ;3*89=267NOP ;3*89=267NOP ;3*89=267NOP ;3*89=267NOP ;3*89=267DJNZ R7,D5 ;2*3*89=534RETTABLE:;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。

相关主题