《大学毕业论文-—红外遥控电风扇控制系统.doc》由会员分享,可在线阅读,更多相关《大学毕业论文-—红外遥控电风扇控制系统.doc(44页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、红外遥控电风扇控制系统设计概述 遥控电风扇是 90年代初期在广东珠江三角洲地区作做大量的研发和生产,并有专门的掩模芯片作为主控芯片使用,现本人用单片机作了接收和发射的配套使用的系统方案。红外遥控电路现在已成为一种设计电路的时尚,现简单地介绍了红外线遥控发射、接收系统的原理,给出用 89C2051作为遥控接收系统解码器的一种巧妙实现方法,以及完整的51汇编程序代码。包括发射、接收的原理图及其编程的主程序、发送程序、接收程序、定时中断程序的流程过程,从而完成此设计的要点,参考流程方框图的构思过程,可以编写应用软件。遥控电风扇控制系统分为两大部分:遥控器和电风扇控制板,下面分别加以描述。一、遥控器
2、为了能远离距的控制电风扇,采用了红外遥控器。通常红外遥控器由发射和接收两部分组成,发射部分由单片机 80C2051等构成。接收部分装在电风扇的控制器内,由89C51等构成。1. 工作原理及组成部分(1)CPU 采用AT89C2051单片机,AT89C2051的功能: 和 MCS-8051产品兼容、2KB可重编程闪速存储器、耐久性:1000写/擦除周期、2.7V6V的操作范围、全静态操作:0Hz24MHz、两级加密程序存储器、1288位内部RAM、15根可编程I/O引线、6个中断源、可编程串行UART通道、直接LED驱动输出、片内模拟比较器、低耗空载和掉电方式。(2)电源采用4节7号电池来提供电
3、源,并用一个二极管(IN4148)进行降压。(3)调制部分:采用CD40106进行缓冲放大并整形.发送的数字信号与38K的载波进行相与,将其调制在一起,整形并缓冲放大,经过8050进行放大驱动红外发射管,使其发射红外光。(4)红外发射方原理见图(1)所示。(图 1 )遥控器原理框图2.红外发射(1)发射部分包括键盘矩阵、编码调制、红外发送器。使用89C2051芯片 将按键信号调制在 38KHz 的载波信号上通过三极管放大后发射出去。红外编码为: 全码 =引导码+系统码+系统反码+数据码+数据反码。89C2051 的 P1口构成矩阵式键盘,用T1产生定时中断,驱动P3.3产生一个38K的方波,作
4、为红外线的调制基波。将发送的数据和P3.0进行逻辑与后,经过40106整形,用三极管驱动红外发射管发射。(2)按键功能K1:低档、中档、高档;键值为 01HK2彩灯:键值为 02HK3:自然风、睡眠风、正常风键;值为03HK4定时;键值为04HK5开/关机;键值为05H(3)当无键按下时,延时10秒后进入待机状态,系统处于低功耗模式。当有按键按下时,INT0中断产生中断,同时唤醒CPU进行工作状态。3.红外发射的编码方式 遥控发射器专用芯片很多,根据编码格式可以分成两大类,这里我们以运用比较广泛,解码比较容易的一类来加以说明,现以日本 NEC的uPD6121G组成发射电路为例说明编码原理。当发
5、射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。这种遥控码具有以下特征:(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位操作码
6、(功能码)及其反码。(3)遥控器在按键按下后,周期性地发出同一种32位二进制码,周期约为108ms。一组码本身的持续时间随它包含的二进制“0”和“1”的个数不同而不同,大约在4563ms之间。(4)其相关的波形图如下:(图 2)遥控编码4.硬件设计硬件设计见电路原理图(3)所示。(图3)遥控器电路原理图5.软件设计(1)采用中断的处理程序完成整个系统的操作,INT0中断处理完成键盘扫描以及发送。(2)程序流程图:(图 4)遥控器软件流程图二、 电风扇控制板1.工作原理及组成部分: 红外接收部分包括光电转换放大器、解调、解码电路。(1)CPU板将单片机、控制、键盘组合在一起完成了人机对话。 用
7、AT89C51单片机来作主芯片控制,采用红外T1838接收头,用双向可控硅MC97A6控制电机档位,具有红外遥控功能。(2)电源部分:交流220V经变压器降压为28V,全波整流后再由三端稳压器LM7805稳压,供给控制板。(3) 电风扇控制板框图(图 5 )电风扇控制板框图2.设计方案(1)控制部分(图 6)电机引线图K1:低、中、高档,相应的指示灯亮。参见(图6)K2:控制彩灯,相应的指示灯亮K3:自然风、睡眠风、正常风控制 。参见(图8)、(图9)、(图10)K4: 定时30分钟,1小时,2小时,4小时。相应的指示灯点亮。参见(图7)K5:具有开机功能和关机功能(图7)定时时循环图(2)风
8、类自然风的处理流程 :( 图 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
9、)控制板主程序流程(图15)键值处理流程;=电风扇红外发射(遥控器)程序=;按键说明:;K1:低风档,键值为 01;K2:中风档,键值为 02;K3:高风档,键值为 03;K4:彩灯档,键值为 04;K5:自然风档,键值为05;K6:睡眠风档,键值为06;K7:正常风档,键值为07;K8:定时档,键值为08;K9:开关机,键值为9;采用 41.5V 供电,用89C2051作CPU芯片,当没有按键按下时,进入待机状态;按键采用INT0进行中断,只采用了8个按键;=$include(2051RAM.INC);$include(REG51.INC)ORG0000HJMPMAINORG0003H;IN
10、T0的中断入口JMPKEY_INT0ORG000BH;T0的中断入口JMPFM_T0ORG0100H;-;进入主程序;-MAIN:MOVR0,#7FH;预使用单元清0CLRAMAIN0:MOVR0,ADJNZR0,MAIN0;清缓冲的地址单元值MOVSP,#60HMOVP1,#00001111B;将P1置输入CLRKEYONCLRIT0;设置电平触发SETBPT0SETBEX0SETBEAMOV40H,#0FFHMOV41H,#0FFHMOV42H,#0FFHCLRDATAOUTCLRFMOUT;38K的中断初始值MOVTMOD,#02H;T0的工作方式2MOVTH0,#0F7H;送初值SET
11、BFMOUTCLRTR0;1/3的高电平标志MOVR2,#02H;2/3的循环次数DJNZ40H,LOOP1DJNZ41H,LOOP1DJNZ42H,LOOP1MOVPCON,#01H;进入待机LOOP1:JMPMAIN;=;中断程序:完成其按键按下的标志位;=KEY_INT0:PUSHACCPUSHPSWCLREX0MOVA,P1CPLAANLA,#0FHMOVR2,A;将行号存入R2中MOVP1,#0F0H;将列置输入端MOVA,P1CPLAANLA,#0F0H;取列号并存入A中MOVR1,#03H;置列初号MOVR3,#03H;置循环次数CLRCPINT01:RLCA;取列号JCPINT
12、01DECR1DJNZR3,PINT01PINT02:MOVA,R2;取行号MOVR2,#00HMOVR3,#03H;置循环次数PINT03:RRCAJCPINT04INCR2DJNZR3,PINT03PINT04:MOVA,R2CLRCRLCARLCAADDA,R1MOVSENDBUF+2,A;键号存于32H单元中CPLAMOVSENDBUF+3,A;存键号的反码MOVSENDBUF,#0FFH;系统码在30H单元中MOVSENDBUF+1,#00H;系统反码在31H单元中LCALLSENDSETBET0;发送引导码SETBTR0;启动T0LCALLPP;发送一帧数据.包括系统码和数据码CL
13、RTR0;当发送完后关断定时器CLRET0;关T0的中断SETBEX0;执行完后打开外INT0MOV40H,#0FFHMOV41H,#0FFHMOV42H,#0FFHPOPPSWPOPACCRETI;=FM_T0:JBF0,IT01DJNZR2,GRETMOVR2,#2IT01:CPLFMOUTCPLF0GRET:RETI;=;引导脉冲子程序SEND:SETBDATAOUTLCALLDY9000usCLRDATAOUTLCALLDY4500usRET;=;发送四个缓冲单元中的内容程序:PP:MOVR3,#4;发送的字节数MOVR1,SENDBUFPP0:MOVR2,#08H;让其循环8次MOV
14、A,R1;将数据首址CLRC;清CYPP1:RRCA;右环移带进位JCONE;若C等1ZER0:SETBDATAOUT;若C等0CALLDY562usCLRDATAOUTCALLDY562usONE:SETBDATAOUTCALLDY562usCLRDATAOUTCALLDY1687usDJNZR2,PP1INCR1DJNZR3,PP0;等四个字节的发送完RET;=DY1687us:MOVR31,#38L2: PUSH R31L3: DJNZ R31,L3 POP R31 DJNZ R31,L2 RET;=DY562us:MOVR31,#20L22: PUSH R31L33: DJNZ R31
15、,L33 POP R31 DJNZ R31,L22 RET;=;延时9000us子程序:DY9000us:MOVR31,#91L2A: PUSH R31L3A: DJNZ R31,L3A POP R31 DJNZ R31,L2A RET;=;延时4500us子程序DY4500us:MOVR31,#67L2B: PUSH R31L3B: DJNZ R31,L3B POP R31 DJNZ R31,L2B RET;=DY10S:MOVR6,#10L2C:MOVR4,#2L3C:MOVR5,#248DJNZR5,$DJNZR4,L3CDJNZR6,L2CRETENDINC文件内容;-; AT89C2
16、051 内存RAM分配 Fiel = 2051ram.INC;-$SAVE$NOLISTR31DATA1FHKEYONBIT20H.0;按键按下的标志SENDBUFDATA30H;定义发送系统码缓冲的地址FMOUTBITP3.3;38K输出DATAOUTBITP3.0;数据输出$RESTORE;=电风扇红外接收(控制板)程序=;用89C51单片机来作主芯片控制,采用红外1838接收头,可控硅采用MC97A6;风扇具有红外遥控功能;K1:低档,相应的指示灯亮 ,中档,相应的指示灯亮 , 高档,相应的指示灯亮;K2:彩灯,相应的指示灯亮;K3:自然风控制 睡眠风的控制正常风的控制;K4:定时30分
17、钟,1小时,2小时,4小时;K5:开关机功能;自然风的处理流程:停-开低档-延时6秒-开中档-;延时6秒-开高档-循环;睡眠风的处理流程:停6S-开低档10S-停延时10S-开中档10S-;停延时10S-开高档10S-循环;正常风的处理流程:开低档10S- 开中档10S- 开高档10S- 循环;=$INCLUDE(REG51.INC)$INCLUDE(89C51RAM.INC)ORG0000HJMPSTARTORG0003HJMPJISH_INT0;红外遥控中断设置ORG000BHJMPLP0;定时中断ORG0013HJMPKEY_INT1;按键中断ORG0100HSTART:MOVR0,#7
18、FH;预使用单元清0CLRAMAIN0:MOVR0,ADJNZR0,MAIN0MOVSP,#60HMOVTMOD,#01HMOVTH0,#3CH;定时50MSMOVTL0,#0B0HSETBLLOW;关低风SETBMDI;关中风SETBHIGHT;关高风SETBLLAP;关彩灯MOVP0,#0FFH;关所有的指示灯SETBEX0SETBEX1SETBEA;CPU开中MAIN:JBLKEYON,KEYHANDLE;检按键标志位JBREC,KEYHANDLE;检接收中断标志位JMPMAIN;转主程序;=;键值的处理的程序;键盘处理程序;K1键:完成弱、中、强控制,相应的指示灯点亮;K2键:完成彩灯
19、控制,相应的指示灯点亮;K3键:完成自然风、睡眠风、正常风的控制,相应的指示灯点亮;K4键:完成定时的控制,同时0.5H,1H,2H,4H,相应的指示灯点亮;K5键:开/关机;=KEYHANDLE:CLRLKEYONCLRLRECMOVA,MRDCJNEA,#01H,KEY2;当键值=01H时,;-;低、中、高、的控制;-KEY1:JBDANG01,DIFENGJBDANG02,ZHONGFENG;DANG02 中档标志位JBDANG03,QIANGFENG;DANG03 强档标志位JMPMAIN;-;低档控制DIFENG:JNBDANG01,FAN0SETBLLOW;完成了低档的程序,关低S
20、ETBMDI;关中SETBHIGHT;关高CALLDY20MS;保证三个SCR全部为关断状态CLRLLOW;开低风CLRLED_L;开低档指示灯CLRDANG01FAN0:JMPMAIN;-;中档控制ZHONGFENG:JNBDANG02,FAN0SETBLLOW;关低SETBMDI;关中SETBHIGHT;关高CALLDY20MS;保证三个SCR全部为关断状态CLRMDICLRLED_MCLRDANG02AJMPMAIN;跳转到;-;高档控制QIANGFENG:JNBDANG03,FAN0SETBLLOW;关低SETBMDI;关中SETBHIGHT;关高CALLDY20MS;保证三个SCR全
21、部为关断状态CLRHIGHTCLRLED_HCLRDANG03AJMPMAIN;跳转到;-;彩灯控制;-KEY2:CJNEA,#02H,KEY3;K4的处理程序彩灯的处理程序JBPLAP,LED1CLRLLAP;第一次按时将彩灯打开,CLRLED_LAPSETBPLAPJMPMAIN;返回LED1:SETBLLAP;第二次按时将彩灯关断SETBLED_LAPCLRPLAPJMPMAIN;跳转到;-;风类处理过程;-KEY3:CJNEA,#03H,KEY4_A;K3的处理程序处理风类JBSMF,SKEEPJBZCF,SPRING_AJBZRF,WATERMJMPMAINKEY4_A:JMPKEY
22、4SPRING_A:JMPSPRING;-;自然风控制WATERM:JNBZRF,FAN1CLRZRFSETBLLOW;处理自然风,关低中高SETBMDISETBHIGHTJBLREC,ZHUAN0;查询JBLKEYON,ZHUAN0;查询CALLDY6SCLRLLOWJBLREC,ZHUAN0;查询JBLKEYON,ZHUAN0;查询CALLDY6SSETBLLOW;关低中高SETBMDISETBHIGHTJBLREC,ZHUAN0;查询JBLKEYON,ZHUAN0;查询CALLDY20MSCLRMDIJBLREC,ZHUAN0;查询JBLKEYON,ZHUAN0;查询CALLDY6SSE
23、TBLLOW;关低中高SETBMDISETBHIGHTJBLREC,ZHUAN0;查询JBLKEYON,ZHUAN0;查询CALLDY20MSCLRHIGHTCALLDY6SAJMPWATERMZHUAN0:SETBSMFFAN1:JMPMAIN;-;睡眠风控制SKEEP:JNBSMF,FAN2CLRSMFSLEEP1:SETBLLOW;处理睡眠风,关低中高SETBMDISETBHIGHTJBLREC,ZHUAN1;查询JBLKEYON,ZHUAN1;查询CALLDY6SCLRLLOW;开低档JBLREC,ZHUAN1;查询JBLKEYON,ZHUAN1;查询CALLDY10SSETBLLOW
24、;关低中高SETBMDISETBHIGHTJBLREC,ZHUAN1;查询JBLKEYON,ZHUAN1;查询CALLDY10SCLRMDI;开中档JBLREC,ZHUAN1;查询JBLKEYON,ZHUAN1;查询CALLDY10SSETBLLOW;关低中高SETBMDISETBHIGHTJBLREC,ZHUAN1;查询JBLKEYON,ZHUAN1;查询CALLDY10SSETBLLOW;关低中高SETBMDISETBHIGHTJBLREC,ZHUAN1;查询JBLKEYON,ZHUAN1;查询CALLDY10SCLRHIGHT;开高档JBLREC,ZHUAN1;查询JBLKEYON,ZH
25、UAN1;查询CALLDY10SSETBLLOW;关低中高SETBMDISETBHIGHTJBLREC,ZHUAN1;查询JBLKEYON,ZHUAN1;查询CALLDY10SAJMPSKEEPZHUAN1:CLRSMFSETBZCFFAN2:JMPMAIN;-;正常风控制SPRING:JNBZCF,FAN3CLRZCFSPRING1:SETBLLOW;处理正常风,关低中高SETBMDISETBHIGHTCALLDY20MSCLRLLOW;开低档JBLREC,ZHUAN2;查询JBLKEYON,ZHUAN2;查询CALLDY10SSETBLLOW;关低中高SETBMDISETBHIGHTLCA
26、LLDY20MSJBLREC,ZHUAN2;查询JBLKEYON,ZHUAN2;查询CLRMDI;开中档CALLDY10SSETBLLOW;关低中高SETBMDISETBHIGHTLCALLDY20MSJBLREC,ZHUAN2;查询JBLKEYON,ZHUAN2;查询CLRHIGHT;开高档CALLDY10SAJMPSPRINGZHUAN2:CLRZCFFAN3:JMPMAIN;-;定时控制;-KEY4:CJNEA,#04H,KEY5;K4的定时的处理程序JBSJ01,DY1HJBSJ02,DY2HJBSJ03,DY4HJNBSJ00,FAN4CLRSJ00SETBTR0;0 5H处理JMP
27、MAINDY1H:JNBSJ01,FAN4CLRSJ01SETBTR0JMPMAINDY2H:JNBSJ02,FAN4CLRSJ02SETBTR0JMPMAINDY4H:JNBSJ03,FAN4CLRSJ02SETBTR0FAN4:JMPMAIN;-;开关机;-KEY5:CJNEA,#05H,POTHER;开关机处理程序JBKAI,GUANCLRMDICLRLED_MSETBKAIJMPMAIN;返GUAN:SETBLLOW;关低中高SETBMDISETBHIGHTCLRKAIJMPMAINPOTHER:JMPMAIN;其他键的不处理直接返回;=;T0定时中断处理;=LP0:PUSHACC;中
28、断处理PUSHPSWMOVTH0,#3CH;定时50MSMOVTL0,#0B0HDJNZCUZHI,GRET;1S到后向下执行MOVCUZHI,#20;给50MS的寄存器给初值INCSENMOVA,SENCJNEA,#60,GRET;1分钟到后向下执行INCMINMOVA,MINJBSJ01,LOOP_1H;定时1小时的处理JBSJ02,LOOP_2H;定时2小时的处理JBSJ03,LOOP_4H;定时4小时的处理CJNEA,#30,GRET;半小时到后向下执行MOVP1,#0FFH;关断所有档位MOVP0,#0FFHSETBSJ01;将1H的标志位进行置 1JMPGRETLOOP_1H:CJ
29、NEA,#60,GRET;1小时到后向下执行MOVP1,#0FFHMOVP0,#0FFHCLRSJ01;将1H的标志位进行置 0SETBSJ02;将2H的标志位进行置 1JMPGRETLOOP_2H:CJNEA,#60,GRET;1小时到后向下执行INCHOURMOVA,HOURCJNEA,#2,GRETMOVP1,#0FFH;关断MOVP0,#0FFHCLRSJ02;关断2H的标志位SETBSJ03;将4H的标志位进行置位JMPGRET;中断返回LOOP_4H:CJNEA,#60,GRET;1小时到后向下执行INCHOURMOVA,HOURCJNEA,#4,GRET;4小时到后向下执行MOVP1,#0FFH;关断MOVP0,#0FFHCLRSJ03;将4H的标志位进行清零JMPGRET;中断返回GRET:CLRTR0POPPSWPOPACCRETI;=;INT0中断处理程序:对接收数据进行接收;=JISH_INT0:PUSHACCPUSHPSWCLREX0;关断中断MOVR6,#10;避开9MS时间的引导码SB:CALLDY882USJBP3.2,EXIT;,EX检测为1时退出DJNZR6,SB;检测为0时,引导码过JNBP3.2,$;检测为0时,等待ACALLDY4700US;避开4。5MS时间的引导码MOVR7,#16