电风扇红外遥控源程序
家用电风扇的无线遥控电路设计(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小时经常都是睡到半梦半醒又被热醒了,只好拿风扇来“开刀”了,把它改成遥控三档八小时控制风扇,哈哈!如果朋友们也有这种困扰就不要等了马上开始行动吧!硬件联接与功能简介如下:;*****************************风扇控制程序*******************************;用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,再到不显示阿拉伯数字,循环。
红外遥控的程序
/*红外线接收程序,本程序运行在NEC制下的遥控器下,市面上的遥控器大部份都是NEC 制的,运行程序,按遥控器在数码管上显示相应的地址码-控制码(以16进制显示)分四段,前两段是地址码,后两段为控制吗,根据NEC编码不同,有的是前8位为数据码,后8位为数据据码的反码,有的是16位编码,就没有反码了*/#include <reg51.h>#include <intrins.h>sbit spk=P3^4;sbit hwx=P3^3; //定义红外接收脚,code unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};//共阴数码管0-9 a-f - 表unsigned char I_tmpdate[4]={0,0,0,0};//显示管数据unsigned char flag,tmp;unsigned char I_lhj[66]; //定义66位数组变量来存储接收的时间参数void delay();//延时子函数void display(unsigned char *Ip,unsigned char Ic);//数字的显示函数;lp为指向数组的地址,lc 为显示的个数void main(void) //入口函数{EA=1; //首先开启总中断EX1=1; //开启外部中断1IT1=1; // 设置成下降沿触发方式while(1){ //循环显示,接收都由display(I_tmpdate,4);if (flag==0x2f){I_tmpdate[0]=10;I_tmpdate[1]=10;I_tmpdate[2]=10;I_tmpdate[3]=10;spk=0;}if (flag==0x07){I_tmpdate[0]=1;I_tmpdate[1]=1;I_tmpdate[2]=1;I_tmpdate[3]=1;}if (flag==0x0b){I_tmpdate[0]=2; I_tmpdate[1]=2; I_tmpdate[2]=2; I_tmpdate[3]=2;} if (flag==0x0f) {I_tmpdate[0]=3; I_tmpdate[1]=3; I_tmpdate[2]=3; I_tmpdate[3]=3;}if (flag==0x13) {I_tmpdate[0]=4; I_tmpdate[1]=4; I_tmpdate[2]=4; I_tmpdate[3]=4;}if (flag==0x17) {I_tmpdate[0]=5; I_tmpdate[1]=5; I_tmpdate[2]=5; I_tmpdate[3]=5;}if (flag==0x1b) {I_tmpdate[0]=6; I_tmpdate[1]=6; I_tmpdate[2]=6; I_tmpdate[3]=6;}if (flag==0x5b) {I_tmpdate[0]=0; I_tmpdate[1]=0; I_tmpdate[2]=0; I_tmpdate[3]=0;spk=1;}if (flag==0x1f){I_tmpdate[0]=7;I_tmpdate[1]=7;I_tmpdate[2]=7;I_tmpdate[3]=7;}if (flag==0x23){I_tmpdate[0]=8;I_tmpdate[1]=8;I_tmpdate[2]=8;I_tmpdate[3]=8;}if (flag==0x27){I_tmpdate[0]=9;I_tmpdate[1]=9;I_tmpdate[2]=9;I_tmpdate[3]=9;}}}void display(unsigned char *Ip,unsigned char Ic)//显示{unsigned char i; //定义变量P2=0; //端口2为输出P1=P1&0xF8; //将P1口的前3位输出0,对应138译门输入脚,全0为第一位数码管for(i=0;i<Ic;i++){ //循环显示P2=table[Ip[i]&0x7f]; //查表法得到要显示数字的数码段if(Ip[i]>0x7f)P2+=0x80;delay(); //延时P2=0; //清0端口,准备显示下位if(i==7) //检测显示完8位否,完成直接退出,不让P1口再加1,否则进位影响到第四位数据break;P1++; //下一位数码管}}void delay(void) //空5个指令{unsigned char i=13;while(i)i--;}void hongwai(void) interrupt 2 //外部中断1 ,INT1(P3^3)连接红外线接收IC数据脚{unsigned char i,j,tmp;unsigned int tmp2;EX1=0;// hwx=1;j=33; //传送一组数包括引导码1位,地址码8位加反码8位,指令码8位加反码8位,总共33位i=0; //从第一维数组开始tmp2=0;while(!hwx){ //NEC制红外波形引导码低电平开始tmp2++; //低电平延时记数if(tmp2==1000) //NEC制引导码判断,防止其它干扰波形进入break;}if(tmp2<1000){ //小于1000个记数的判断为干扰退出接收EX1=1;return;}//P2=0x76; //数码管输出显示H,作为红外接收的指示while(j){ //循环接收33位数据,为何我们用到66位数组,我们可以不接收高电平时间常数,只接低电平常数就//可以判断1或0了,在这里我们都接收//还有一点要知道,接收波形是反向,在没有接收时端口为高电平tmp=0;I_lhj[i]=1; //时间量从1开始while(!hwx){ //检测高低电平的变化I_lhj[i]++; //没变继续加1delay(); //加入延时,是因为我们采用8位二进来存储,如果不加延时,时间量将计满tmp++; //此变量为防止干扰带来的死循环if(tmp==250)break;}i++;tmp=0;I_lhj[i]=1; //时间量从1开始while(hwx){ //检测高低电平的变化I_lhj[i]++; //没变继续加1delay(); //同上tmp++;if(tmp==250)break;}i++;j--;}i=255; //加入循环延时,处理数据while(i){tmp=255;while(tmp){P2=0XF0;tmp--;}i--;}tmp=0;//这里显示了全部的四段码,包括地址位两段,控制位两段,每段用点分开for(i=3;i<19;i++,i++){ //处理地址位前8位,这是3是因为去掉前面的引导码。
家用风扇控制器的设计与实现-风扇红外遥控器的设计
风扇红外遥控器的设计一、实验内容与要求设计并制作一个家用风扇控制器。
1.用六个发光二极管,指示风速强、中、弱,类型为睡眠、自然和正常。
2.处于主菜单状态时,有下列选项:(1) 直接默认状态运行,默认状态为:风速-“弱”,类型-“正常”。
(2) 进入风速子菜单界面,修改风速。
(3) 进入类型子菜单界面,修改风的类型。
08电气3班4. 风速的弱、中、强对应于电扇的转动由慢到快。
5. 类型的不同选08电气3班择,分别为:(1) 正常电扇连续运转;(2) 自然电扇模拟自然风,即转4s,停8s;(3) 睡眠电扇慢转,产生轻柔的微风,运转8s,停转8s;6. 按照风速与类型的设置输出相应的控制信号。
二、实验目的1.实现对步进电机的控制来模拟风扇控制器。
2.掌握微机硬件和软件的综合设计方法。
3.能控制风扇三个风速档位、风扇的启动和停止及旋转风向和固定风向几个基本功能3、总体设计08电气3班1.8253定时/计数器通道0定时控制步进速度,通道2和3定时电机的转停时间,8255的PA0控制步进电机的转停。
2.8255 的C口输出控制脉冲,经74452电路驱动电路。
B口输出控制LED显示风扇当前的状态。
4、实验报告要求1.设计目的和内容2.总体设计08电气3班3.硬件设计:原理图(接线图)及简要说明4.软件设计框图及程序清单5.设计结果和体会(包括遇到的问题及解决的方法)家用风扇控制器的设计与实现五、硬件设计由于本设计主要是用步进电机的控制来模拟家用08电气3班风扇控制器,所以电路是在步进电机控制系统的电路作了一些修改。
除利用了PC机本身资源外(如中断资源),还利用了平台上的8253计数/定时器、8255并行接口单元,LED指示灯电路等,再加上电机的驱动电路,便构成以风扇08电气3班电机控制电路。
硬件原理图如图1:图1 硬件原理图六、软件设计本设计通过软件编程使8253通道0输出定时信号申请中断,CPU发出命令由8255的下C口输出脉宽信号来控制步进电机的走步。
红外遥控电风扇
学生课外科技作品竞赛题目:学院:电子信息学院专业:电子信息工程班级:作者:完成日期:目录1 摘要-------------------------------------------------------------------22 引言-----------------------------------------------------------23 功能要求------------------------------------------------------2 4方案论证-------------------------------------------------------35 系统框图------------------------------------------------------46 硬件说明------------------------------------------------------46.1 主控芯片STC12C5410单片--------------------------------------------------------4 6.2 液晶屏使用SMC1602----------------------------------------------------------------4 6.3数字温度传感器DS18B20-----------------------------------------------------------5 6.4遥控信号接收头------------------------------------------------------------------------5 6.5信号发生电路---------------------------------------------------------------------------5 6.6风扇调速电路---------------------------------------------------------------------------67软件说明-------------------------------------------------------67.1 DS18B20程序框图---------------------------------------------------------------------6 7.2红外接收程序设计---------------------------------------------------------------------78系统参数----------------------------------------------------------------------------------8 9制作与调试------------------------------------------------------------------------------99.1总体特点------------------------------------------------------9 9.2 电路划分-----------------------------------------------------9 9.3 硬件调试-----------------------------------------------------9 9.4 软件调试-----------------------------------------------------910参考文献------------------------------------------------------------10 11遥控使用说明------------------------------------------------11 12附录系统原理图--------------------------------------------12摘要:本科技作品是基于STC12C5410单片机开发的电扇遥控调速系统。
电风扇遥控电路设计
电风扇遥控电路设计学生:丁强指导教师:康万新内容摘要:该设计主要由单片机控制模块、液晶显示模块、温度传感模块、红外收发模块、电机驱动模块模块组成;能够实现温度检测并在液晶显示器上显示以及设定上下限温度报警阀值,同时能根据红外遥控器遥控电机转速,实现红外控制风扇快速、中速、慢速三级档位功能。
在应用方面,凭着红外遥控操作方便,实用性高,成本低廉特点足可取的广泛的市场好评,随着消费性电子智能化发展的趋势,红外遥控电子系产品将会有广阔的发展空间。
关键词:电风扇红外遥控三级档位温度传感器液晶显示Design for Electric fan control circuit Abstract:The design of MCU control module, the LCD module LCD1602, the temperature sensing module, the infrared transceiver module, motor drive module and the keyboard module; can realize temperature detection and the LCD display and the setting of the upper and lower limits of temperature alarm threshold, at the same time according to the infrared remote control motor speed, in order to achieve infrared control fan fast, slow speed, level three file function. On the application of infrared remote control, with convenient operation, high practicality, low cost features foot desirable wide praise of the market, with the consumer electronics intelligent development trend, infrared remote control of electronic products will have a broad space for development.Key words:Electric fan Infrared remote control Three stage gear Temperature sensor LCD Display.目录前言 (1)1 红外遥控电风扇的介绍 (2)1.1 红外遥控电风扇功能分析 (2)1.2 MCU的选型 (3)1.3 MCS-51的概述 (3)1.3.1 单片机的产生 (4)1.3.2 单片机的定义及功能特点 (5)1.3.3 单片机的发展趋势 (6)1.4 AT89C51单片机的基本结构及原理 (6)2 红外遥控电风扇硬件系统设计 (6)2.1 各单元模块功能介绍及电路设计 (6)2.1.1 AT89C51控制系统设计 (7)2.1.2 电源模块设计 (9)2.1.3 电风扇驱动电路设计 (10)2.1.4 温度传感模块设计 (12)2.1.5 红外接收模块设计 (12)2.1.6 液晶显示模块设计 (13)2.2 系统硬件电路总结 (14)3 红外遥控电风扇软件设计 (15)3.1 软件设计原理 (15)3.2 设计任务的确定 (15)3.3 程序设计部分 (15)3.3.1 遥控发射部分软件结构图及其功能说明 (15)3.3.2 遥控接收部分软件结构图及其功能说明 (17)4 红外遥控电风扇总体设计 (18)4.1 红外遥控电风扇控制要求 (18)4.2 总控制程序设计 (18)4.3 运行 (18)5 结束语 (19)6 致谢 (20)附录1:红外遥控电风扇完整原理图 (21)附录2:红外遥控电风扇PCB图 (22)附录3:红外遥控电风扇实物图 (23)附录4:红外遥控电风扇部分源程序 (24)参考文献 (30)电风扇遥控电路设计前言电子快速发展的今天,家居智能化设备应运而生,电风扇从原始的人触动电源开关到现在设计研究的电风扇遥控电路及红外遥控技术,它可以实现一定距离无接触式控制方式来唤醒智能化风扇,同时温度传感器和热释红外模块将自动采集环境温度和感应人体热释红外来更好的服务于大众,于此电风扇遥控电路主要采用到红外线通信方式。
红外遥控调速风扇
8
程序
❖
❖}
for(i=0;i<415;i++);
❖ /***********************红外接收子函数***********************/
❖ u8 Ir_Receive(void) //reentrant
❖{
❖
u8 i,j;
❖
IrPort = 1;
❖
if(IrPort == 0)
红外遥控调速风扇
1
组员:
李国平 张少华 宋尚师
2
红外遥控调速风扇
❖ 原理: 根据 红外遥控控制电风扇,利用数码 管显示风扇转速档位。从而达到红外 遥控智能风扇的效果。
3
调试程序:
❖ #include<AT89X52.h>
❖ void delay(int i)
❖{
❖
int j;
❖
while(i--)
❖
for(j=0;j<82;j++)
❖
❖
;
❖}
4
调试程序:
❖ main()
❖{
❖
while(1)
❖
{
❖
P3=0xff;
❖
P2=0xff;
❖
P1=0xff;
❖
delay(3000);
❖
P1=0x00;
❖
P2=0x00;
❖
P3=0x00;
❖
delay(3000);
❖
}
❖}
5
原理图
6
PCB
7
程序
❖ #include <AT89X52.h>
51单片机红外遥控电风扇程序
51单片机红外遥控电风扇程序红外遥控电风扇的电路图下载:51hei/bbs/dpj-20601-1.html 下面是主要源码:/**********************李登峰************************* 编写;李登峰*晶振:11.0592MHZ******************************************************************//*----------------------------------------------- 名称;单片机红外遥控电风扇------------------------------------------------*/#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义sbit IR=P3 ; //红外接口标志#define DataPort P0 //定义数据端口程序中遇到DataPort 则用P0 替换sbit LATCH1=P2;//定义锁存使能端口段锁存sbit LATCH2=P2;//位锁存sbit LCD1602=P2 ;sbit cs88=P2 ;sbit D1=P1;sbit D2=P1;sb it D3=P1 ;sbit D4=P1;sb it D5=P1;sb it D6=P1 ;sbit D7=P1;sb it D8=P1;sb it LD=P3;/*------------------------------------------------ 全局变量声明------------------------------------------------*/unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9unsigned char irtime;//红外用全局变量bit irpro_ok,irok;unsigned char IRcord[4];unsigned char irdata[33];/*------------------------------------------------函数声明------------------------------------------------*/void Ir_work(void);void Ircordpro(void);/*------------------------------------------------定时器0 初始化------------------------------------------------*/void TIM0init(void)//定。
智能红外遥控电风扇的软件设计
摘要本设计是智能红外遥控电风扇的软件系统设计,要求在KEILC环境里编写代码、生成HEX文件,在PROTEUS环境里画出硬件电路图,并且将KEILC生成的HEX文件烧录到单片机里进行仿真。
尽管智能红外遥控电风扇硬件电路比较复杂,但是因为本设计是软件设计,因此在PROTEUS环境里仿真时,用一些简单器件来模拟红外遥控电风扇系统各个模块。
在PROTEUS环境里仿真时,以AT89C51型单片机为数据处理核心、以数字式温度传感器DS18B20为温度数据采集单元、以液晶显示屏LCD1602为温度数据显示单元;以两个开关分别模拟红外信息采集模块和光照度信息采集模块、以直流电动机模拟风扇模块、以电灯模拟照明模块。
关键字:软件设计模拟代替KEILC PROTEUS 仿真AbstractThis design is software system design of the smart infrared remote control electric fan. The code and the HEX file is generated in the KEILC software. The hardware circuit is drawn in the PROTEUS software. The hardware circuit is complex. My design is the software system design. So I use some simple devices to replace modules of the smart infrared remote control electric fan system. For example, I use AT89C51 for data processing core and DS18B20 for temperature data acquisition unit and LCD1602 for temperature data display element when I simulate software system in the Proteus software. I use two switches and electromotor and electric bulb instead of infrared signal acquisition module and light information acquisition module and fan module and lighting module to simulate software system in the PROTEUS software.Key words: software design instead of KEILC PROTEUS simulation目录引言 (5)第一章本设计所用芯片的概述 (6)1.1数字式温度传感器DS18B20的概述 (6)1.1.1数字式温度传感器DS18B20的介绍 (6)1.1.2数字式温度传感器DS18B20操作指令、工作过程及时序 (6)1.2ULN2003A的概述 (7)1.2.1ULN2003A的介绍 (7)1.2.2ULN2003A的工作过程 (8)1.3 液晶显示器的概述 (8)1.3.1LCD1602管脚介绍 (8)1.3.2LCD1602相关指令介绍 (9)1.3.3LCD1602时序介绍 (9)1.4 AT89C51单片机的简述 (10)1.4.1AT89C51管脚介绍 (10)第二章硬件系统模拟 (12)2.1 智能红外遥控电风扇系统模块框图 (12)2.2 硬件模块的模拟 (12)2.2.1 数字式温度传感器模拟温度采集模块 (12)2.2.2 液晶显示屏模拟显示模块 (13)2.2.3 直流电动机模拟风扇模块 (13)2.2.4 电灯模拟照明模块 (14)2.2.5 开关模拟红外信号采集模块 (14)2.2.6 开关模拟光照度信息采集模块 (14)2.3 在PROTEUS仿真时硬件系统电路图 (16)第三章软件流程图 (15)3.1 软件总流程图 (15)3.2 系统在光照度充足状态下工作流程图 (16)3.3 系统在光照度不充足状态下工作流程图 (17)第四章智能红外遥控电风扇系统仿真 (20)4.1 仿真软件简介 (20)4.1.1KEILC简介 (20)4.1.2PROTEUS简介 (20)4.2 各个模块仿真 (21)4.2.1 液晶显示模块仿真 (21)4.2.2 温度采集和温度显示模块仿真 (21)4.2.3 风扇模块和照明模块仿真 (21)4.3智能红外遥控电风扇系统仿真 (21)4.3.1 仿真条件:温度大于50摄氏度且有红外且光不足 (22)4.3.2 仿真条件:温度大于36摄氏度且小于50摄氏度且有红外且光不足 (22)4.3.3仿真条件:温度大于26摄氏度且小于36摄氏度且有红外且光不足 (22)4.3.4仿真条件:温度小于26摄氏度且有红外且光不足 (23)4.3.5仿真条件:温度大于50摄氏度且有红外且光充足 (23)4.3.6 仿真条件:温度大于36摄氏度且小于50摄氏度且有红外且光充足 (24)4.3.7仿真条件:温度大于26摄氏度且小于36摄氏度且有红外且光充足 (24)4.3.8 仿真条件:温度小于26摄氏度且有红外且光充足 (25)4.3.9仿真条件:没有红外 (25)4.4 仿真过程中遇到的问题 (26)4.4.1问题:对温度采集和温度显示模块仿真时,始终无法达到预期效果 (26)4.4.2问题:LCD显示温度非常快,看不清温度值 (26)4.4.3问题:电灯发亮时一闪一闪的 (26)4.4.4问题:温度为零下27摄氏度时,风扇转动 (26)4.3.5问题:风扇不转动 (27)总结 (28)致谢 (29)参考文献 (30)附录系统的主程序 (31)引言当今社会,不管是国内还是海外,物联网越来越发达。
智能控制风扇源程序(c语言)
/*********************************************************************** touwenjian.h***********************************************************************/ typedef unsigned char byte;typedef unsigned int word;//以下管脚配置//ds18b20部分sbit DQ =P3^4;//显示部分sbit DB=P2^0;sbit CP=P2^1;//发光显示部分sbit LED_dingshi=P0^0;sbit LED_shoudong =P0^1;sbit LED_zidong=P0^2;sbit LED_kuai =P0^3;sbit LED_zhong =P0^4;sbit LED_man =P0^5;//键盘定义部分#define wujian 0x3fsbit KEY1=P1^0 ; //状态转换/启动sbit KEY2=P1^1 ; //+10 / 1sbit KEY3=P1^2 ; //-10 / 2sbit KEY4=P1^3 ; // 3sbit KEY5=P1^4 ; // 0 确定//继电器控制部分sbit JDQ1=P2^4; //0表示开通,1表示关断sbit JDQ2=P2^5;sbit JDQ3=P2^6;//蜂鸣器部分sbit call=P2^7; //低电平鸣叫/*********************************************************************** ds18b20.c***********************************************************************/#include <REGX51.H>#include"touwenjian.h"/***************************************************** 延时子程序*****************************************************/ extern void delay(word useconds){for(;useconds>0;useconds--);}/*****************************************************复位子程序******************************************************/ static byte ow_reset(void){byte presence;EA=0;DQ = 0; // pull DQ line lowdelay(45); // leave it low for 480us //551usDQ = 1; // allow line to return highdelay(4);// wait for presence //61uspresence = DQ; // get presence signaldelay(40); // wait for end of timeslot //491usEA=1;return(presence); // presence signal returned} // 0=presence, 1 = no part/******************************************************* 从1-wire 总线上读取一个字节子程序********************************************************/ static byte read_byte(void){byte i;byte value = 0;EA=0;for (i=8;i>0;i--){value>>=1;DQ = 0; // pull DQ low to start timeslotDQ = 1; // then return high{unsigned char i;for(i=0;i<2;i++);}//11usif(DQ)value|=0x80;delay(6);// wait for rest of timeslot}EA=1;return(value);}/******************************************************** 向1-WIRE 总线上写一个字节*********************************************************/ static void write_byte(char val){byte i;EA=0;for (i=8; i>0; i--) // writes byte, one bit at a time{DQ = 0; // pull DQ low to start timeslotDQ=0;DQ = val&0x01; //6USdelay(5);// hold value for remainder of timeslot //74usDQ = 1;val=val>>1;}EA=1;delay(5);}/******************************************************* 读取温度*******************************************************/ word Read_Temperature(void){union{byte c[2];word x;}temp;ow_reset();write_byte(0xCC); // Skip ROMwrite_byte(0xBE); // Read Scratch Padtemp.c[1]=read_byte();temp.c[0]=read_byte();ow_reset();write_byte(0xCC); //Skip ROMwrite_byte(0x44); // Start Conversionreturn temp.x;}/***************************************************************求解温度***************************************************************/extern byte Real_Tem(void){word wen;wen=Read_Temperature();return((wen>>4)&0x00ff);}/*********************************************************************** Main.c***********************************************************************/ #include <REGX51.H>#include"touwenjian.h"//数据区#define time_default 41byte dingshi_time=time_default;//存放定时时间''''''bit flag_dingshi=0; //0表示没有定时word dingshi_jishu3=1000;//1000*60=1分钟//bit flag_dingshi_delay=0;//1表示有byte dingshi_delay=100;//#define hwx_delay_const 3 //人体感应延时时间byte hwx_delay=hwx_delay_const;//用于保存红外线触发延长时间word hwx_jishu1=0;//byte wendu=0;//用于存放温度值''''''//#define low_wen 18#define mid_wen 20#define hig_wen 24#define vhi_wen 28//byte time_stor=100; //存储主观时间//触发显示byte wendu_stor=low_wen;//存储主观温度//触发显示//enum station0{zidong,dingshi,shoudong,weak}state;//函数说明区extern byte Real_Tem(void );extern void delay(word useconds);void mingjiao(void);void display(byte input,bit kkl);void auto_speed(void);void weak_default(void);/******************************************************************* 主程序*******************************************************************/void main(){//定时器0用于键盘扫描TMOD=0x01|TMOD;//定时器0的1方式TH0=0xd8;TL0=0xf0; //定时器0初始化10ms扫描一次//定时器1用于显示TMOD=0x10|TMOD;//定时器1的1方式TH1=0x15;TL1=0xA0; //定时器1初始化60ms中断一次//外部中断TCON=TCON|0x01;//外部中断0都下降沿触发//以下为开启部分IP=0X01; //两个定时器同等优先级IE=0x8b; //开启定时器0,1,外部中断0中断//while(Real_Tem()==85);auto_speed();LED_zidong=0; //刚开始为自动方式P1=P1|0X7C; //拉高五个键盘wendu_stor=100; //两个不可能值//用于启动显示time_stor=100; //两个不可能值//用于启动显示//TR0=1; //开启定时器0TR1=1;while(1){wendu=Real_Tem();}}/*********************************************************************** ************定时器0中断服务子程序功能:进行键盘处理说明:键盘输入为P1.0到P1.4*********************************************************************** ************/void time0(void) interrupt 1{byte jianpan;TH0=0xd8;TL0=0xf0;jianpan = P1 & wujian;if(jianpan != wujian) //如果还有键盘值提取键盘值{delay(500);//延时消抖jianpan = P1 & wujian;if(jianpan==wujian)goto time_out;switch(state){case dingshi: if(KEY1==0)//状态转换时做些相应的处理{state=shoudong;LED_shoudong=0;flag_dingshi_delay=0;dingshi_delay=100;time_stor=100;wendu_stor=100;//触发mingjiao();while(KEY1==0);}else if(KEY2==0)//加分{if(dingshi_time<90){dingshi_time+=10;}dingshi_delay=100;//mingjiao();while(KEY2==0);}else if(KEY3==0)//减分{if(dingshi_time>10){dingshi_time-=10;}dingshi_delay=100;//mingjiao();while(KEY3==0);}else if(KEY4==0)//定时与否{flag_dingshi=~flag_dingshi;if(flag_dingshi==1){LED_dingshi=0;}else {LED_dingshi=1;dingshi_jishu3=1000;}dingshi_delay=100;////mingjiao();while(KEY4==0);}else if(KEY5==0){weak_default();mingjiao();while(KEY5==0);}break;case shoudong:if(KEY1==0) //状态转换时做些相应的处理{state=zidong;auto_speed();LED_shoudong=1;LED_zidong=0;mingjiao();while(KEY1==0);}else if(KEY2==0)//快1{JDQ2=1;JDQ3=1;JDQ1=0;//关断其它LED_zhong=LED_man=1;LED_kuai=0;mingjiao();while(KEY2==0);}else if(KEY3==0)//中2{JDQ1=1;JDQ3=1;JDQ2=0;//关断其它LED_kuai=LED_man=1;LED_zhong=0;mingjiao();while(KEY3==0);}else if(KEY4==0)//慢3{JDQ1=1;JDQ2=1;JDQ3=0;//关断其它LED_zhong=LED_kuai=1;LED_man=0;mingjiao();while(KEY4==0);}else if(KEY5==0)//停4{weak_default();mingjiao();while(KEY5==0);}break;case zidong: if(KEY1==0) //状态转换时做些相应的处理{state=dingshi;LED_zidong=1;flag_dingshi_delay=1;dingshi_delay=100;//开始延时time_stor=100;//mingjiao();while(KEY1==0);}else if(KEY2==0)//快1{JDQ2=1;JDQ3=1;JDQ1=0;//关断其它LED_zhong=LED_man=1;LED_kuai=0;state=shoudong;LED_zidong=1;LED_shoudong=0;mingjiao();while(KEY2==0);}else if(KEY3==0)//中2{JDQ1=1;JDQ3=1;JDQ2=0;//关断其它LED_kuai=LED_man=1;LED_zhong=0;state=shoudong;LED_zidong=1;LED_shoudong=0;mingjiao();while(KEY3==0);}else if(KEY4==0)//慢3{JDQ1=1;JDQ2=1;JDQ3=0;//关断其它LED_zhong=LED_kuai=1;LED_man=0;state=shoudong;LED_zidong=1;LED_shoudong=0;mingjiao();while(KEY4==0);}else if(KEY5==0)//停4{weak_default();mingjiao();while(KEY5==0);}break;case weak:if(KEY1==0){state=zidong;LED_zidong=0;wendu_stor=100;//两个不可能值time_stor=100;//两个不可能值auto_speed();mingjiao();while(KEY1==0);}break;}}time_out: ;}/*********************************************************************** **************定时器1中断服务子程序功能: 用于定时0.060s*********************************************************************** **************/void timer1(void) interrupt 3{TH1=0x15;TL1=0xa0;////红外线到记时EX0=0;if(hwx_jishu1<999){ hwx_jishu1++; }else{hwx_jishu1=0; hwx_delay--;if(hwx_delay==0){ weak_default();}}EX0=1;//1分钟定时if(flag_dingshi==1){if(dingshi_jishu3>0){dingshi_jishu3--;}else{ dingshi_jishu3=1000;if(dingshi_time>1){dingshi_time--;}else{weak_default();}}}//5秒延时if(flag_dingshi_delay==1){if(dingshi_delay>1)dingshi_delay--;else{state=shoudong;flag_dingshi_delay=0;dingshi_delay=100;LED_shoudong=0;time_stor=100;wendu_stor=100; //mingjiao();}}//显示和温控switch(state){case dingshi://在定时的时候只显示时间if(time_stor!=dingshi_time){display(dingshi_time,1);time_stor=dingshi_time;}//break;case shoudong:case zidong: //是否有定时,有则交替显示温度和时间,没有则只显示温度if(flag_dingshi!=0)//{static byte jiaoti_jishu2=0;static bit flag_jiaoti=0;if(jiaoti_jishu2<49){jiaoti_jishu2++;}else {flag_jiaoti=~flag_jiaoti;jiaoti_jishu2=0;}if(flag_jiaoti!=0){if(time_stor!=dingshi_time){display(dingshi_time,1);time_stor=dingshi_time;wendu_stor=100;}//显示时间}else{if(wendu_stor!=wendu){display(wendu,0);wendu_stor=wendu;time_stor=100;}//显示温度}}else{if(wendu_stor!=wendu){display(wendu,0);wendu_stor=wendu;}// 显示温度}//温度控制速度if(state==zidong){switch(wendu){case low_wen:JDQ1=1;JDQ2=1;JDQ3=1;LED_zhong=LED_man=LED_kuai=1;//ting zhibreak;case mid_wen:JDQ1=1;JDQ2=1;JDQ3=0;LED_zhong=LED_kuai=1;LED_man=0;//manbreak;case hig_wen:JDQ1=1;JDQ3=1;JDQ2=0;LED_kuai=LED_man=1;LED_zhong=0;//zhongbreak;case vhi_wen:JDQ2=1;JDQ3=1;JDQ1=0;LED_zhong=LED_man=1;LED_kuai=0;//kuai}}break;case weak: //关闭状态只显示温度if(wendu_stor!=wendu){display(wendu,0);wendu_stor=wendu;}break;}}/*********************************************************************** **************外部中断0服务子程序功能:用于人体红外线感应中断*********************************************************************** **************/void int0(void) interrupt 0{hwx_delay=hwx_delay_const;hwx_jishu1=0;}/*********************************************************************** ***************数码管显示子程序功能:数据送到数码管显示*********************************************************************** ***************/byte code shumaguan[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0x00,0x02,0X00};void display(byte input,bit kkl){byte i,j;byte k;byte shuzhu[4];shuzhu[1]=input/10;shuzhu[0]=input%10;for(i=0;i<4;i++){if(i<2){ k=shumaguan[ shuzhu[i]];if(kkl==0&&i==0){k++;}}else k=0;for(j=0;j<8;j++){CP=0;P1=(P1&0XFE)|(k&0X01);k>>=1;CP=1;}}}/*********************************************************************** ***************蜂鸣器鸣叫子程序功能:只负责鸣叫就是*********************************************************************** ***************/void mingjiao(void){byte i;for(i=0;i<35;i++){call=0;delay(20);call=1;delay(20);}}/*********************************************************************** ************功能:自动控制时的转速初始化*********************************************************************** ************/void auto_speed(void){if(wendu>vhi_wen){JDQ2=1;JDQ3=1;JDQ1=0;LED_zhong=LED_man=1;LED_kuai=0;}//kuaielse if(wendu>=hig_wen){JDQ1=1;JDQ3=1;JDQ2=0;LED_kuai=LED_man=1;LED_zhong=0;}//zhongelse if(wendu>=mid_wen){JDQ2=1;JDQ1=1;JDQ3=0; LED_zhong=LED_kuai=1;LED_man=0;}//manelse {JDQ2=1;JDQ3=1;JDQ1=1; LED_zhong=LED_man=LED_kuai=1;}//ting }/*********************************************************************** *************功能:进入睡眠状态之前的准备*********************************************************************** *************/void weak_default(void){flag_dingshi=0; //清楚定时标志dingshi_time=time_default;dingshi_jishu3=1000;//flag_dingshi_delay=0;dingshi_delay=100;//state=weak; //进入睡眠状态JDQ1=1;JDQ2=1;JDQ3=1; //关闭继电器LED_shoudong=LED_zidong=LED_dingshi=1;LED_kuai=LED_zhong=LED_man=1;//wendu_stor=100;time_stor=100;}。
- 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。