51单片机的家用风扇控制器设计 电路图 源码
基于51单片机的 电风扇控制系统
oe=1;
dat=P1;
oe=0;
if(dat>=wxin)
{wxout=0; TR0=0;}
else TR0=1; //温度大于阈值 报警
}
}
{ if(yt_cnt>59)yt_cnt=0;
if(yt_cnt<30)yt_out=1;
else yt_out=0;
}
else yt_cnt=0;
}
main()
{unsig
IE= 0x82;
TH0= (65536-1000)/256;
pwm_h=3;
ledbuf[3]=1;
break;
case key_cf: //常风3:1
pwm_h=9;ledbuf[3]=2;
break;
case key_smf: //睡眠风1:5
pwm_h=2;
ledbuf[3]=3;
break;
case key_ds: //定时
if(djs_time%10>4){djs_time=((djs_time/10)+2)*10;}
else djs_time=((djs_time/10)+1)*10;
break;
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit pwm_out=P2^6; //电扇 驱动信号
sbit yt_out=P2^7; //摇头驱动信号
sbit bit1=P2^0; // 数码管位选 因为端口 复用 所以 位选单独使用位
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();}}。
基于51单片机的智能温控风扇系统的设计
基于51单片机的智能温控风扇系统的设计题目:基于51单片机的智能温控风扇系统的设计一、需求分析在炎热的夏天人们常用电风扇来降温,但传统电风扇多采用机械方式进行控制,存在功能单一,需要手动换挡等问题。
随着科技的发展和人们生活水平的提高,家用电器产品趋向于自动化、智能化、环保化和人性化,使得智能电风扇得以逐渐走进了人们的生活中。
智能温控风扇可以根据环境温度自动调节风扇的启停与转速,在实际生活的使用中,温控风扇不仅可以节省宝贵的电资源,也大大方便了人们的生活。
二、系统总体设计1、硬件本系统由集成温度传感器、单片机、LED数码管、及一些其他外围器件组成。
使用89C52单片机编程控制,通过修改程序可方便实现系统升级。
系统的框图结构如下:图1-1硬件系统框图其中,单片机为STC89C52,这个芯片与我开发板芯片相同,方便拷进去程序。
晶振电路和复位电路为单片机最小系统通用设置,温度采集电路,使用的是DS18B20芯片,数码管使用的是4位共阳数码管,风扇驱动芯片使用的是L298N,按键为按钮按键,指示灯为发光二级管。
2、软件要实现根据当前温度实时的控制风扇的状态,需要在程序中不时的判断当前温度值是否超过设定的动作温度值范围。
由于单片机的工作频率高达12MHz,在执行程序时不断将当前温度和设定动作温度进行比较判断,当超过设定温度值范围时及时的转去执行超温处理和欠温处理子程序,控制风扇实时的切换到关闭、低速、高速三个状态。
显示驱动程序以查七段码取得各数码管应显数字,逐位扫描显示。
主程序流程图如图4-1所示。
图1-2软件系统框图这是该系统主程序的运行流程,当运行时,程序首先初始化,然后调用DS18B20初始化函数,然后调用DS18B20温度转换函数,接着调用温度读取函数,到此,室内温度已经读取,调用按键扫描函数这里利用它设置温度上下限,然后就是调用数码管显示函数,显示温度,之后调用温度处理函数,再调用风扇控制函数使风扇转动。
基于51单片机的温控风扇设计
基于51单片机的温控风扇设计一、引言风扇是家庭和办公室中常见的电器产品,用于调节室内温度和空气流通。
而随着科技的发展,人们对风扇的功能和性能也提出了更高的要求。
本文将介绍一种基于51单片机的温控风扇设计方案,通过温度传感器和单片机控制,实现智能温控风扇的设计。
二、设计方案1. 硬件设计本设计方案采用51单片机作为控制核心,温度传感器作为温度检测模块,风扇作为输出执行模块。
51单片机可以选择常见的STC89C52,温度传感器可以选择DS18B20,风扇可以选择直流风扇或交流风扇。
2. 软件设计软件设计包括温度检测、温度控制和风扇控制三个部分。
通过程序控制单片机对温度传感器进行采集,再根据采集到的温度数值进行判断,最后控制风扇的转速来达到温控目的。
三、电路连接1. 连接51单片机和温度传感器51单片机的P1口接DS18B20的数据线,P1口上拉电阻连接VCC,GND连接地,即可完成单片机和温度传感器的连接。
2. 连接风扇通过晶闸管调速电路或者直接控制风扇的开关电路来控制风扇的转速。
通过设置不同的电压或者电流来控制风扇的转速,从而实现温控风扇的设计。
四、软件设计1. 温度检测通过单片机的程序控制,对温度传感器进行采集,获取室内温度的实时数据。
2. 温度控制将获取到的温度值与设定的温度阈值进行比较,通过程序控制来实现温度的控制。
3. 风扇控制根据温度控制的结果,通过单片机控制风扇的转速,从而实现室内温度的调节。
六、总结本文介绍了一种基于51单片机的温控风扇设计方案,通过硬件和软件的设计,实现了智能温控风扇的设计。
这种设计方案可以广泛应用于家庭和办公环境,提高了风扇的智能化程度,为人们提供了更加舒适和便利的生活体验。
该设计方案也为单片机爱好者提供了一个实用的项目案例,帮助他们在学习和实践中提高自己的能力。
希望本文对读者有所帮助。
基于51单片机的温控风扇毕业设计
基于51单片机的温控风扇毕业设计温控风扇基于51单片机的毕业设计一、引言随着科技的不断进步,人们对于生活品质的要求也越来越高。
在夏季高温天气中,风扇成为了人们不可或缺的家用电器。
然而,传统的风扇常常不能够根据环境温度自动调节风速,给人们带来了一定的不便。
因此,设计一个基于51单片机的温控风扇成为了一项有意义的毕业设计。
二、设计目标本设计的目标是实现一个自动调节风速的温控风扇系统,通过测量周围环境的温度来调节风扇的风速,使风扇在不同温度下达到最佳工作效果,提高舒适度和节能效果。
三、硬件设计1.51单片机:采用AT89S52单片机作为主控制器,该单片机具有较强的性能和丰富的外设资源,能够满足本设计的需求。
2.温度传感器:采用DS18B20数字温度传感器,具有高精度和简单的接口特点。
3.风扇控制电路:通过三极管和可变电阻来控制风扇的转速,根据温度传感器的输出值来调节电阻的阻值,从而实现风扇的风速调节。
四、软件设计1.硬件初始化:包括对温度传感器和风扇控制电路的初始化设置。
2.温度检测:通过DS18B20传感器读取环境温度的值,并将其转换为数字量。
3.风速控制:根据不同的温度值,通过控制电阻的阻值来调整风扇的风速,从而实现风速的自动调节。
4.显示界面:通过LCD显示器将当前温度值和风速等信息显示出来,方便用户了解当前状态。
五、系统测试及结果分析经过对系统的调试和测试,可以发现该温控风扇系统能够根据环境温度自动调节风速。
当环境温度较低时,风扇转速较低,从而降低能耗和噪音;当环境温度较高时,风扇转速会自动提高,以提供更好的散热效果。
六、结论通过对基于51单片机的温控风扇系统的设计和测试,可以得到以下结论:1.该系统能够根据环境温度自动调节风速,提高舒适度和节能效果。
2.通过LCD显示界面,用户可以方便地了解当前温度和风速等信息。
3.本设计的目标已得到满足,具备一定的实用和推广价值。
七、展望在未来的研究中,可以进一步优化该温控风扇系统,例如添加遥控功能、改进风扇控制电路的效率等,以提高用户体验和系统的整体性能。
基于51单片机的智能温控风扇设计各部块的设计
基于51单片机的智能温控风扇设计各部块的设计智能温控风扇是一种能够自动根据温度变化调节风扇转速的风扇,其应用广泛,如家庭、办公室、工业生产等。
本文主要介绍基于51单片机实现智能温控风扇的各部分设计。
一、传感器模块设计温度传感器是实现智能控制的重要模块。
常用的温度传感器有NTC、PTC、热电偶、DS18B20等。
这里选用DS18B20数字温度传感器。
其具有精度高、反应速度快、与单片机通信简单等优点。
将DS18B20以三线方式连接至单片机,通过调用它的相关函数来读取温度值。
二、风扇驱动模块设计风扇驱动模块是指控制风扇正反转的电路。
这里选用H桥驱动芯片L298N。
它可以控制直流电动机、步进电机等多种负载的正反转,具有过流保护、过温保护等功能。
将H桥驱动芯片通过引脚连接至单片机,通过编写控制程序,实现控制风扇的正反转及转速控制。
三、单片机模块设计单片机模块是整个系统的控制中心,它通过编写程序控制温度传感器和风扇驱动芯片实现智能控制。
这里选用常用的STC89C52单片机,具有较强的通用性和高性价比。
编写的程序主要实现以下功能:1. 读取温度值并进行比较,根据温度值控制风扇的启停及转速。
2. 设置风扇的最低速度和最高速度。
3. 实现温度设置功能,用户可通过按钮设置所需的温度值。
4. 实现显示屏幕功能,将当前温度值及系统状态等信息显示在屏幕上。
四、供电模块设计供电模块是系统的电源模块,它通过转换器将交流电转化为所需的直流电。
为保证系统稳定工作,供电模块应具有过载保护、过压保护、过流保护等功能。
五、外壳设计外壳设计是将控制模块和风扇固定在一起,并起到保护作用的模块。
可采用塑料或金属等材质制作外壳,将控制模块、风扇和电源线等固定在外壳内部。
外壳应符合美观、实用及安全的设计原则。
以上是基于51单片机的智能温控风扇设计各部块的相关参考内容,其中传感器模块、风扇驱动模块、单片机模块、供电模块及外壳设计五个部分是实现智能温控风扇的核心部分。
基于51单片机的温控风扇设计
基于51单片机的温控风扇设计温控风扇是一种能够根据环境温度自动调节风速的风扇。
其设计基于51单片机,通过测量环境温度,并根据设定的温度范围控制风扇的转速。
本文将详细介绍基于51单片机的温控风扇设计。
我们需要准备以下硬件材料:1. 51单片机开发板2. 温度传感器3. 风扇4. 继电器模块5. MAX232芯片6. PC串口线在硬件准备完成后,我们需要进行以下步骤:1. 连接硬件:将温度传感器连接到51单片机的模拟输入引脚,将风扇连接到继电器模块,并将继电器模块连接到51单片机的数字输出引脚。
2. 连接电脑:使用MAX232芯片将51单片机的串口引脚连接到电脑的串口引脚上,以便进行程序的下载和调试。
3. 编写程序:使用C语言编写51单片机的程序,实现温度传感器的读取和风扇的控制。
我们需要初始化单片机的IO口和ADC模块,并设置串口通信。
然后,编写一个循环程序,在主循环中不断读取温度传感器的数值,并根据设定的温度范围控制风扇的转速。
4. 下载程序:使用单片机下载器将编写好的程序下载到51单片机的内部存储器中。
5. 调试程序:将51单片机与电脑进行连接,通过串口调试工具进行调试。
我们可以通过串口工具查看温度传感器的实时数值,并根据实际情况修改程序中的温度范围。
然后,通过串口工具发送控制指令到51单片机,观察风扇的转速是否符合预期。
6. 测试和优化:将温控风扇放置在不同的环境下进行测试,观察风扇是否能够根据环境温度自动调节转速。
根据测试结果,我们可以优化程序中的温度范围和风扇转速的控制算法,以提高温控风扇的性能。
基于51单片机的温控风扇设计可以在实际生活中广泛应用,例如用于机房散热、电器设备散热等场合。
通过合理的温度控制,可以有效延长设备的使用寿命,并提高设备的稳定性和安全性。
这种设计还具有简单、可靠、成本低等优点。
51单片机制作简易电风扇定时控制器
51单片机制作简易电风扇定时控制器
自己的床头风扇的机械定时器坏掉了,准备51单片机给设计了一个.程序在实验板初步调试通过,等待元件寄到就可以做板子了,只是有点浪费单片机的资源。
一,设计思路:
开始通过手动键给单片机供电。
直到电源指示灯LED4亮.单片机运行,继电器2工作给单片机供电。
通过按键设置继电器2的工作时间,实现系统的自动断电,通过设置继电器1的工作时间,实现风扇的间歇转动,实现节能。
1. 显示部分:通过按键,在风扇转动时间,暂停时间,和系统关闭剩余时间切换显示。
数码显示两位,为“分”走时,其中系统关闭剩余时间为“小时”走时,LED为红,黄,蓝,分别点亮对应的风扇转动,暂停,和系统关闭剩余时间的状态。
2. 按键部分:
l K1为时间调整移位键,按下此键,数码闪烁,同时对应的灯闪烁。
在风扇转动时间,暂停时间,和系统之间切换
l K2为加一和状态切换显示键,当有K1按下,为时间加1。
否则,在在风扇转动时间,暂停时间,和系统之间切换显示。
l K3为减1和备用键,当有K1按下,为时间加1,否则无效。
3. 继电器部分:
l 继电器1控制风扇的电源线,实现风扇的转动和暂时。
l 继电器2控制单片机系统的电源,实现系统定时关闭。
二,原理图
三,程序清单
/*********************************************
系统名称:电风扇简易定时控制器
创键人:w418781840 日期:2008.7.6。
单片机智能风扇程序
#define uint unsigned int
/***********************定义数据接口**************************/
sbit sound=P2^2; //将sound位定义为P2.2
sbit lcden=P2^7; //E 12864使能端
}
/**********************功能:液晶12864写,写数据函数********************************/
void xieling_shu(uchar qq,uchar shu)
{
if(qq==1){lcdrs=0;}//qq等于1时是写指令
if(qq==0){lcdrs=1;}//qq等于0时是写数据
}
/******************* Windows XP专业版启动成功*********************/
qingping();//清屏
xieludizhi(1,0);xiezifuchuan(chu2);delay(5);
xieludizhi(2,0);xiezifuchuan(chu3);delay(5);
void tempwritebyte(uchar dat)
{
uint i;
uchar j;
bit testb;
for(j=1;j<=8;j++)
{
testb=dat&0x01;
dat=dat>>1;
if(testb) //写1
{
wd=0;
i++;i++;
51单片机课程设计——智能风扇
智能电风扇的设计学院**********************专业班级*****学生姓名****指导教师******20**年*月**日引言随着人们生活水平及科技水平的不断提高,现在家用电器在款式、功能等方面日益求精,并朝着健康、安全、多功能、节能等方向发展。
过去的电器不断的显露出其不足之处。
电风扇作为家用电器的一种,同样存在类似的问题。
现在电风扇的现状:大部分只有手动调速,再加上一个定时器,功能单一。
存在的隐患或不足:比如说人们常常离开后忘记关闭电风扇,浪费电且不说还容易引发火灾,长时间工作还容易损坏电器。
再比如说前半夜温度高电风扇调的风速较高,但到了后半夜气温下降,风速不会随着气温变化,容易着凉。
之所以会产生这些隐患的根本原因是:缺乏对环境的检测。
如果能使电风扇具有对环境进行检测的功能,当房间里面没有人时能自动的关闭电风扇;当温度下降时能自动的减小风速甚至关闭风扇,这样一来就避免了上述的不足。
本次设计就是围绕这两点对现有电风扇进行改进。
1.总体方案设计及功能描述本设计是以AT89C51单片机控制中心,主要通过提取热释电红外传感器感应到的人体红外线信息和温度传感器DS18B20得到的温度以及内部定时器设定时间长短来控制电风扇的开关及转速的变化。
功能描述:电风扇工作在四种状态:手动调速状态、自动调速状态、定时状态、停止状态。
手动状态时可以手动调节速度;自动状态时通过温度高低自动调节速度,如果出现手动现象则变为手动状态;定时状态时可以调节定时时间,并设定是否启动定时,之后可以手动退出,也可以在不操作6秒后自动退出进入手动状态;停止状态时可以被唤醒并进入自动状态。
当没有检测到人体存在超过3分钟或定时完毕时进入停止状态。
在数码管显示方面,当没有定时时,只显示气温,当定时启动时气温和定时剩余时间以3秒的速度交替显示。
系统方框图如下图所示,主要包括:输入、控制、输出三大部分8个功能模块。
图1-1系统方框图2.功能模块硬件简介与实现2.1键盘输入电路由于设计中用到的按键数目不多,所以可以直接用AT89C51的通用IO 端口且选用AT89C51的P1口(内部有上拉电阻)作为键盘接口。
基于51单片机的智能温控电扇设计-图文
基于51单片机的智能温控电扇设计-图文摘要:风扇是人们日常生活中必不可缺的工具,尤其是在夏天,作为一种使用频率很高的电器,备受人们喜爱。
本文将以AT89S51为主控芯片,辅以DS18B20温度传感器,结合红外探测装置,来实现一种智能温控电扇的设计。
此风扇通过液晶显示器来显示温度和风速,配备2个温度设定按键,由DS18B20读取外界温度,红外探头探测是否有人,通过设定的温度配合程序来调节风速,最后通过L298N来驱动电机。
经过调试,风扇可以按照温度智能变速,无人自动关闭,实现了智能温控的目标。
关键词:DS18B20;AT89S51;红外探头;液晶显示器1602;L298N1引言电扇是人们日常生活中常用的降温工具,从开始的吊扇到现在的USB风扇,无处不见电扇的踪迹。
虽然如今空调已经走进千家万户,但是电扇的低位还是无可取代,作为一种节能环保,并且廉价简单的降温工具,电扇还在很多人家发挥着自己独特的作用。
顺应时代潮流,各种多功能的风扇逐渐在取代传统风扇。
单片机作为一种智能化程度高,控制精度高,操作简单,廉价易得,抗干扰能力强等特点,越来越多的应用于智能化产品之中。
市场上智能风扇产品相继问世,制作方法也多种多样,功能也逐渐完善,普遍都具有了手动变速和定时关闭等功能,相对而言,具备人性化,智能化的风扇还是很少,使用也并不广泛,而且在电子工艺高度发展的今天,智能化的步伐也越来越快,尤其是中国这个高速发展的国家,电扇的智能化也该向前迈进一个步伐。
在中国市场上风扇还是有一定的市场份额的,几乎每个家庭都有风扇,具备价格便宜,摆放轻便,体积灵巧等特点,使得风扇在中小城市以及乡村将来一段时间内仍然会占有市场的大部分份额,为提高风扇的市场竞争力,使之在技术含量上有所提高,满足智能化的要求,智能风扇很具竞争力。
大学四年即将结束,为了检验自己的学习情况,我决定使用之前所学习到的硬件只是结合相关的软件基础来制作一个基于单片机的智能温控风扇。
51单片机汇编三档八小时风扇控制程序,内有源程序和PDF文档
MOV TL0,#LOW(65536-50000);50MS(当4mhz晶体时为150MS)
SETB EA ;开总中断
SETB ET0 ;定时器0中断允许
DELAY: ;防抖
MOV R1,#20
DD: MOV R0,#248
DJNZ R0,$
DJNZ R1,DD
RET
TIME: ;1小时基准
MOV TH0,#HIGH(65536-50000);重置初定时值
;P1.7也作开机OUT控制,全部都是低电平有效。
;注意晶体为12MHZ IC为89C2051系列
ORG 00H
JMP START
ORG 0BH ;定时器0入口
JMP TIME ;中断程序
CLR TR0 ;关闭定时器0
JMP LOOP
CLRR: ;清除软件计数器为0
MOV R7,#00H
MOV R6,#00H
MOV R5,#00H
RET
51单片机汇编三档八小时风扇控制程序,内有源程序和PDF文档
;;;;;;;风扇控制程序;;;;;;; 14\4\07
;用P3.0\P3.1\P3.2 分别控制档位\定时\和关机
;P3.3\P3.4\P3.5分别为1\2\3档位
;P1.0~P1.7分别接共阳极数码管A~H指示(长通E.)\1H~8H定时
CALL DELAY
JB P3.1,LOOP
INC R2
JNB P3.1,$
SETB TR0 ;启动定时器0
CJNE R2,#01H,C002
MOV R4,#01H ;1小时
基于51单片机的温控风扇设计
基于51单片机的温控风扇设计一、引言随着科技的进步,人们对生活质量的要求越来越高,室内温控设备成为现代家庭不可或缺的一部分。
而风扇作为夏季降温的主要工具之一,其性能和使用体验也变得越来越重要。
本文基于51单片机,设计了一款温控风扇,利用温度传感器和电机控制模块,实现了温度监测和智能风速调节,为用户带来更舒适的使用体验。
二、温控风扇设计方案1.硬件设计本温控风扇的硬件系统主要由51单片机、温度传感器、LCD显示屏、电机控制模块和风扇电机组成。
51单片机作为控制核心,通过温度传感器采集室内温度,并根据设定的温度阈值控制电机控制模块,从而实现风扇的智能控制。
软件系统主要由温度监测模块、风速调节模块和用户交互模块组成。
温度监测模块负责实时监测室内温度,并将数据传输给控制核心;风速调节模块根据监测到的温度数据,调节风扇的转速;用户交互模块则负责与用户进行交互,显示当前温度和设置温度阈值等操作。
三、系统工作原理1.温度监测温控风扇首先需要实时监测室内温度,本设计采用DS18B20数字温度传感器来实现。
该传感器具有高精度、数字信号输出、抗干扰能力强等特点,能够准确快速地采集室内温度数据,并传输给控制核心。
2.风速调节控制核心通过比较监测到的温度数据和设定的温度阈值,来决定风扇的转速。
当室内温度高于设定的阈值时,风扇将以最高速度工作;反之,当室内温度低于阈值时,风扇将停止运转。
在室内温度处于阈值附近时,风扇会以不同的速度进行调节,以保持室内温度在一个舒适的范围内。
3.用户交互用户可以通过LCD显示屏进行实时监测室内温度,并通过按键进行设定温度阈值的操作。
当用户设定的温度阈值发生变化时,控制核心会相应地调整风扇的工作状态,以保持室内温度在用户期望的范围内。
四、系统性能分析1. 精度和快速性:DS18B20数字温度传感器具有高精度和快速的特点,能够准确地监测室内温度,并及时地传输数据给控制核心,保证系统的稳定性和准确性。
基于51单片机的温控风扇程序
基于51单片机的温控风扇程序#include //调用单片机头文件#define uchar unsigned char //无符号字符型宏定义变量范围0~255#define uint unsigned int //无符号整型宏定义变量范围0~65535#include "eeprom52.h"//数码管段选定义 0 1 2 3 4 5 6 7 8 9uchar code smg_du[]={0x28,0xee,0x42,0x52,0xe5,0xa8,0x41,0xe7,0x20,0xa0, 0x60,0x25,0x39,0x26,0x31,0x71,0xff}; //断码//数码管位选定义uchar code smg_we[]={0xef,0xdf,0xbf,0x7f};uchar dis_smg[8] = {0x28,0xee,0x32,0xa2,0xe4,0x92,0x82,0xf8};uchar smg_i = 3; //显示数码管的个位数sbit dq = P2^4; //18b20 IO口的定义bit flag_lj_en; //按键连加使能bit flag_lj_3_en; //按键连3次连加后使能加的数就越大了uchar key_time,key_value; //用做连加的中间变量bit key_500ms ;sbit pwm = P2^3;uchar f_pwm_l ; //越小越暗uint temperature ; //bit flag_300ms ;uchar menu_1; //菜单设计的变量uint t_high = 300,t_low = 100; //温度上下限报警值/***********************1ms延时函数*****************************/void delay_1ms(uint q){uint i,j;for(i=0;i<q;i++)for(j=0;j<120;j++);}/***********************小延时函数*****************************/void delay_uint(uint q){while(q--);}/***********************数码显示函数*****************************/void display(){static uchar i;i++;if(i >= smg_i)i = 0;P1 = 0xff; //消隐P3 = smg_we[i]; //位选P1 = dis_smg[i]; //段选}/******************把数据保存到单片机内部eepom中******************/void write_eeprom(){SectorErase(0x2000);byte_write(0x2000, t_high % 256);byte_write(0x2001, t_high / 256);byte_write(0x2002, t_low % 256);byte_write(0x2003, t_low / 256);byte_write(0x2055, a_a);}/******************把数据从单片机内部eepom中读出来*****************/void read_eeprom(){t_high = byte_read(0x2001);t_high <<= 8;t_high |= byte_read(0x2000);t_low = byte_read(0x2003);t_low <<= 8;t_low |= byte_read(0x2002);a_a = byte_read(0x2055);}/**************开机初始化保存的数据*****************/void init_eeprom()read_eeprom(); //先读if(a_a != 22) //新的单片机初始单片机内问eeprom{t_high = 320;t_low = 280;a_a = 22;write_eeprom(); //保存数据}}/***********************18b20初始化函数*****************************/void init_18b20(){bit q;dq = 1; //把总线拿高delay_uint(1); //15usdq = 0; //给复位脉冲delay_uint(80); //750usdq = 1; //把总线拿高等待delay_uint(10); //110usq = dq; //读取18b20初始化信号delay_uint(20); //200usdq = 1; //把总线拿高释放总线}/*************写18b20内的数据***************/void write_18b20(uchar dat)uchar i;for(i=0;i<8;i++)</q;i++){ //写数据是低位开始dq = 0; //把总线拿低写时间隙开始dq = dat & 0x01; //向18b20总线写数据了delay_uint(5); // 60usdq = 1; //释放总线dat >>= 1;}}/*************读取18b20内的数据***************/ uchar read_18b20(){uchar i,value;for(i=0;i<8;i++){dq = 0; //把总线拿低读时间隙开始value >>= 1; //读数据是低位开始dq = 1; //释放总线if(dq == 1) //开始读写数据value |= 0x80;delay_uint(5); //60us 读一个时间隙最少要保持60us的时间}return value; //返回数据}/*************读取温度的值读出来的是小数***************/uint read_temp(){uint value;uchar low; //在读取温度的时候如果中断的太频繁了,就应该把中断给关了,否则会影响到18b20的时序init_18b20(); //初始化18b20EA = 0;write_18b20(0xcc); //跳过64位ROMwrite_18b20(0x44); //启动一次温度转换命令EA = 1;delay_uint(50); //500usinit_18b20(); //初始化18b20EA = 0;write_18b20(0xcc); //跳过64位ROMwrite_18b20(0xbe); //发出读取暂存器命令low = read_18b20(); //读温度低字节value = read_18b20(); //读温度高字节EA = 1;value <<= 8; //把温度的高位左移8位value |= low; //把读出的温度低位放到value的低八位中value *= 0.625; //转换到温度值小数return value; //返回读出的温度带小数}/*************定时器0初始化程序***************/void time_init(){EA = 1; //开总中断TMOD = 0X11; //定时器0、定时器1工作方式1 ET0 = 1; //开定时器0中断TR0 = 1; //允许定时器0定时ET1 = 1; //开定时器0中断TR1 = 0; //允许定时器0定时}/********************独立按键程序*****************/ uchar key_can; //按键值void key() //独立按键程序{static uchar key_new;key_can = 20; //按键值还原P2 |= 0x07;if((P2 & 0x07) != 0x07) //按键按下{if(key_500ms == 1) //连加{key_500ms = 0;key_new = 1;}delay_1ms(1); //按键消抖动if(((P2 & 0x07) != 0x07) && (key_new == 1)) { //确认是按键按下key_new = 0;switch(P2 & 0x07){case 0x06: key_can = 3; break; //得到k2键值case 0x05: key_can = 2; break; //得到k3键值case 0x03: key_can = 1; break; //得到k4键值}flag_lj_en = 1; //连加使能}}else{if(key_new == 0){key_new = 1;write_eeprom(); //保存数据flag_lj_en = 0; //关闭连加使能flag_lj_3_en = 0; //关闭3秒后使能key_value = 0; //清零key_time = 0;key_500ms = 0;}}}/****************按键处理数码管显示函数***************/ void key_with(){if(key_can == 1) //设置键{f_pwm_l =30;menu_1 ++;if(menu_1 >= 3){menu_1 = 0;smg_i = 3; //数码管显示3位}}if(menu_1 == 1) //设置高温报警{smg_i = 4; //数码管显示4位if(key_can == 2){if(flag_lj_3_en == 0)t_high ++ ; //按键按下未松开自动加三次elset_high += 10; //按键按下未松开自动加三次之后每次自动加10 if(t_high > 990)t_high = 990;}if(key_can == 3){if(flag_lj_3_en == 0)t_high -- ; //按键按下未松开自动减三次elset_high -= 10; //按键按下未松开自动减三次之后每次自动减10 if(t_high <= t_low)t_high = t_low + 1;}dis_smg[0] = smg_du[t_high % 10]; //取小数显示dis_smg[1] = smg_du[t_high / 10 % 10] & 0xdf; //取个位显示dis_smg[2] = smg_du[t_high / 100 % 10] ; //取十位显示dis_smg[3] = 0x64; //H}if(menu_1 == 2) //设置低温报警{smg_i = 4; //数码管显示4位if(key_can == 2){if(flag_lj_3_en == 0)t_low ++ ; //按键按下未松开自动加三次elset_low += 10; //按键按下未松开自动加三次之后每次自动加10 if(t_low >= t_high)t_low = t_high - 1;}if(key_can == 3){if(flag_lj_3_en == 0)t_low -- ; //按键按下未松开自动减三次elset_low -= 10; //按键按下未松开自动加三次之后每次自动加10 if(t_low <= 10)t_low = 10;}dis_smg[0] = smg_du[t_low % 10]; //取小数显示dis_smg[1] = smg_du[t_low / 10 % 10] & 0xdf; //取个位显示dis_smg[2] = smg_du[t_low / 100 % 10] ; //取十位显示dis_smg[3] = 0x3D; //L}}/****************风扇控制函数***************/void fengshan_kz(){// static uchar value;if(temperature >= t_high) //风扇全开{TR1 = 1;pwm = 0;}else if((temperature < t_high) && (temperature >= t_low)) //风扇缓慢{f_pwm_l = 60;TR1 = 1;}else if(temperature < t_low) //关闭风扇{TR1 = 0;pwm = 1;}}/****************主函数***************/void main(){time_init(); //初始化定时器temperature = read_temp(); //先读出温度的值init_eeprom(); //开始初始化保存的数据delay_1ms(650);temperature = read_temp(); //先读出温度的值dis_smg[0] = smg_du[temperature % 10]; //取温度的小数显示dis_smg[1] = smg_du[temperature / 10 % 10] & 0xdf; //取温度的个位显示dis_smg[2] = smg_du[temperature / 100 % 10] ; //取温度的十位显示f_pwm_l = 50;while(1){key(); //按键程序if(key_can < 10){key_with(); //设置报警温度}if(flag_300ms == 1) //300ms 处理一次温度程序{flag_300ms = 0;temperature = read_temp(); //先读出温度的值if(menu_1 == 0){smg_i = 3;dis_smg[0]= smg_du[temperature % 10]; //取温度的小数显示dis_smg[1] = smg_du[temperature / 10 % 10] & 0xdf; //取温度的个位显示dis_smg[2] = smg_du[temperature / 100 % 10] ; //取温度的十位显示}fengshan_kz(); //风扇控制函数}}/*************定时器0中断服务程序***************/ void time0_int() interrupt 1{static uchar value; //定时2ms中断一次TH0 = 0xf8;TL0 = 0x30; //2msdisplay(); //数码管显示函数value++;if(value >= 150){value = 0;flag_300ms = 1;}if(flag_lj_en == 1) //按下按键使能{key_time ++;if(key_time >= 250) //500ms{key_time = 0;key_500ms = 1; //500mskey_value ++;if(key_value > 3){key_value = 10;flag_lj_3_en = 1; //3次后1.5秒连加大些}}}/*******************定时器1用做单片机模拟PWM 调节***********************/void Timer1() interrupt 3 //调用定时器1{static uchar value_l;TH1=0xfe; // 定时10ms中断一次TL1=0x0c; //500usif(pwm==1){value_l+=3;if(value_l > f_pwm_l) //高电平{value_l=0;if(f_pwm_l != 0)pwm=0;}}else{value_l+=3;if(value_l > 100 - f_pwm_l) //低电平{value_l=0;pwm=1;} }。
基于51单片机的温控风扇设计
基于51单片机的温控风扇设计本文将介绍一种基于51单片机的温控风扇设计。
在炎热的夏天,温度升高可能会对人们的健康造成威胁。
所以,人们通常会使用空气调节器来降低室内温度。
但是,空调的功耗较高,使用成本也较高。
此时,温控风扇的出现可大大降低使用成本。
温控风扇是通过控制风扇的转速来调节室内温度的。
温控风扇主要由三部分组成:传感器模块、控制系统、和风扇模块。
其中,传感器模块用于检测室内温度,并将温度值传递给控制系统,控制系统通过比较实际温度与设定温度之间的差异来控制风扇的转速。
风扇模块则负责产生风量,以达到降温的效果。
第一步:选用合适的传感器模块在温控风扇中,常用的温度传感器有NTC热敏电阻和DS18B20数字温度传感器。
NTC热敏电阻的工作原理是与温度成反比。
随着温度的升高,电阻值下降;反之,温度升高,电阻值上升。
DS18B20数字温度传感器是一种数字温度传感器,具有体积小、精度高、采样速度快等优点。
通常我们可以根据具体的需求来选择合适的传感器模块。
第二步:搭建传感器电路在传感器模块的选定后,我们需要搭建一个传感器电路,将传感器与单片机连接起来。
图1展示了以DS18B20数字温度传感器为例的电路连接方式。
(图1)在电路中,VCC是单片机的电源,GND是单片机的地线,DAT是数字温度传感器的数据线,用于传输温度值。
由于DS18B20是一种单总线设备,所以在电路中只需要接收线、地线和电源线即可。
第三步:编写控制程序在搭建完传感器电路后,我们需要撰写一段程序来控制风扇转速。
程序的主要作用是根据实际温度与设定温度之间的差异来控制风扇的转速,以实现降温的效果。
程序框架如图2所示。
由程序框架可知,程序主要有四个子程序:初始化程序、读取温度值程序、比较温度程序和控制风扇程序。
在程序中,我们需要初始化单片机的端口,然后不断从温度传感器中读取温度值,通过比较实际温度与设定温度之间的差异来控制风扇的转速。
第四步:连接风扇模块当控制程序编写好之后,我们需要连接风扇模块。
基于51单片机的多功能温控风扇设计
源代码分析
voivoid ds1820wr(uchar wdata)/*写数据 unsigned char i=0; for (i=8; i>0; i--) { DQ = 0; DQ = wdata&0x01; delay_18B20(10);//延时106us DQ = 1; wdata>>=1; }
a=ds1820rd(); b=ds1820rd(); tvalue=b; tvalue<<=8; tvalue=tvalue|a; if(tvalue<0x0fff ) tflag=0; else {
tvalue=~tvalue+1; tflag=1;
} tvalue=tvalue*(0.625);//温度值扩大10倍, 精确到1位小数
DQ
CPP VDD
内部VDD
供电方 式检测
64位 光刻 ROM 及单 总线 接口
8位CRC 发生器
存储及控制逻辑
高
温度传感器
速
暂
上限寄存器TH
存
寄
存
下限寄存器TL
器
结构寄存器
图 3-2 DS18B20 内部结构框图
原理
数码管显示电路
由一个4位一体的7段LED数码管构成,用于显示测量到的温度及当前的档位。 它是一个共阴极的数码管,本系统采用动态扫描方式。
调用风扇控制函数
调用温度读取函数
结束
程序流程
超声波模块
超声波测距是一种利用超声波特性、电子技术、光电开关相结合来实现非接 触式距离测量的方法。由单片机控制数码管显示电路、超声波发射电路和超 声波接收电路三部分。
开始
系统初始化 发送超声波脉冲 等待反射超声波
基于51单片机的温控风扇设计
基于51单片机的温控风扇设计摘要在炎热的夏天人们用电风扇来降温;在工业生产中,大型机械用电风扇来散热等。
随着温度控制的技术不断发展,应运而生的温控电风扇也逐渐走进了人们的生活中。
温控电风扇可以根据环境温度自动调节电风扇启停与转速,在实际生活的使用中,温控风扇不仅可节省宝贵的电资源,也大大方便了人们的生活和生产。
本设计为一种温控风扇系统,具有灵敏的温度感测和显示功能,系统采用STC89C51 单片机作为控制平台对风扇转速进行控制。
利用DS18B20数字温度传感器采集实时温度,经单片机处理后通过三极管驱动直流风扇的电机。
根据采集的实时温度,实现了风扇的自起自停。
可由用户设置高、低温度值,测得温度值在高低温度之间时打开风扇弱风档,当温度升高超过所设定的温度时自动切换到大风档,当温度小于所设定的温度时自动关闭风扇,控制状态随外界温度而定。
关键词:温控风扇,单片机,DS18B20,自动控制Temperature control fan design based on 51single chip microcomputerABSTRACTIn the hot summer, people use cooling fan; in the industrial production, is used toheat the electric fan large machinery. With the continuous development of thetechnology of temperature control, temperature controlled electric fan emerge as the times require gradually into people's lives. Temperature controlled electric fan can be adjusted automatically stop and start the fan speed according to the environment temperature, the use of real life, temperature controlled fan not only can save power resources valuable, but also greatly facilitate the people's life and production.The design of a temperature controlled fan system, sensitive temperate- easuing and display, the system uses STC89C51 microcontroller as the control platform to control the speed of the fan. The real-time temperature using DS18B20 digital temperature sensor, SCM processing through the transistor DCfan motor drive. According to the real-time temperature acquisition, the fan selfstop. High, low temperature value set by the user, the measured temperaturevalues in the high and low temperature between open fan weak wind profile,when the temperature exceeds the set temperature automatically switch to thefile, automatically turn off the fan when the temperature is lower than the set temperature, the control state varies with the outside temperature.KEY WORDS:Temperature control fan, MCU, DS18B20,automatic control目录前言 (1)第1章绪论 (2)1.1 研究本课题的目的和意义 (2)1.2 发展现状 (2)第2章整体方案选择 (4)2.1 温度传感器的选用 (4)2.2 主控机的选择 (6)2.3显示电路 (6)2.4调速方式 (7)第3章系统硬件组成 (8)3.1 系统结构 (8)3.2 主控芯片介绍 (8)3.2.1 STC89C51简介 (8)3.2.2 STC89C51主要功能和性能参数 (9)3.2.3 STC89C51单片机引脚说明 (10)3.2.4 STC89C51单片机最小系统 (12)3.2.5 STC89C51中断技术概述 (14)3.3 DS18B20温度采集电路 (14)3.3.1 DS18B20 的特点及内部构造 (14)3.3.3 DS18B20的工作原理 (16)3.3.3 DS18B20的工作时序 (19)3.4 数码管驱动显示电路 (21)3.4.1 数码管驱动电路 (21)3.4.2 数码管显示电路 (22)3.5 风扇驱动电路 (23)3.6 按键模块 (26)第4章系统软件设计 (28)4.1 软件介绍 (28)4.1.1 Keil C51 (28)4.1.2 Protel99SE (29)4.1.3 Proteus (30)4.2 主程序流程图 (32)4.3 DS18B20子程序流程图 (33)4.4 数码管显示子程序流程图 (34)4.5 按键子程序流程图 (35)第5章系统调试 (37)5.1 软硬件调试 (37)5.1.1 按键显示部分的调试 (37)5.1.2 传感器DS18B20温度采集部分调试 (37)5.1.3 风扇调速电路部分调试 (38)5.2 系统功能 (38)5.2.1 系统实现的功能 (38)5.2.2 系统功能分析 (39)结论 (40)谢辞 (41)参考文献 (42)附录 (43)附录1:protel原理图 (43)附录2:proteus仿真图 (44)附录3:源程序 (45)外文资料译文 (52)前言在现代社会中,风扇被广泛的应用,发挥着举足轻重的作用,如夏天人们用的散热风扇、工业生产中大型机械中的散热风扇以及现在笔记本电脑上广泛使用的智能CPU风扇等。
51单片机的家用风扇控制器设计 电路图 源码
51单片机的家用风扇控制器设计+电路图+源码摘要:本文设计了一种基于单片机的家用风扇控制器,系统主要由显示模块、温度采集模块、键盘控制模块、风扇驱动模块以及控制系统模块构成。
本设计采用DS18B20 和LCD1602实时的检测和显示室内的温度,同时根据当前温度实现对风扇转速的控制,并有相应的指示灯指示选择的档位。
本设计采用C语言进行程序设计,并采用Proteus和单片机实验箱进行仿真和测试,仿真和测试结果说明本设计实现了预定的功能,并且具有节能、控制方便以及人性化等特点。
关键词:AT89C51;自动控制;温度显示;温控风扇Household Electric Fan Controller Design Based onMCUAbstract: In this paper, the design is a home fan controller based on MCU, and the system is mainly composed of display module, temperature acquisition module, the keyboard control module, fan driver module and control system module. This design adopts DS18B20 and LCD1602 to achieve real-time detection and display of indoor temperature, at the same time control the fan speed according to the current temperature, and make the corresponding indicator light indicate the gear selection. This design uses C language to design program, and uses the Proteus and MCU box to test the simulation and experiment, and the simulation and test results show that the design realized the function of reservation, and it has the characteristics of energy saving, easy control and humanized.Key Words: AT89C51; Self-acting control; Temperature display; Temperature control fan目录摘要1引言11.家用风扇控制系统21.1风扇的工作原理21.2本设计的的目的和意义22.系统总体的设计方案32.1本设计系统要实现的功能3 2.2系统的总体结构框图31. 家用风扇控制系统1.1 风扇的工作原理传统电风扇的主要部件是交流电动机,其工作原理很简单,就是通电后的电磁圈在电磁力力矩的作用下转动扇叶。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
51单片机的家用风扇控制器设计+电路图+源码摘要:本文设计了一种基于单片机的家用风扇控制器,系统主要由显示模块、温度采集模块、键盘控制模块、风扇驱动模块以及控制系统模块构成。
本设计采用DS18B20 和LCD1602实时的检测和显示室内的温度,同时根据当前温度实现对风扇转速的控制,并有相应的指示灯指示选择的档位。
本设计采用C语言进行程序设计,并采用Proteus和单片机实验箱进行仿真和测试,仿真和测试结果说明本设计实现了预定的功能,并且具有节能、控制方便以及人性化等特点。
关键词:AT89C51;自动控制;温度显示;温控风扇Household Electric Fan Controller Design Based onMCUAbstract: In this paper, the design is a home fan controller based on MCU, and the system is mainly composed of display module, temperature acquisition module, the keyboard control module, fan driver module and control system module. This design adopts DS18B20 and LCD1602 to achieve real-time detection and display of indoor temperature, at the same time control the fan speed according to the current temperature, and make the corresponding indicator light indicate the gear selection. This design uses C language to design program, and uses the Proteus and MCU box to test the simulation and experiment, and the simulation and test results show that the design realized the function of reservation, and it has the characteristics of energy saving, easy control and humanized.Key Words: AT89C51; Self-acting control; Temperature display; Temperature control fan目录摘要1引言11.家用风扇控制系统21.1风扇的工作原理21.2本设计的的目的和意义22.系统总体的设计方案32.1本设计系统要实现的功能3 2.2系统的总体结构框图31. 家用风扇控制系统1.1 风扇的工作原理传统电风扇的主要部件是交流电动机,其工作原理很简单,就是通电后的电磁圈在电磁力力矩的作用下转动扇叶。
其能量转化形式主要是电能转化为机械能,由于线圈存在电阻,所以有一局部电能转化为线圈电阻的热能。
有三种方法可以控制扇叶转速:第一,上下电压电路板控制扇叶速度的变化,例如空调室内机;第二,通过改变电阻控制电压变化从而改变扇叶速率,例如局部空调柜;第三,可以用开关电路通过几组线圈改变电动机速率,例如一般吊扇调速器。
1.2 本设计的的目的和意义电风扇有很多优点,例如价格低、体积小、节能、风力温和、易于使用的优点。
伴随着人民生活水平的提高,家用电器的功能日益丰富,并朝着智能化的方向开展,过去的电器的单一功能不能够满足人们的需求,家用电风扇同样需要进行功能上的改良。
本设计就是以单片机为核心,中选择自动控制模式时,根据外界温度的变化实现对电风扇的智能控制,它能够根据外界环境温度值的变化实现自动控制并且使风扇转速根据温度变化而变化,当温度升高时电风扇的电机转速加快从而加速空气流动,使人感到凉爽,当温度降低时风扇电机转速降低,从而可以防止人体因温度降低而感冒,还能够实现节能的功能;中选择手动控制时,人们可以设置三个档位来控制三个不同的电风扇转速,从而实现电风扇控制,改善室内温度。
2. 系统总体的设计方案2.1 本设计系统要实现的功能本系统的总体设计方案:温度传感器检测到的温度信号转化为数字信息传送给单片机AT89C51进行处理,LCD液晶显示器显示当前的外界环境温度值和定时的剩余时间值,根据手动模式时哪个按键按下和自动模式时DS18B20采集到的信息经过经过单片机的信息处理控制风扇机电机的转速;本设计最大的特点就是把手动换挡模式和自动换挡模式结合起来,能够很便利的实现电风扇的控制;手动换挡模式包括三个档位,即一档位,二档位,三档位;自动控制模式亦包括三个档位,当外界环境温度是20~30℃时,自动控制档位是一档位;当外界环境温度是30~40℃时,自动控制调节为二档位;当外界环境温度是40℃以上时自动调节为三档位;以上档位越高电风扇的电机转速越大,根据不同的温度对应不同的转速,从而更加便捷的控制温度。
P1口:P1口是一个内部带有上拉电阻的8位双向I/O口;P1口缓冲器能够接收输出的4TTL门电流。
P1口管脚写入1后,内部就被上拉为高,可用于输入,P1口被外部下拉为低时,就将输出电流,这因为内部上拉的缘故。
P2口:P2 是一个提供内部上拉电阻的8位双向I/O 口,P2 的输出缓冲级可以驱动4 个TTL 逻辑门电路;当对端口P2写1,内部的上拉电阻就把端口拉到高电平,在此时可作输入口,当作输入口使用时,由于内部有上拉电阻,当某个引脚被外部信号拉低时就会输出一个电流。
P3口:P3口是一组带有内部上拉电阻8位双向I/O 口;P3口输出缓冲级可以驱动4 个TTL逻辑门电路;当对P3口写入“1”时,它们就被内部的上拉电阻拉高并作为输入端口;这时,被外部拉低的P3 口将用上拉电阻输出电流;P3口除作为一般I/O口线外,它更重要的作用是它的第二功能;另外P3口还可以接收一些用于Flash闪速存储器编程或程序校验时的控制信号。
RST是复位输入,在振荡器工作时,RST引脚将出现两个机器周期以上的高电平使单片机完成复位。
ALE和PROG:当访问外部程序存储器和数据存储器之一时,地址锁存允许ALE就输出脉冲锁存地址的低8位字节;在一般情况下,ALE 就以时钟振荡频率的1/6 输出固定脉冲信号,进而它可对外输出时钟和用于定时;在对Flash 存储器的编程期间,该引脚用于输入编程脉冲PROG。
PSEN是程序储存允许输出,就是外部程序存储器的读选通信号,在AT89C51 由外部程序存储器取指令〔或数据〕时,在每个机器周期内两次PSEN 有效,即是输出两个脉冲;在此期间,当访问外部数据存储器时,就将跳过两次PSEN信号。
3.2 温度检测芯片的选择本设计采用DS18B20温度传感器,DS18B20内部结构主要由4局部组成:64 位的ROM、非挥发的温度报警触发器TH和TL、配置存放器和温度传感器[2]。
单线数字温度传感器DS18B20具有3 引脚T0~92 小体积的封装形式;温度测量范围-55℃~+125℃;可编程9~12 位的A/D转换精度,测温分辨率能够到达0.0625℃;被测温度值用符号扩展的16 位数字量形式串行输出。
工作电压支持3V~5.5V ,不仅可在远端引入,而且可采用寄生电源方式产生;DS18B20 支持“一线总线”接口,即多个DS18B20能够并联到3 根或2 根线上使用,CPU只要一根端口线就能够与诸多DS18B20 传输数字[3],占用的微处理器端口比拟少,因此可节省大量引线或逻辑电路;另外还有存储用户定义报警温度等功能。
风扇电机驱动电路采用L298〔如图4所示〕作为驱动芯片,L298是由SGS公司生产的的恒压恒流桥式2A驱动芯片,可以驱动一个两相步进电机或者两个直流电机。
各个引脚的简单介绍如下:IN1~IN4 :电机旋转方式控制端。
OUT1~OUT4:接电动机。
VCC和VS:接电源。
图4 驱动芯片L2983.5 系统总体电路设计Proteus是英国Labcenter electronics公司的创造的EDA工具软件;Proteus有4个功能:原理图设计、电路仿真功能、单片机协同仿真功能和PCB设计平台[5];其内部元件库包含大量的元件,并且支持总线结构和智能化的连线功能;支持主流CPU及其通用外设模型的仿真等,给单片机的开发设计带来极大的方便。
本设计采用Proteus进行原理图绘制和仿真。
如图5所示是本设计的Proteus原理图设计,本设计包含几个模块,即显示模块电路、振荡电路、复位电路、指示灯指示电路、按键电路、DS18B20测温电路、电机控制模块电路。
各个模块之间相互配合完成了本设计的根本功能。
显示模块电路的功能实现实时显示室内温度值和倒计时关机剩余时间;DS18B20测温电路检测室内温度后通过单片机控制LCD1602显示当前室内温度;指示灯指示电路指示当前的工作状态;按键电路实现对系统工作状态的控制;电机控制模块电路驱动电动机按不同的转速进行转动。
振荡电路和复位电路以及单片机一起组成单片机的根本电路模块。
图5 系统的原理图设计4. 系统的软件设计4. 1 系统总体软件设计流程图程序设计主要局部包括主程序、DS18B20的初始化函数、DS18B20的温度转换函数、温度的读取函数、键盘的扫描函数、数码管的显示函数、温度处理的函数以及风扇电机转速控制的函数、LCD液晶显示函数、定时关闭电机函数[6]。
DS18B20的初始化函数主要完成对DS18B20的初始化;DS18B20的温度转换函数主要完成对环境温度的实时采集;温度的读取函数主要完成主机对传感器的读取数据和数据换算,键盘扫描的函数主要完成档位设置和类型设置;温度处理函数主要对采集到的温度分析出理,进而控制电机转速的变化;风扇电机的控制函数那么根据检测温度的数值进行对电机转速和启停的即时控制;LCD液晶显示函数显示DS18B20采集到的外界温度值和定时剩余时间;定时关闭电机函数进行定时实现电机的定时关闭。
4.3 系统程序的编译和调试编译:用Keil 软件编译,翻开Keil 软件后,建立所要编译的工程,设置目标工程的相关选项,随后用Build target对源程序进行编译;如果出现警告和错误,就要去修改使程序正确,直至程序编译正确。