




已阅读5页,还剩43页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
红外遥控电风扇控制系统设计概述 遥控电风扇是 90年代初期在广东珠江三角洲地区作做大量的研发和生产,并有专门的掩模芯片作为主控芯片使用,现本人用单片机作了接收和发射的配套使用的系统方案。红外遥控电路现在已成为一种设计电路的时尚,现简单地介绍了红外线遥控发射、接收系统的原理,给出用 89c2051作为遥控接收系统解码器的一种巧妙实现方法,以及完整的51汇编程序代码。包括发射、接收的原理图及其编程的主程序、发送程序、接收程序、定时中断程序的流程过程,从而完成此设计的要点,参考流程方框图的构思过程,可以编写应用软件。遥控电风扇控制系统分为两大部分:遥控器和电风扇控制板,下面分别加以描述。一、遥控器 为了能远离距的控制电风扇,采用了红外遥控器。通常红外遥控器由发射和接收两部分组成,发射部分由单片机 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号电池来提供电源,并用一个二极管(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”的个数不同而不同,大约在4563ms之间。(4)其相关的波形图如下:(图 2)遥控编码4.硬件设计硬件设计见电路原理图(3)所示。(图3)遥控器电路原理图5.软件设计(1)采用中断的处理程序完成整个系统的操作,int0中断处理完成键盘扫描以及发送。(2)程序流程图:(图 4)遥控器软件流程图二、 电风扇控制板1.工作原理及组成部分: 红外接收部分包括光电转换放大器、解调、解码电路。(1)cpu板将单片机、控制、键盘组合在一起完成了人机对话。 用 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) 自然风的循环图睡眠风的处理流程 :( 图 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;采用 41.5v 供电,用89c2051作cpu芯片,当没有按键按下时,进入待机状态;按键采用int0进行中断,只采用了8个按键;=$include(2051ram.inc);$include(reg51.inc)org0000hjmpmainorg0003h;int0的中断入口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;送初值setbfmoutclrtr0;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;取列号jcpint01decr1djnzr3,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;发送一帧数据.包括系统码和数据码clrtr0;当发送完后关断定时器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次mova,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,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文件内容;-; at89c2051 内存ram分配 fiel = 2051ram.inc;-$save$nolistr31data1fhkeyonbit20h.0;按键按下的标志sendbufdata30h;定义发送系统码缓冲的地址fmoutbitp3.3;38k输出dataoutbitp3.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)org0000hjmpstartorg0003hjmpjish_int0;红外遥控中断设置org000bhjmplp0;定时中断org0013hjmpkey_int1;按键中断org0100hstart:movr0,#7fh;预使用单元清0clramain0:movr0,adjnzr0,main0movsp,#60hmovtmod,#01hmovth0,#3ch;定时50msmovtl0,#0b0hsetbllow;关低风setbmdi;关中风setbhight;关高风setbllap;关彩灯movp0,#0ffh;关所有的指示灯setbex0setbex1setbea;cpu开中main:jblkeyon,keyhandle;检按键标志位jbrec,keyhandle;检接收中断标志位jmpmain;转主程序;=;键值的处理的程序;键盘处理程序;k1键:完成弱、中、强控制,相应的指示灯点亮;k2键:完成彩灯控制,相应的指示灯点亮;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;完成了低档的程序,关低setbmdi;关中setbhight;关高calldy20ms;保证三个scr全部为关断状态clrllow;开低风clrled_l;开低档指示灯clrdang01fan0:jmpmain;-;中档控制zhongfeng:jnbdang02,fan0setbllow;关低setbmdi;关中setbhight;关高calldy20ms;保证三个scr全部为关断状态clrmdiclrled_mclrdang02ajmpmain;跳转到;-;高档控制qiangfeng:jnbdang03,fan0setbllow;关低setbmdi;关中setbhight;关高calldy20ms;保证三个scr全部为关断状态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:jmpkey4spring_a:jmpspring;-;自然风控制waterm:jnbzrf,fan1clrzrfsetbllow;处理自然风,关低中高setbmdisetbhightjblrec,zhuan0;查询jblkeyon,zhuan0;查询calldy6sclrllowjblrec,zhuan0;查询jblkeyon,zhuan0;查询calldy6ssetbllow;关低中高setbmdisetbhightjblrec,zhuan0;查询jblkeyon,zhuan0;查询calldy20msclrmdijblrec,zhuan0;查询jblkeyon,zhuan0;查询calldy6ssetbllow;关低中高setbmdisetbhightjblrec,zhuan0;查询jblkeyon,zhuan0;查询calldy20msclrhightcalldy6sajmpwatermzhuan0:setbsmffan1:jmpmain;-;睡眠风控制skeep:jnbsmf,fan2clrsmfsleep1:setbllow;处理睡眠风,关低中高setbmdisetbhightjblrec,zhuan1;查询jblkeyon,zhuan1;查询calldy6sclrllow;开低档jblrec,zhuan1;查询jblkeyon,zhuan1;查询calldy10ssetbllow;关低中高setbmdisetbhightjblrec,zhuan1;查询jblkeyon,zhuan1;查询calldy10sclrmdi;开中档jblrec,zhuan1;查询jblkeyon,zhuan1;查询calldy10ssetbllow;关低中高setbmdisetbhightjblrec,zhuan1;查询jblkeyon,zhuan1;查询calldy10ssetbllow;关低中高setbmdisetbhightjblrec,zhuan1;查询jblkeyon,zhuan1;查询calldy10sclrhight;开高档jblrec,zhuan1;查询jblkeyon,zhuan1;查询calldy10ssetbllow;关低中高setbmdisetbhightjblrec,zhuan1;查询jblkeyon,zhuan1;查询calldy10sajmpskeepzhuan1:clrsmfsetbzcffan2:jmpmain;-;正常风控制spring:jnbzcf,fan3clrzcfspring1:setbllow;处理正常风,关低中高setbmdisetbhightcalldy20msclrllow;开低档jblrec,zhuan2;查询jblkeyon,zhuan2;查询calldy10ssetbllow;关低中高setbmdisetbhightlcalldy20msjblrec,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处理jmpmaindy1h:jnbsj01,fan4clrsj01setbtr0jmpmaindy2h:jnbsj02,fan4clrsj02setbtr0jmpmaindy4h:jnbsj03,fan4clrsj02setbtr0fan4:jmpmain;-;开关机;-key5:cjnea,#05h,pother;开关机处理程序jbkai,guanclrmdiclrled_msetbkaijmpmain;返guan:setbllow;关低中高setbmdisetbhightclrkaijmpmainpother:jmpmain;其他键的不处理直接返回;=;t0定时中断处理;=lp0:pushacc;中断处理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:cjnea,#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;避开系统码jjjja:jnbp3.2,$lcalldy882usmovc,p3.2;将p3.2送c中jncuuua;若c=0则转lcalldy1000usuuua:djnzr7,jjjjamovr1,#mrdmovr2,#2pp:movr3,#8;右移的次数jjjj:jnbp3.2,$;=0则等lcalldy882usmovc,p3.2;送c中jncuuulcalldy1000usuuu:mova,r1;送存贮的首址rrcamovr1,a;送存贮单元中djnzr3,jjjj;完成一个字节,没完则incr1djnzr2,ppmova,mrdcplacjnea,31h,exit;进行数据码和数据的反码进行比较exit:poppswpopaccsetblrec;置rec的标志位setbex0;打开int0的中断reti;=;int1的中断处理;=key_int1:pushaccpushpswclrex1;关断int1lcallscankeycallkey_k10;置高、中、低的标志位callfeng_3;置风类的标志位calljs;置定时时间标志位setblkeyon;按键标志位setbex1;打开中断位poppswpopaccreti;-;定时的置位标志程序;-js:clrsj00clrsj01clrsj02clrsj03mova,mrdcjnea,#04h,key_k4d;inctimemova,timecjnea,#5,key_k4movtime,#1key_k4:mova,timecjnea,#1,key_k4a;等1则置zrfsetbsj00jmpkey_k4dkey_k4a:cjnea,#2,key_k4b;等2则置smfsetbsj01jmpkey_k4dkey_k4b:cjnea,#3,key_k4c;等3则置zcfsetbsj02jmpkey_k4dkey_k4c:cjnea,#4,key_k4d;等3则置zcfsetbsj03jmpkey_k4dkey_k4d:ret;-;高中低档的置标志位子程序;-key_k10:clrdang01clrdang02clrdang03mova,mrdcjnea,#01h,key_k1c;incfengmova,fengcjnea,#4,key_k1movfeng,#1key_k1:mova,fengcjnea,#1,key_k1asetbdang01jmpkey_k1ckey_k1a:cjnea,#2,key_k1bsetbdang02jmpkey_k1ckey_k1b:cjnea,#3,key_k1csetbdang03jmpkey_k1ckey_k1c:ret;-;自然风、睡眠风、正常风的置标志位子程序;-feng_3:clrzrfclrsmfclrzcfmova,mrdcjnea,#03h,key_k3c;incfleimova,fleicjnea,#4,key_k3movflei,#1key_k3:mova,fleicjnea,#1,key_k3a;等1则置zrfsetbzrfjmpkey_k3ckey_k3a:cjnea,#2,key_k3b;等2则置smfsetbsmfjmp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 江西农业大学《员工招聘与素质测评》2023-2024学年第二学期期末试卷
- 建阳市2025年三下数学期末监测模拟试题含解析
- 云南省楚雄州双柏县一中2025届高三第十五次考试生物试题含解析
- 辽宁广告职业学院《生物化学基础》2023-2024学年第二学期期末试卷
- 中北大学《燃料及燃烧学》2023-2024学年第二学期期末试卷
- 天津农学院《自然地理学二》2023-2024学年第二学期期末试卷
- 图木舒克职业技术学院《广告提案》2023-2024学年第二学期期末试卷
- 阳江职业技术学院《工程数学1》2023-2024学年第二学期期末试卷
- 四川省乐山市2025年5月初三月考物理试题含解析
- 云南省昭通市永善一中2025年高三假期自主综合能力测试(一)生物试题含解析
- 糖尿病饮食与护理
- 2025年天津市河东区中考一模历史试题(原卷版+解析版)
- 河南省南阳市新未来联考2024-2025学年高一下学期4月期中物理试题(含解析)
- 《基于STM32的智能水质检测系统的设计》9400字(论文)
- 2025年医保政策考试:医保患者权益保障知识竞赛试题库
- 2025年江苏省期无锡市天一实验校初三5月模拟英语试题含答案
- 公路养护员工安全教育培训
- 中国普通食物营养成分表(修正版)
- 江苏省建筑与装饰工程计价定额(2014)电子表格版
- 在产业链建设调度推进会议上的讲话稿
- 医院感染管理科十四五发展规划
评论
0/150
提交评论