红外遥控电风扇控制系统_毕业设计
- 格式:doc
- 大小:363.50 KB
- 文档页数:36
红外遥控电风扇控制系统设计概述遥控电风扇是 90年代初期在广东珠江三角洲地区作做大量的研发和生产,并有专门的掩模芯片作为主控芯片使用,现本人用单片机作了接收和发射的配套使用的系统方案。
红外遥控电路现在已成为一种设计电路的时尚,现简单地介绍了红外线遥控发射、接收系统的原理,给出用 89C2051作为遥控接收系统解码器的一种巧妙实现方法,以及完整的51汇编程序代码。
包括发射、接收的原理图及其编程的主程序、发送程序、接收程序、定时中断程序的流程过程,从而完成此设计的要点,参考流程方框图的构思过程,可以编写应用软件。
遥控电风扇控制系统分为两大部分:遥控器和电风扇控制板,下面分别加以描述。
一、遥控器为了能远离距的控制电风扇,采用了红外遥控器。
通常红外遥控器由发射和接收两部分组成,发射部分由单片机 80C2051等构成。
接收部分装在电风扇的控制器内,由89C51等构成。
1. 工作原理及组成部分(1)CPU 采用AT89C2051单片机,AT89C2051的功能:和 MCS-8051产品兼容、2KB可重编程闪速存储器、耐久性:1000写/擦除周期、2.7V~6V 的操作范围、全静态操作:0Hz~24MHz、两级加密程序存储器、128×8位内部RAM、15根可编程I/O引线、6个中断源、可编程串行UART通道、直接LED驱动输出、片内模拟比较器、低耗空载和掉电方式。
(2)电源采用4节7号电池来提供电源,并用一个二极管(IN4148)进行降压。
(3)调制部分:采用CD40106进行缓冲放大并整形.发送的数字信号与38K的载波进行相与,将其调制在一起,整形并缓冲放大,经过8050进行放大驱动红外发射管,使其发射红外光。
(4)红外发射方原理见图(1)所示。
(图 1 )遥控器原理框图2.红外发射(1)发射部分包括键盘矩阵、编码调制、红外发送器。
使用89C2051芯片将按键信号调制在 38KHz 的载波信号上通过三极管放大后发射出去。
红外编码为:全码 =引导码+系统码+系统反码+数据码+数据反码。
89C2051 的 P1口构成矩阵式键盘,用T1产生定时中断,驱动P3.3产生一个38K的方波,作为红外线的调制基波。
将发送的数据和P3.0进行逻辑与后,经过40106整形,用三极管驱动红外发射管发射。
(2)按键功能K1:低档、中档、高档;键值为 01HK2彩灯:键值为 02HK3:自然风、睡眠风、正常风键;值为03HK4定时;键值为04HK5开/关机;键值为05H(3)当无键按下时,延时10秒后进入待机状态,系统处于低功耗模式。
当有按键按下时,INT0中断产生中断,同时唤醒CPU进行工作状态。
3.红外发射的编码方式遥控发射器专用芯片很多,根据编码格式可以分成两大类,这里我们以运用比较广泛,解码比较容易的一类来加以说明,现以日本 NEC的uPD6121G组成发射电路为例说明编码原理。
当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。
这种遥控码具有以下特征:(1)采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”。
“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制以提高发射效率,达到降低电源功耗的目的。
然后再通过红外发射二极管发射。
(2)遥控编码是连续的32位二进制码组,其中前16位为用户识别码,能区别不同的电器设备,防止不同机种遥控码互相干扰。
该芯片的用户识别码固定为十六进制0FFH;后16位为8位操作码(功能码)及其反码。
(3)遥控器在按键按下后,周期性地发出同一种32位二进制码,周期约为108ms。
一组码本身的持续时间随它包含的二进制“0”和“1”的个数不同而不同,大约在45~63ms之间。
(4)其相关的波形图如下:(图 2)遥控编码4.硬件设计硬件设计见电路原理图(3)所示。
(图3)遥控器电路原理图5.软件设计(1)采用中断的处理程序完成整个系统的操作,INT0中断处理完成键盘扫描以及发送。
(2)程序流程图:(图 4)遥控器软件流程图二、电风扇控制板1.工作原理及组成部分: 红外接收部分包括光电转换放大器、解调、解码电路。
(1)CPU板将单片机、控制、键盘组合在一起完成了人机对话。
用 AT89C51单片机来作主芯片控制,采用红外T1838接收头,用双向可控硅MC97A6控制电机档位,具有红外遥控功能。
(2)电源部分:交流220V经变压器降压为2×8V,全波整流后再由三端稳压器LM7805稳压,供给控制板。
(3) 电风扇控制板框图(图 5 )电风扇控制板框图2.设计方案(1)控制部分(图 6)电机引线图K1:低、中、高档,相应的指示灯亮。
参见(图6)K2:控制彩灯,相应的指示灯亮K3:自然风、睡眠风、正常风控制。
参见(图8)、(图9)、(图10)K4: 定时30分钟,1小时,2小时,4小时。
相应的指示灯点亮。
参见(图7)K5:具有开机功能和关机功能(图7)定时时循环图(2)风类自然风的处理流程 :( 图 8) 自然风的循环图睡眠风的处理流程 :( 图 9) 自然风的循环图正常风的处理流程 :(图10)正常风循环(3)工作方式:分为手动和遥控两种方式。
4.硬件设计:参见(图11)(图 11)电风扇控制板电路原理图5.软件设计:(1)红外遥控输入在 P3.2(INT0),面板按键P3.3(INT1)。
(2) 遥控的解码过程:(图12)编码(图13)数据帧图形单片机收到一个中断后,开始计数,然后在主程序有一个判断子程序,首先判断是否>8MS,是否有高电平,再判断是否>4MS的低电平,然后再判断是否是0或1,循环32次完成,32个码的接收和存储。
(3)程序流程图 :(图14)控制板主程序流程(图15)键值处理流程;=============电风扇红外发射(遥控器)程序=====================================;按键说明:;K1:低风档,键值为 01;K2:中风档,键值为 02;K3:高风档,键值为 03;K4:彩灯档,键值为 04;K5:自然风档,键值为05;K6:睡眠风档,键值为06;K7:正常风档,键值为07;K8:定时档,键值为08;K9:开关机,键值为9;采用 4×1.5V 供电,用89C2051作CPU芯片,当没有按键按下时,进入待机状态;按键采用INT0进行中断,只采用了8个按键;==============================================================================$include(2051RAM.INC);$include(REG51.INC)ORG 0000HJMP MAINORG 0003H ;INT0的中断入口JMP KEY_INT0ORG 000BH ;T0的中断入口JMP FM_T0ORG 0100H;------------------------------------------------------------------------------;进入主程序;------------------------------------------------------------------------------MAIN: MOV R0,#7FH ;预使用单元清0CLR AMAIN0:MOV @R0,ADJNZ R0,MAIN0 ;清缓冲的地址单元值MOV SP,#60HMOV P1,#00001111B ;将P1置输入CLR KEYONCLR IT0 ;设置电平触发SETB PT0SETB EX0SETB EAMOV 40H,#0FFHMOV 41H,#0FFHMOV 42H,#0FFHCLR DATAOUTCLR FMOUT ;38K的中断初始值MOV TMOD,#02H ;T0的工作方式2MOV TH0,#0F7H ;送初值SETB FMOUTCLR TR0 ;1/3的高电平标志MOV R2,#02H ;2/3的循环次数DJNZ 40H,LOOP1DJNZ 41H,LOOP1DJNZ 42H,LOOP1MOV PCON,#01H ;进入待机LOOP1: JMP MAIN;============================================================= ;中断程序:完成其按键按下的标志位;=============================================================KEY_INT0:PUSH ACCPUSH PSWCLR EX0MOV A,P1CPL AANL A,#0FHMOV R2,A ;将行号存入R2中MOV P1,#0F0H ;将列置输入端MOV A,P1CPL AANL A,#0F0H ;取列号并存入A中MOV R1,#03H ;置列初号MOV R3,#03H ;置循环次数CLR CPINT01: RLC A ;取列号JC PINT01DEC R1DJNZ R3,PINT01PINT02: MOV A,R2 ;取行号MOV R2,#00HMOV R3,#03H ;置循环次数PINT03: RRC AJC PINT04INC R2DJNZ R3,PINT03PINT04: MOV A,R2CLR CRLC ARLC AADD A,R1MOV SENDBUF+2,A ;键号存于32H单元中CPL AMOV SENDBUF+3,A ;存键号的反码MOV SENDBUF,#0FFH ;系统码在30H单元中MOV SENDBUF+1,#00H ;系统反码在31H单元中LCALL SENDSETB ET0 ;发送引导码SETB TR0 ;启动T0LCALL PP ;发送一帧数据.包括系统码和数据码CLR TR0 ;当发送完后关断定时器CLR ET0 ;关T0的中断SETB EX0 ;执行完后打开外INT0MOV 40H,#0FFHMOV 41H,#0FFHMOV 42H,#0FFHPOP PSWPOP ACCRETI;=============================================================================FM_T0: JB F0,IT01DJNZ R2,GRETMOV R2,#2IT01: CPL FMOUTCPL F0GRET: RETI;==============================================================================;引导脉冲子程序SEND: SETB DATAOUTLCALL DY9000usCLR DATAOUTLCALL DY4500usRET;==============================================================================;发送四个缓冲单元中的内容程序:PP: MOV R3,#4 ;发送的字节数MOV R1,SENDBUFPP0: MOV R2,#08H ;让其循环8次MOV A,@R1 ;将数据首址CLR C ;清CYPP1: RRC A ;右环移带进位JC ONE ;若C等1ZER0: SETB DATAOUT ;若C等0CALL DY562usCLR DATAOUTCALL DY562usONE: SETB DATAOUTCALL DY562usCLR DATAOUTCALL DY1687usDJNZ R2,PP1INC R1DJNZ R3,PP0 ;等四个字节的发送完RET;=========================================================================DY1687us:MOV R31,#38L2: PUSH R31L3: DJNZ R31,L3POP R31DJNZ R31,L2RET;========================================================================DY562us:MOV R31,#20L22: PUSH R31L33: DJNZ R31,L33POP R31DJNZ R31,L22RET;==========================================================================;延时9000us子程序:DY9000us:MOV R31,#91L2A: PUSH R31L3A: DJNZ R31,L3APOP R31DJNZ R31,L2ARET;==============================================================================;延时4500us子程序DY4500us:MOV R31,#67L2B: PUSH R31L3B: DJNZ R31,L3BPOP R31DJNZ R31,L2BRET;==============================================================================DY10S: MOV R6,#10L2C: MOV R4,#2L3C: MOV R5,#248DJNZ R5,$DJNZ R4,L3CDJNZ R6,L2CRETENDINC文件内容;-------------------------------------------------------------------------------; AT89C2051 内存RAM分配 Fiel = 2051ram.INC;-------------------------------------------------------------------------------$SAVE$NOLISTR31 DATA 1FHKEYON BIT 20H.0 ;按键按下的标志SENDBUF DATA 30H ;定义发送系统码缓冲的地址FMOUT BIT P3.3 ;38K输出DATAOUT BIT P3.0 ;数据输出$RESTORE;========================电风扇红外接收(控制板)程序=========== ;用89C51单片机来作主芯片控制,采用红外1838接收头,可控硅采用MC97A6;风扇具有红外遥控功能;K1:低档,相应的指示灯亮 ,中档,相应的指示灯亮 , 高档,相应的指示灯亮;K2:彩灯,相应的指示灯亮;K3:自然风控制睡眠风的控制正常风的控制;K4:定时30分钟,1小时,2小时,4小时;K5:开关机功能;自然风的处理流程:停--->开低档--->延时6秒--->开中档-->;延时6秒--->开高档--->循环;睡眠风的处理流程:停6S--->开低档10S--->停延时10S-->开中档10S-->;停延时10S-->开高档10S--->循环;正常风的处理流程:开低档10S--> 开中档10S--> 开高档10S---> 循环;==========================================================$INCLUDE(REG51.INC)$INCLUDE(89C51RAM.INC)ORG 0000HJMP STARTORG 0003HJMP JISH_INT0 ;红外遥控中断设置ORG 000BHJMP LP0 ;定时中断ORG 0013HJMP KEY_INT1 ;按键中断ORG 0100HSTART:MOV R0,#7FH ;预使用单元清0CLR AMAIN0:MOV @R0,ADJNZ R0,MAIN0MOV SP,#60HMOV TMOD,#01HMOV TH0,#3CH ;定时50MSMOV TL0,#0B0HSETB LLOW ;关低风SETB MDI ;关中风SETB HIGHT ;关高风SETB LLAP ;关彩灯MOV P0,#0FFH ;关所有的指示灯SETB EX0SETB EX1SETB EA ;CPU开中MAIN: JB LKEYON,KEYHANDLE ;检按键标志位JB REC,KEYHANDLE ;检接收中断标志位JMP MAIN ;转主程序;==============================================================================;键值的处理的程序;键盘处理程序;K1键:完成弱、中、强控制,相应的指示灯点亮;K2键:完成彩灯控制,相应的指示灯点亮;K3键:完成自然风、睡眠风、正常风的控制,相应的指示灯点亮;K4键:完成定时的控制,同时0.5H,1H,2H,4H,相应的指示灯点亮;K5键:开/关机;==============================================================================KEYHANDLE:CLR LKEYONCLR LRECMOV A,MRDCJNE A,#01H,KEY2 ;当键值=01H时,;------------------------------------------------------------------------------;低、中、高、的控制;------------------------------------------------------------------------------KEY1: JB DANG01,DIFENGJB DANG02,ZHONGFENG ;DANG02 中档标志位JB DANG03,QIANGFENG ;DANG03 强档标志位JMP MAIN;------------------------------------------------------------------------------;低档控制DIFENG:JNB DANG01,FAN0SETB LLOW ;完成了低档的程序,关低SETB MDI ;关中SETB HIGHT ;关高CALL DY20MS ;保证三个SCR全部为关断状态CLR LLOW ;开低风CLR LED_L ;开低档指示灯CLR DANG01FAN0: JMP MAIN;------------------------------------------------------------------------------;中档控制ZHONGFENG:JNB DANG02,FAN0SETB LLOW ;关低SETB MDI ;关中SETB HIGHT ;关高CALL DY20MS ;保证三个SCR全部为关断状态CLR MDICLR LED_MCLR DANG02AJMP MAIN ;跳转到;------------------------------------------------------------------------------;高档控制QIANGFENG:JNB DANG03,FAN0SETB LLOW ;关低SETB MDI ;关中SETB HIGHT ;关高CALL DY20MS ;保证三个SCR全部为关断状态CLR HIGHTCLR LED_HCLR DANG03AJMP MAIN ;跳转到;------------------------------------------------------------------------------;彩灯控制;------------------------------------------------------------------------------KEY2:CJNE A,#02H,KEY3 ;K4的处理程序彩灯的处理程序JB PLAP,LED1CLR LLAP ;第一次按时将彩灯打开,CLR LED_LAPSETB PLAPJMP MAIN ;返回LED1: SETB LLAP ;第二次按时将彩灯关断SETB LED_LAPCLR PLAPJMP MAIN ;跳转到;------------------------------------------------------------------------------;风类处理过程;------------------------------------------------------------------------------KEY3:CJNE A,#03H,KEY4_A ;K3的处理程序处理风类JB SMF,SKEEPJB ZCF,SPRING_AJB ZRF,WATERMJMP MAINKEY4_A:JMP KEY4SPRING_A:JMP SPRING;------------------------------------------------------------------------------;自然风控制WATERM:JNB ZRF,FAN1CLR ZRFSETB LLOW ;处理自然风,关低'中'高SETB MDISETB HIGHTJB LREC,ZHUAN0 ;查询JB LKEYON,ZHUAN0 ;查询CALL DY6SCLR LLOWJB LREC,ZHUAN0 ;查询JB LKEYON,ZHUAN0 ;查询CALL DY6SSETB LLOW ;关低'中'高SETB MDISETB HIGHTJB LREC,ZHUAN0 ;查询JB LKEYON,ZHUAN0 ;查询CALL DY20MSCLR MDIJB LREC,ZHUAN0 ;查询JB LKEYON,ZHUAN0 ;查询CALL DY6SSETB LLOW ;关低'中'高SETB MDISETB HIGHTJB LREC,ZHUAN0 ;查询JB LKEYON,ZHUAN0 ;查询CALL DY20MSCLR HIGHTCALL DY6SAJMP WATERMZHUAN0: SETB SMFFAN1: JMP MAIN;------------------------------------------------------------------------------;睡眠风控制SKEEP:JNB SMF,FAN2CLR SMFSLEEP1: SETB LLOW ;处理睡眠风,关低'中'高SETB MDISETB HIGHTJB LREC,ZHUAN1 ;查询JB LKEYON,ZHUAN1 ;查询CALL DY6SCLR LLOW ;开低档JB LREC,ZHUAN1 ;查询JB LKEYON,ZHUAN1 ;查询CALL DY10SSETB LLOW ;关低'中'高SETB MDISETB HIGHTJB LREC,ZHUAN1 ;查询 JB LKEYON,ZHUAN1 ;查询CALL DY10SCLR MDI ;开中档JB LREC,ZHUAN1 ;查询 JB LKEYON,ZHUAN1 ;查询CALL DY10SSETB LLOW ;关低'中'高SETB MDISETB HIGHTJB LREC,ZHUAN1 ;查询 JB LKEYON,ZHUAN1 ;查询CALL DY10SSETB LLOW ;关低'中'高SETB MDISETB HIGHTJB LREC,ZHUAN1 ;查询 JB LKEYON,ZHUAN1 ;查询CALL DY10SCLR HIGHT ;开高档 JB LREC,ZHUAN1 ;查询 JB LKEYON,ZHUAN1 ;查询CALL DY10SSETB LLOW ;关低'中'高SETB MDISETB HIGHTJB LREC,ZHUAN1 ;查询 JB LKEYON,ZHUAN1 ;查询CALL DY10SAJMP SKEEPZHUAN1: CLR SMFSETB ZCFFAN2: JMP MAIN;------------------------------------------------------------------------------;正常风控制SPRING:JNB ZCF,FAN3CLR ZCFSPRING1:SETB LLOW ;处理正常风,关低'中'高SETB MDISETB HIGHTCALL DY20MSCLR LLOW ;开低档JB LREC,ZHUAN2 ;查询JB LKEYON,ZHUAN2 ;查询CALL DY10SSETB LLOW ;关低'中'高SETB MDISETB HIGHTLCALL DY20MSJB LREC,ZHUAN2 ;查询JB LKEYON,ZHUAN2 ;查询CLR MDI ;开中档CALL DY10SSETB LLOW ;关低'中'高SETB MDISETB HIGHTLCALL DY20MSJB LREC,ZHUAN2 ;查询JB LKEYON,ZHUAN2 ;查询CLR HIGHT ;开高档CALL DY10SAJMP SPRINGZHUAN2: CLR ZCFFAN3: JMP MAIN;------------------------------------------------------------------------------;定时控制;------------------------------------------------------------------------------KEY4:CJNE A,#04H,KEY5 ;K4的定时的处理程序JB SJ01,DY1HJB SJ02,DY2HJB SJ03,DY4HJNB SJ00,FAN4CLR SJ00SETB TR0 ;0 5H处理JMP MAINDY1H:JNB SJ01,FAN4CLR SJ01SETB TR0JMP MAINDY2H:JNB SJ02,FAN4CLR SJ02SETB TR0JMP MAINDY4H:JNB SJ03,FAN4CLR SJ02SETB TR0FAN4: JMP MAIN;------------------------------------------------------------------------------;开关机;------------------------------------------------------------------------------KEY5:CJNE A,#05H,POTHER ;开关机处理程序JB KAI,GUANCLR MDICLR LED_MSETB KAIJMP MAIN ;返GUAN: SETB LLOW ;关低'中'高SETB MDISETB HIGHTCLR KAIJMP MAINPOTHER:JMP MAIN ;其他键的不处理直接返回;==============================================================================;T0定时中断处理;==============================================================================LP0:PUSH ACC ;中断处理PUSH PSWMOV TH0,#3CH ;定时50MSMOV TL0,#0B0HDJNZ CUZHI,GRET ;1S到后向下执行MOV CUZHI,#20 ;给50MS的寄存器给初值INC SENMOV A,SENCJNE A,#60,GRET ;1分钟到后向下执行INC MINMOV A,MINJB SJ01,LOOP_1H ;定时1小时的处理JB SJ02,LOOP_2H ;定时2小时的处理JB SJ03,LOOP_4H ;定时4小时的处理CJNE A,#30,GRET ;半小时到后向下执行MOV P1,#0FFH ;关断所有档位MOV P0,#0FFHSETB SJ01 ;将1H的标志位进行置 1JMP GRETLOOP_1H:CJNE A,#60,GRET ;1小时到后向下执行MOV P1,#0FFHMOV P0,#0FFHCLR SJ01 ;将1H的标志位进行置 0SETB SJ02 ;将2H的标志位进行置 1JMP GRETLOOP_2H:CJNE A,#60,GRET ;1小时到后向下执行INC HOURMOV A,HOURCJNE A,#2,GRETMOV P1,#0FFH ;关断MOV P0,#0FFHCLR SJ02 ;关断2H的标志位SETB SJ03 ;将4H的标志位进行置位JMP GRET ;中断返回LOOP_4H:CJNE A,#60,GRET ;1小时到后向下执行INC HOURMOV A,HOURCJNE A,#4,GRET ;4小时到后向下执行MOV P1,#0FFH ;关断MOV P0,#0FFHCLR SJ03 ;将4H的标志位进行清零JMP GRET ;中断返回GRET:CLR TR0POP PSWPOP ACCRETI;============================================================================== ;INT0中断处理程序:对接收数据进行接收;==============================================================================JISH_INT0:PUSH ACCPUSH PSWCLR EX0 ;关断中断MOV R6,#10 ;避开9MS时间的引导码SB: CALL DY882USJB P3.2,EXIT ;,EX检测为1时退出DJNZ R6,SB ;检测为0时,引导码过JNB P3.2,$; ;检测为0时,等待ACALL DY4700US ;避开4。