电风扇红外遥控源程序
家用电风扇的无线遥控电路设计(3)

创新训练家用电风扇的无线遥控电路课程设计报告姓名:学号:指导教师:学院:机电工程学院专业:机械设计制造及其自动化完成日期:2014年7月5日摘要系统采用了PT2262和PT2272作为无线发射和接收,和单片机AT89S52作为控制系统,现简单地介绍了红外线遥控发射、接收系统的原理,以及完整的51汇编程序代码。
包括发射、接收的原理图及其编程的主程序、发送程序、接收程序、定时中断程序的流程过程,从而完成此设计的要点,参考流程方框图的构思过程,可以编写应用软件。
遥控电风扇控制系统分为两大部分:遥控器和电风扇控制板,下面分别加以描述。
关键字:PT2262、PT2272、AT89S52SummaryThe system USES PT2262 and PT2272 as wireless transmission and reception, and monolithic integrated circuit AT89S52 as control system, is simply introduces the infrared remote transmitting and receiving system, and the principle of 51 assembler code intact. Including transmitting and receiving the principle diagram and the programming of the main program, sending and receiving procedures, timing program interrupt program flow process, thus completing the design process, the main points of reference block design process, can write applications. Remote electric control system is divided into two parts: the remote control, and the fanner described below respectively.Key words: PT2262, PT2272 and AT89S52 devices目录一、系统方案论证与比较 11.要求 12.遥控电路的选择 13.主控电路选择 1二、电路模块的设计与分析 31.系统的设计分析 32.单片机控制电路 33.遥控发射电路 44.接收模块 45.外围电路 4三、系统软件设计 6系统软件流程图 6四、系统测试与分析 7调试过程 7参考文献 8致谢 9一、系统方案论证与比较1.要求:①设计并制作一个无线家用风扇控制器,控制器面板为:按钮3个,为风速、风种和开关;LED指示灯6个,指示风速为强、中、弱,风种为睡眠、自然和正常,遥控有效距离大于10米。
单片机综合实验(基于单片机实现风扇红外遥控电路的设计)

攀枝花学院专业基础综合实验报告基于单片机实现风扇红外遥控电路的设计二〇一三年六月摘要电风扇作为一种价格便宜、体积小巧的清热解暑的家用电器,在家庭中的普及率非常高,其技术的发展也越来越成熟。
本文介绍了一种利用红外无线遥控来对电风扇调速定时的设计方法。
整个系统的核心部分就是红外遥控和单片机控制。
系统以AT89S51单片机为控制器,通过红外接收管接收遥控器信号,单片机解码后进行相应的控制。
控制方面包括两个方面:自动控制和手动控制。
自动控制状态下风扇根据温度自动调档;手动控制状态下通过遥控器定时和调速。
系统的温度测量采用DS18B20数字温度传感器,定时采用DS1307时钟芯片。
当前的时间和温度都可以通过液晶显示器显示。
关键词红外遥控单片机定时AbstractInfrared remote control circuit has now become a circuit design fashion, remote electric control fan in the early 90s has set up a file in the pearl river delta of guangdong began the research, development and production ,is simply introduced the infrared remote control transmitting and receiving system principle, through the infrared system control fan operation, this design based on the demand of the market combined with infrareds remote control design ,simple, cheap, easy characteristics ,with the dedicated remote control launch receiver chips ,based on this design a simple intelligent infrared remote control electric fan system ,including receiving and launch of two parts.Key word: infrared; remote control ; fan.目录摘要 (2)Abstract (3)1引言 (5)2方案设计 (5)2.1方案比较与选择 (5)2.1.1遥控方式选择 (5)2.1.2定时方案选择 (6)2.2设计方案 (6)3系统硬件设计 (7)3.1硬件设计应用环境简介 (7)3.2红外遥控单元 (8)3.2.1红外简介 (8)3.2.2遥控电路设计 (9)3.3单片机控制单元 (10)3.3.1单片机简介 (10)3.3.2单片机控制电路 (11)3.4时钟单元 (12)3.4.1DS1307简介 (12)3.4.2时钟电路设计 (13)3.5测温单元 (13)3.5.1DS18B20简介 (13)3.5.2测温电路设计 (14)3.6液晶显示单元电路 (15)3.7风扇档位控制单元 (17)4系统软件设计 (17)4.1软件的设计的架构 (17)4.1.1程序设计应用环境 (17)4.1.2软件设计流程图 (18)4.2主控程序的设计 (19)4.3各功能模块程序的设计 (21)4.3.1读取时间数据程序设计 (21)4.3.2读取温度数据程序设计 (22)4.3.3读取红外信号程序设计 (23)4.3.4显示程序设计 (23)5 硬件制作 (24)5.1元件清单 (24)5.2制作与调试 (25)5.2.1焊接 (25)5.2.2出现的问题 (25)附录 (27)电路原理图 (27)PCB图 (28)实物图 (29)参考文献 (30)程序如下 (31)致谢 ........................................................................................................ 错误!未定义书签。
疯狂博士科学实验红外遥控风扇,教程

疯狂博士科学实验红外遥控风扇,教程1.将双节电池盒正极(红色导线)和接收管短脚(蓝色导线)同时接在马达的一个接线孔内,并把三极管的集电极c极(蓝色导线)连接在马达的另一接线孔内。
将电池盒的负极(黑色导线)与三极管的发射极(e极)相连。
2.红外线灯接好之后将马达装入组装好的红色的风扇架子的圆框里面。
3.把组装好红色的风扇架子和电池盒用小螺丝固定在底盘上,将红色的导线和黑色的导线整理好,红外线灯头朝向一边。
4.把扇叶安装到红色的风扇架子的圆框马达轴上固定好安装上电池。
将发射管的长脚与单节电池盒的正极(红色导线)连接在一起,短脚与电池盒的负极(黑色导线)连接在一起。
5.装上电池,用发射管对着接收管,风扇就转起来了。
距离越近风扇转动的越快哦!总结回顾红外线遥控风扇之所以用遥控光源可以控制的主要原因是光敏二极管接收到红外线后连通了电路,使风扇开始工作。
拓展表达(1)拓展视野:红外线是波长比红光长的非可见光,它透过云雾的能力比可见光强,因为红外线波长较长(无线电、微波、红外线、可见光,波长按由长到短顺序),给人的感觉是热的感觉,可以产生热效应,因此我们可以利用红外线的这种特质来烧烤食物,使有机高分子发生变性。
同时红外线在通讯、探测、医疗、军事等方面有广泛的用途。
因为红外线的穿透能力强,能够深入人体的皮下组织,利用红外线反应,能够使皮下深层皮肤温度上升,扩张微血管,促进血液循环,强化血液及细胞组织代谢,对细胞恢复年轻有很大的帮助,并能改善贫血、调节血压。
(2)表达知识:红外线遥控电风扇,顾名思义,是由红外线控制风扇的开关。
风扇上装有红外线光敏开关,当红外线照射在光敏开关上,开关接通,电路形成通路,电风扇开始工作。
要使电风扇停止工作,用手遮住光敏开关,使其不能接收到红外线,这时光敏开关断开,电风扇就停止工作了。
由于太阳光和白炽灯含有较强的红外线,当电风扇对着阳光和白炽灯时,光敏开关也会接通,风扇同样可以工作。
51单片机多功能红外遥控电风扇(自然风+阵风+多档风速+定时)

51单片机多功能红外遥控电风扇(自然风+阵风+多档风速+定时)#include "AT89x051.H"#define uchar unsigned char#define uint unsigned int#define b1 0xe200#define b2 0xe210#define b3 0xe208#define b4 0xe218#define b5 0xe204#define b6 0xe214#define b7 0xe20c //阵风#define b8 0xe21c //自然风#define b9 0xe280 //自动档#define on_off 0xe240 //电源开关#define ch_a 0xe250 //加档#define ch_s oxe248 //减档#define time 0xe2e8 //定时#define louver 0xe24c //转页#define count_num 500 //显示次数#define time1_num 18000#define time2_num 100#define bell P3_4#define c_f 0xd4 //"F"#define c_h 0xce //"H"#define c_g 0x81 //"="uint time1=time1_num; //18000*100*2ms=1huchar time2=time2_num;uint count=count_num; //显示次数uchar sort=3; //显示offuchar dis_bit=0; //显示的位uchar code_length=16;uchar data dis[4]={0x02,0x02,0x00,0xff}; //显示数据区uchar temperature;uint code_t=0;uchar code1=0;uchar code2=0;bit bdata code_start=0; //代码起始标志bit bdata button=0; //无键按下bit bdata i_flag=0; // 有无中断标志bit bdata t_flag=0;//测温标志bit bdata bt=0; //判断是否是定时键bit bdata off=0; //为0无定时uchar code TAB[11]={0x5f,0x0a,0x9d,0x9b,0xca,0xd3,0xd7,0x5a,0xdf,0xdb,0x 75};void timer_0(void);void dis_t(void); //温度显示void dis_s(void); //档位显示void dis_h(void); //时间void dis_off(void); //关机显示void delay(uint t); //延时uchar d_code(uint t); //解码uchar begin=0; //开始补偿void c_code(void); //键号转换void off_time(void); //定时关void measure_temperature(void);void key_time(void); //定时按钮void sort_key(void); //风类按钮void mov_p1(uchar t0,t1,t2); //显示void button_process(void); //按键处理//********定时关机*********void off_time(void){if(off==1){if(time1--==0){time2--;time1=time1_num;}if(time2==0){dis[3]=dis[3]-1;time2=time2_num;}if(dis[3]==0){code_t=on_off; //关机c_code();}}}//********定时器0中断********* void timer0() interrupt 1 using 2 {off_time();if(dis_bit==0&&t_flag==0){key_time();sort_key();}switch(sort){case 0:if(count!=0){mov_p1(dis[0],dis[1],TAB[10]); //显示温度count--;}break;case 1:if(count!=0){mov_p1(c_f,c_g,TAB[dis[2]]); //显示档位count--;}break;case 2:if(count!=0){dis_h(); //显示时间count--;}break;case 3:mov_p1(0x5f,c_f,c_f);//显示关机default:break;}timer_0();if(count==0) //轮流显示{P3_0=P3_1=P3_5=1;if(i_flag==0&&t_flag==0) measure_temperature();count=count_num;sort=(sort&0x03)+1;if(sort>=3)sort=0; //完成一轮显示}}//***********定时按钮************ void key_time(void){bit i=P1_2;P1_2=1;if(P1_2==0){delay(50);if(P1_2==0) //确认有按键{bell=0;delay(100);bell=1;while(P1_2==0){;}if(dis[3]==0xff){dis[3]=1;off=0; //取反后为1,定时}else{if(dis[3]<9){dis[3]=dis[3]+1;off=0; //取反后为1,定时}elseoff=1; //取反后为0,取消定时}sort=2;code_t=time; //显示时间c_code();//bt=0; //恢复}}P1_2=i;i_flag=0; //恢复执行其它任务}//***********换档按钮************ void sort_key(void){bit i=P1_1;P1_1=1;if(P1_1==0){delay(50);if(P1_1==0){button=1;bell=0;delay(200);bell=1;while(P1_1==0){;}if(dis[2]<9){dis[2]=dis[2]+1;code2=dis[2];}else{dis[2]=0;code2=10; //power off}delay(100);sort=1;count=5000;//TF0=1;}}P1_1=i;i_flag=0; //恢复执行其它任务}//********定时器1中断测温************ void timer1() interrupt 3 using 3{uint temp;TR0=0; //计数停TR1=0; //定时停temp=TH0*256+TL0; //取温度值temperature=(7000-temp)/11; //计算温度//if(dis[2]!=0)// temperature--; //工作时补偿1度/*if(F0==0&&begin<=10) //开始温度加3度temperature+=3;if(F0==0&&begin<=60&&begin>10) temperature+=2;if(F0==0&&begin<=150&&begin>60) temperature+=1;*/dis[0]=TAB[temperature/10];dis[1]=TAB[temperature%10];IE0=0;t_flag=0;timer_0();EX0=1;}//**********判断代码************ uchar d_code(uint t){if(t<=0x220&&t>=0x190)return 0;else{if(t<=0x430&&t>=0x390)return 1;elsereturn 0xff;}}//***********键号转换************ void c_code(void){bit bdata i=0;switch(code_t){case b1:code1=1;break;case b2:code1=2;break;case b3:code1=3;break;case b4:code1=4;break;case b5:code1=5;break;case b6:code1=6;break;case b7:code1=7;break;case b8:code1=8;break;case b9:code1=9;break;case on_off:code1=10; //关机dis[3]=0xff;//#####标志复位############ button=0; //无键按下i_flag=0; // 无中断标志bt=0; //无定时键按下off=0; //无定时time1=time1_num; //定时初值复位time2=time2_num;count=count_num; //显示次数break;case time:off=~off;if(off==0)dis[3]=0xff; //取消定时i=1;bt=1;count=5000; //延长显示sort=2; //显示时间TF0=1;break;case louver:P3_3=~P3_3;code1=code2;break;default:code1=0;break;}if(bt==1&&i==0) //装载代码{if(code1<9) //定时最大9h {dis[3]=code1;bt=0;}}elseif(i==0){code2=code1;count=5000; //延长显示if(code1==10){dis[2]=0; //F=0sort=3; //显示关机}else{dis[2]=code1;sort=1; //显示风类}TF0=1;}}//*********** 接收代码中断 ************void receive_code() interrupt 0 using 1{uint temp,i;ET0=0;i_flag=1; //暂停其它任务if(TR1==0){TR1=0;TMOD=0x11;TH1=TL1=0;TR1=code_start=1;}else{TR1=code_start=0;temp=TH1*256+TL1;if((d_code(temp)==0||d_code(temp)==1)&&code_length!=0) {TH1=TL1=0;TR1=code_start=1;code_t=(code_t<<1)+d_code(temp);code_length--;}else{if(code_length==0&&((code_t&0xff00)==0xe200)) //除掉误码{code_length=16;bell=0; //正确收到,响声提示c_code(); //转换代码for(i=0;i<6000;i++){EX0=0;P3_0=P3_1=P3_5=1;if(i>800)bell=1;IE0=0;if(P3_2==0)i--;button=1; //有按键需要处理}i_flag=0; //恢复执行其它任务}else //误码{code_length=16;for(i=0;i<6000;i++){IE0=0;if(P3_2==0)i--;i_flag=0; //恢复执行其它任务}}timer_0();EX0=1;}}}//***********显示代码送P1口************ void mov_p1(uchar t0,t1,t2){switch(dis_bit){case 0:P1=t0;P3_1=P3_5=1;P3_0=0;dis_bit=1;break;case 1:P1=t1;P3_0=P3_5=1;P3_1=0;dis_bit=2;break;P1=t2;P3_1=P3_0=1;P3_5=0;dis_bit=0;break;}}//***********显示定时时间************ void dis_h(void){switch(dis_bit){case 0:P1=c_h; //"H"P3_1=P3_5=1;P3_0=0;dis_bit=1;break;case 1:P1=c_g; //"="P3_0=P3_5=1;P3_1=0;dis_bit=2;break;case 2:if(dis[3]>10) //无定时P1=TAB[0]; //显示H=0elseP1=TAB[dis[3]];P3_1=P3_0=1;P3_5=0;dis_bit=0;break;}}//********定时器0************ void timer_0(void){TMOD=0x01; //T0定时方式1 TR0=0;TH0=0xfc;TL0=0x55; //2ms ET0=1;TR0=1;}//*********** 延时 ************ void delay(uint t){uint i,j;for(i=0;iif(button==0)for(j=0;j<10;j++);}//*********** 测温度 ************void measure_temperature(void){t_flag=1;ET1=1;EX0=0;ET0=0;TMOD=0x15; //T0计数方式1,T1定时方式1 TH1=0x3c;TL1=0xb0; //置初值100msTH0=0x00;TL0=0x00; //清零TR0=1; //计数开始TR1=1;}//***********风速 ************void s1(void){P3_7=0;}void s2(void){P3_7=0;delay(230);P3_7=1;delay(25);}void s3(void){P3_7=0;delay(180); P3_7=1; delay(40);}void s4(void) {P3_7=0; delay(130); P3_7=1; delay(40);}void s5(void) {P3_7=0; delay(90);P3_7=1; delay(40);}void s6(void) {P3_7=0; delay(50);P3_7=1; delay(50);}void gust(void) //阵风{uchar i,j;if(button==1) //中止任务j=255;elsej=0;//P3_7=0;//delay(5000);for(i=j;i<50;i++)s6();P3_7=0;delay(5000);for(i=j;i<25;i++)s2();for(i=j;i<35;i++)s3();for(i=j;i<25;i++)s5();delay(6000);}void natural(void) //自然风{uchar i;uchar code *p; //随机数for(i=0;i<100;i++){if(button==0) //有键按下,中止当前任务{P3_7=0;delay((*p++)*8); //放大P3_7=1;if(*p<10)delay(7000); //低速档时间补偿elsedelay(300);}}}void automation(void) //自动档{if(temperature<=29)s6();elseif(temperature<=30)gust();elseif(temperature==31)s5();elseif(temperature==32)s4();elseif(temperature<=33)s3();if(temperature==34)s2();elses1();}//***********按键处理 ************ void button_process(void){button=0;switch(code2){case 1:s1();break;case 2:s2();break;case 3:s3();break;case 4:s4();break;case 5:s5();break;case 6:s6();case 7:gust();break;case 8:natural();break;case 9:automation();break;case 10:P3_7=1; //关风扇P3_3=1; //关转页break;default:break;}}//********************************** //***********主程序开始 ************ //**********************************void main(void){EA=1;IT0=1; //边沿触发EX0=1; //外部中断0允许measure_temperature();delay(1000);timer_0();while(1){if(F0==0&&begin<255) begin++;elseF0=1;button_process();}}。
红外遥控电风扇的设计

随着社会的不断发展、科技的不断进步、人们生活水平的不断提高,先前的产品还存在很多的不足,已经不能再满足人们的需求,那么就迫切要求新产品的问世。为了解决上述问题,本论文开发了红外遥控电风扇控制电路的课题,即采用红外遥控器来控制电风扇。红外遥控电风扇控制电路是利用红外发射器发射的信号通过译码电路,由控制电路来进行有效的功能控制。该装置与红外遥控传统产品比较具有控制性好、灵敏度高等特点。
再此之后,随着我国科学技术的发展和人民生活水平的迅速提高,电风扇的品种也开始日益丰富。台扇、地扇、吊扇、壁扇,根据不同场合的需求,电风扇不仅从外型到控制方式都有了不少改变。从最开始的旋钮、按钮控制方式到之后的触摸式操作。扇页材质也从最开始的金属材质换成塑料材质。
如今,电风扇是夏季家庭必备的电器设备之一。在家电市场上,各种规格,式样的电风扇一直是广大消费者十分关注的商品。近几年,电风扇发展速度很快,随着电子技术与传感技术的发展,电风扇不断向高档次,电子控制及能产生模拟自然风方向发展。
自然风的处理流程 :
图3.3自然风循环
睡眠风的处理流程:
图3.4自然风的循环图
正常风的处理流程:
图3.5正常风循环
3.3 51系列单片机功能特点
(1)主要特性·与MC源自-51 兼容·4K字节可编程闪烁存储器
·寿命:1000写/擦循环
·数据保留时间:10年
·全静态工作:0Hz-24Hz
·三级程序存储器锁定
智能红外遥控电风扇的设计

1.前言电风扇简称电扇,香港称为风扇,日本及韩国称为扇风机,是一种利用电动机驱动扇叶旋转,来达到使空气加速流通的家用电器,主要用于清凉解暑和流通空气。
广泛用于家庭、办公室、商店、医院和宾馆等场所。
电风扇价格低和耗电量小,拥有庞大的目标消费群。
现在市面上的风扇大多只能通过主控板上的按键实现风扇的控制,控制方式又以模拟调控为主要控制手段,功能简单,智能化以及便捷性程度远远跟不上现代人的生活需求。
一般的风扇的电机是采用多抽头交流电机,通过手动直接控制抽头的选择实现调速,这种控制方式电路复杂、操作不便而且效率也不高。
而采用单片机控制可控硅的导通角来调节电机速度的遥控电风扇作为消费市场的新宠儿,为电风扇行业增加新的亮点。
单片机和一般的数字和模拟芯片相比有着强大的功能,而且编程简单,因此利用单片机来实现对控制电机转速十分理想;本设计的研究目的就是实现对交流电机的控制来模拟风扇控制器;掌握单片机硬件和软件的综合设计方法。
硬件部分包括有单片机最小系统、键盘输入部分、外接电机驱动部分、输出显示部分、红外发送接收部分、语音提示部分。
软件部分包括有初始化状态、控制输出显示、信号产生与调制部分、占空比控制、中断控制、键盘输入部分部分。
本论文共分九章,详细地介绍了红外遥控电风扇系统。
重点介绍红外遥控信号的产生、发射、接收、应用的原理和特性。
本文中,首先提出了几种可行的方案,并进行了项目的可行性分析,选择合适的方案,然后就该方案入手,先后介绍了硬件、软件电路的设计。
最后,通过对调试结果的分析,得出结论,进行了项目设计的总结。
本论文使读者可以明白项目设计的过程,设计中由于时间的仓促以及本人水平的局限,项目设计难免有不足之处,恳请各位老师、同学给予指正。
2.项目分析家用电器发展的一个重要方面是让用户界面更加人性化,使用更加方便自然,做到老年人和残疾人也可以无障碍地使用。
电风扇作为传统的家用电器,在百姓日常生活中有着很大的作用。
自己写的51单片机的红外线遥控接收程序(C语言)

//51单片机做的红外遥控实验(C语言)#include<reg51.h>#define u8 unsigned char#define u16 unsigned int#define ID 0x00 //本遥控器的ID号sbit ir=P3^3;code u8 seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0-9的段码code u8 s[]={1,0x40,0x48,0x04,0x02,0x05,0x54,0x0A,0x1E,0x0E}; u8 buf[4];bit ir_f=0;u8 nu;void delay(u16 x){while(x--);}void show(u16 x){u8 i=0,k=0;u8 s[4];kk:s[i]=x%10;if((x/10)>=1){x=x/10;i++;goto kk;}k=i+1;for(i=0;i<k;i++){P0=seg[s[i]];P2=~(8>>i);delay(300);P0=0XFF;P2=0XFF;}}void timer0_init(){TH0=0;TL0=0;TMOD|=0x01;TR0=0;}u16 low_test(){u16 t;TR0=1;while((ir==0)&&((TH0&0X80)!=0X80));TR0=0;t=TH0;t<<=8;t|=TL0;TH0=0;TL0=0; //t=(TH*256+TL0);//机器周期数return t;}u16 high_test(){u16 t;TR0=1;while((ir==1)&&((TH0&0X80)!=0X80));TR0=0;t=TH0;t<<=8;t|=TL0;TH0=0;TL0=0;return t;}/*u16 time_test(bit x){}*/u8 receive_8bit(){u8 d,i;u16 t;for(i=0;i<8;i++){t=low_test();t=high_test();d>>=1;if((t>=2750)&&(t<=3100)){d|=0x80;}}return d;}void ir_decode(){u16 t;u8 i;if(ir==0)//有遥控信号{t=low_test();//8295-9000us,倍频的是16590-18000if((t>=14500)&&(t<=18000))//检查引导码低电平时间{t=high_test();if((t>=8000)&&(t<=9000))//检查高电平{for(i=0;i<4;i++){buf[i]=receive_8bit();}if(buf[0]==(~buf[1]))//检查系统码是否正确{if(buf[0]==ID){if(buf[2]==(~buf[3])){//具体按键处理ir_f=1; //遥控有效}}}}}}}/*void key(){if(buf[2]==0x40){P1^=(1<<0);}if(buf[2]==0x48){P1^=(1<<1);}}*/void ir_execuse(){if(ir_f==1){switch(buf[2]){case 0x40:P1^=(1<<0);break;case 0x48:P1^=(1<<1);break;case 0x04:P1^=(1<<2);break;case 0x02:P1^=(1<<3);break;case 0x05:P1^=(1<<4);break;case 0x54:P1^=(1<<5);break;case 0x0A:P1^=(1<<6);break;case 0x1E:P1^=(1<<7);break;}ir_f=0;}}void show_d(){u8 j;for(j=0;j<10;j++){if(s[j]==buf[2]){nu=j;break;}}show(nu);}void isr_init(){EA=1;EX1=1;//外部中断,一直看3.3有没有下降沿。
电风扇智控系统(源代码)

uchar speed,rate,gear;//全局速度
uchar minute,second,second1,min,sec,via;
uint ms,ms1;
bit flag; //定时开启标志
uchar watch=60,a,b=6,c;//定时变量,默认一小时,最长三小时(可任意设置)
speed=0;
TR0=0;//关T0
}
speaker=1;//关闭蜂鸣器
}
/*------------------定时器0产生pwm-----------------*/
void Timer0() interrupt 1
{
TR0=0;
TH0=0xfe;
TL0=0x33;
num0++;
key_scan();//按键扫描
#define T 100//脉冲周期,100ms
#define M (T/2) //半个周期
#define Min_speed 48//最小速度
#define Max_speed 100//最大速度
#define pwm_div 10 //pwm间隔
sbit pwm=P1^0;//电机控制端
sbit k0=P3^4;//功能键
}
else{second1=0;}
break;
case 3://Motor_pwm(56);/*................睡眠风````````^^^3^^^^^*/
ms1++;
if(ms1==1000)
{P0=0xbf;
ms1=0;
speed-=4;
second1++;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
;=============电风扇红外发射(遥控器)程序=====================================;按键说明:;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 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 PINT01DJNZ 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 FMOUTGRET: 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 ;查询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 ;查询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 ;查询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的标志位进行置 0 SETB 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。