求毕业设计:基于AT89C51的智能电风扇控制系统

时间:2021-11-27 06:46:34

本设计以MCS51单片机为核心,通过温度传感器对环境温度进行数据采集,从而建立一个控制系统,使电风扇随温度的变化而自动变换档位,实现“温度高,风力大,温度低,风力弱”的性能。另外,通过键盘控制面板,用户可以在一定范围内设置电风扇的最低工作温度,当温度低于所设置温度时,电风扇将自动关闭,当高于此温度时电风扇又将重新启动。

本设计主要内容如下:
① 风速设为从高到低5个档位,可由用户通过键盘手动设定。
② 当温度每降低2℃则电风扇风速自动下降一个档位。
③ 当温度每升高2℃则电风扇风速自动上升一个档位。
 ④ 用户可设定电风扇最低工作温度,当低于该温度时,电风扇自动停转。

16 个解决方案

#1


首先是温度检测,选用普通二极管就可以了。PN结通恒定电流,结电压在常温的一定范围内,与温度变化基本是显性关系。
根据这个,加一级运放,把输出的电压ADC,然后就可以交给51处理了。注意最好选用精密的基准电压源(受环境温度影响要小)给运放和ADC提供参考电压。
程序可以采用查询的方式,具体实现起来没什么难度。

#2


我觉得采集还是用590或者1820之类的吧

#3


风扇这种东西想让温度降2度,太难了

搞不好得吹上半天

因为,丫是在一个开放的区域里面进行的

没有热交换的过程,谁想的这个题的?

太想当然了

#4


用AVR的芯片可以直接用内置的ADC功能,更简单

#5


18b20是够了,就和楼上说的一样,你想把温度用风扇降2度,????有点难度啊

#6


加我QQ:1140596378,我可以帮你做,包你满意,速度快!有意,Q上聊

#7


加我Q:1140596378,我可以帮你做,做好后给你讲解,包你满意。。。

#8


让风扇降温这想法简直就是疯狂啊,没听说风扇可以大范围降温的!当热到一定程度,风扇就不起认可作用了!

#9


谁会做冰箱温控器???

#10


该回复于2009-10-13 11:15:51被版主删除

#11


吹风扇是不会改变室温的  根据能量守恒,反倒增加温度   你没有想到吧!

#12


引用 9 楼 dongfanghuazi 的回复:
谁会做冰箱温控器???

机械的还是电子的!

#13


引用 3 楼 lbing7 的回复:
风扇这种东西想让温度降2度,太难了

搞不好得吹上半天

因为,丫是在一个开放的区域里面进行的

没有热交换的过程,谁想的这个题的?

太想当然了

只是说明一个温度,并没有让它降温,lz的说法有误,应该是温度和设定值间的温差,
出这个题的人脑子有问题,典型的学究派!

#14


楼主能出多少的RMB?温度能不能降,不一定。。但是肯定能包通过您的毕业设计。。保证满意!~

#15


#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar flag=0;
uchar flad=0;
uchar flau=0;
uchar flav=0;
sbit P20=P2^0;
uint key=0;
uint th0l,th0h,tl0l,tl0h;
uint th1l,th1h,tl1l,tl1h;
void delay(uint n)
{
  uint i,j;
  for(i=0;i<n;i++)
  for(j=0;j<123;j++);

void init()
{
  TMOD=0x11;
  TH1=0x3c;
  TL1=0xb0;
  TH0=0xfc;
  TL0=0x18;
  ET1=1;
  ET0=1;
  TR1=1;
  TR0=1;
  EA=1;
  P20=1;
  key=0;
}

void rupt1()interrupt 3
{
  if(!flav)
  {
    P21=0;
TH1=th1h;
TL1=th1l;
  }
  else
  {
    P21=1;
TH1=tl1h;
TL1=tl1l;
  }
  flav=!flav;
}
void rupt0()interrupt 1
{
  if(!flag)
  {
   P20=1;
   TH0=th0h;
   TL0=th0l;
  }
  else
    {
 P20=0;
 TH0=tl0h;
 TL0=tl0l;
 flad=0;
}
 flag=!flag;
}
void main()
{
  init();
  do{
  if(!flad)
    {
  switch(key)
       {
    case(7):  th0h=0xfc;th0l=0xe0;tl0h=0xb5;tl0l=0x00; flad=1;break;//0.8ms
case(6):  th0h=0xfc;th0l=0x7c;tl0h=0xb5;tl0l=0x64; flad=1;break; //0.9ms
case(5):  th0h=0xfc;th0l=0x18;tl0h=0xb5;tl0l=0xc8; flad=1;break; //1.0ms
case(4):  th0h=0xfb;th0l=0xb4;tl0h=0xb6;tl0l=0x2c; flad=1;break; //1.1ms
case(3):  th0h=0xfb;th0l=0x50;tl0h=0xb6;tl0l=0x90; flad=1;break; //1.2ms
case(2):  th0h=0xfa;th0l=0xec;tl0h=0xb6;tl0l=0xf4; flad=1;break;   //1.3ms
case(1):  th0h=0xfa;th0l=0x88;tl0h=0xb7;tl0l=0x58; flad=1;break;  //1.4ms
case(0):  th0h=0xfa;th0l=0x24;tl0h=0xb7;tl0l=0xbc; flad=1;break; //1.5ms
case(11): th0h=0xf9;th0l=0xc0;tl0h=0xb8;tl0l=0x20; flad=1;break; //1.6ms
case(12): th0h=0xf9;th0l=0x5c;tl0h=0xb8;tl0l=0x84; flad=1;break;   //1.7ms
case(13): th0h=0xf8;th0l=0xf8;tl0h=0xb8;tl0l=0xe8; flad=1;break; //1.8ms
case(14): th0h=0xf8;th0l=0x94;tl0h=0xb9;tl0l=0x4c; flad=1;break; //1.9ms
case(15): th0h=0xf8;th0l=0x30;tl0h=0xb9;tl0l=0xb0; flad=1;break; //2.0ms
case(16): th0h=0xf7;th0l=0xcc;tl0h=0xba;tl0l=0x14; flad=1;break; //2.1ms
case(17): th0h=0xf7;th0l=0x68;tl0h=0xba;tl0l=0x78; flad=1;break; //2.2ms
case(18): th0h=0xf7;th0l=0x04;tl0h=0xba;tl0l=0xdc; flad=1;break;// 2.3ms
case(19): th0h=0xf6;th0l=0xa0;tl0h=0xbb;tl0l=0x40; flad=1;break; // 2.4ms
case(20): th0h=0xf6;th0l=0x3c;tl0h=0xbb;tl0l=0xa4; flad=1;break;// 2.5ms时舵机(从正面看)向左转到快到极限。
        default:break;
        } 
}
}while(1);
   if(!flau)
   {
    switch(key)
  {
    case(7): th1l=,th1h=,tl1l=,tl1h=;flau=1;break;
case(6): th1l=,th1h=,tl1l=,tl1h=;flau=1;break;
case(5): th1l=,th1h=,tl1l=,tl1h=;flau=1;break;
case(4): th1l=,th1h=,tl1l=,tl1h=;flau=1;break;
case(3): th1l=,th1h=,tl1l=,tl1h=;flau=1;break;
case(2): th1l=,th1h=,tl1l=,tl1h=;flau=1;break;
case(1): th1l=,th1h=,tl1l=,tl1h=;flau=1;break;
case(0): th1l=,th1h=,tl1l=,tl1h=;flau=1;break;
case(11): th1l=,th1h=,tl1l=,tl1h=;flau=1;break;
case(12): th1l=,th1h=,tl1l=,tl1h=;flau=1;break;
case(13): th1l=,th1h=,tl1l=,tl1h=;flau=1;break;
case(14): th1l=,th1h=,tl1l=,tl1h=;flau=1;break;
case(15): th1l=,th1h=,tl1l=,tl1h=;flau=1;break;
case(16): th1l=,th1h=,tl1l=,tl1h=;flau=1;break;
case(17): th1l=,th1h=,tl1l=,tl1h=;flau=1;break;
    case(18): th1l=,th1h=,tl1l=,tl1h=;flau=1;break;
case(19): th1l=,th1h=,tl1l=,tl1h=;flau=1;break;
case(20): th1l=,th1h=,tl1l=,tl1h=;flau=1;break;
   }
   }
}
很简单,看懂以上程序也许会对你有所帮助。

#16


楼上很强大    很好。。。

#1


首先是温度检测,选用普通二极管就可以了。PN结通恒定电流,结电压在常温的一定范围内,与温度变化基本是显性关系。
根据这个,加一级运放,把输出的电压ADC,然后就可以交给51处理了。注意最好选用精密的基准电压源(受环境温度影响要小)给运放和ADC提供参考电压。
程序可以采用查询的方式,具体实现起来没什么难度。

#2


我觉得采集还是用590或者1820之类的吧

#3


风扇这种东西想让温度降2度,太难了

搞不好得吹上半天

因为,丫是在一个开放的区域里面进行的

没有热交换的过程,谁想的这个题的?

太想当然了

#4


用AVR的芯片可以直接用内置的ADC功能,更简单

#5


18b20是够了,就和楼上说的一样,你想把温度用风扇降2度,????有点难度啊

#6


加我QQ:1140596378,我可以帮你做,包你满意,速度快!有意,Q上聊

#7


加我Q:1140596378,我可以帮你做,做好后给你讲解,包你满意。。。

#8


让风扇降温这想法简直就是疯狂啊,没听说风扇可以大范围降温的!当热到一定程度,风扇就不起认可作用了!

#9


谁会做冰箱温控器???

#10


该回复于2009-10-13 11:15:51被版主删除

#11


吹风扇是不会改变室温的  根据能量守恒,反倒增加温度   你没有想到吧!

#12


引用 9 楼 dongfanghuazi 的回复:
谁会做冰箱温控器???

机械的还是电子的!

#13


引用 3 楼 lbing7 的回复:
风扇这种东西想让温度降2度,太难了

搞不好得吹上半天

因为,丫是在一个开放的区域里面进行的

没有热交换的过程,谁想的这个题的?

太想当然了

只是说明一个温度,并没有让它降温,lz的说法有误,应该是温度和设定值间的温差,
出这个题的人脑子有问题,典型的学究派!

#14


楼主能出多少的RMB?温度能不能降,不一定。。但是肯定能包通过您的毕业设计。。保证满意!~

#15


#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar flag=0;
uchar flad=0;
uchar flau=0;
uchar flav=0;
sbit P20=P2^0;
uint key=0;
uint th0l,th0h,tl0l,tl0h;
uint th1l,th1h,tl1l,tl1h;
void delay(uint n)
{
  uint i,j;
  for(i=0;i<n;i++)
  for(j=0;j<123;j++);

void init()
{
  TMOD=0x11;
  TH1=0x3c;
  TL1=0xb0;
  TH0=0xfc;
  TL0=0x18;
  ET1=1;
  ET0=1;
  TR1=1;
  TR0=1;
  EA=1;
  P20=1;
  key=0;
}

void rupt1()interrupt 3
{
  if(!flav)
  {
    P21=0;
TH1=th1h;
TL1=th1l;
  }
  else
  {
    P21=1;
TH1=tl1h;
TL1=tl1l;
  }
  flav=!flav;
}
void rupt0()interrupt 1
{
  if(!flag)
  {
   P20=1;
   TH0=th0h;
   TL0=th0l;
  }
  else
    {
 P20=0;
 TH0=tl0h;
 TL0=tl0l;
 flad=0;
}
 flag=!flag;
}
void main()
{
  init();
  do{
  if(!flad)
    {
  switch(key)
       {
    case(7):  th0h=0xfc;th0l=0xe0;tl0h=0xb5;tl0l=0x00; flad=1;break;//0.8ms
case(6):  th0h=0xfc;th0l=0x7c;tl0h=0xb5;tl0l=0x64; flad=1;break; //0.9ms
case(5):  th0h=0xfc;th0l=0x18;tl0h=0xb5;tl0l=0xc8; flad=1;break; //1.0ms
case(4):  th0h=0xfb;th0l=0xb4;tl0h=0xb6;tl0l=0x2c; flad=1;break; //1.1ms
case(3):  th0h=0xfb;th0l=0x50;tl0h=0xb6;tl0l=0x90; flad=1;break; //1.2ms
case(2):  th0h=0xfa;th0l=0xec;tl0h=0xb6;tl0l=0xf4; flad=1;break;   //1.3ms
case(1):  th0h=0xfa;th0l=0x88;tl0h=0xb7;tl0l=0x58; flad=1;break;  //1.4ms
case(0):  th0h=0xfa;th0l=0x24;tl0h=0xb7;tl0l=0xbc; flad=1;break; //1.5ms
case(11): th0h=0xf9;th0l=0xc0;tl0h=0xb8;tl0l=0x20; flad=1;break; //1.6ms
case(12): th0h=0xf9;th0l=0x5c;tl0h=0xb8;tl0l=0x84; flad=1;break;   //1.7ms
case(13): th0h=0xf8;th0l=0xf8;tl0h=0xb8;tl0l=0xe8; flad=1;break; //1.8ms
case(14): th0h=0xf8;th0l=0x94;tl0h=0xb9;tl0l=0x4c; flad=1;break; //1.9ms
case(15): th0h=0xf8;th0l=0x30;tl0h=0xb9;tl0l=0xb0; flad=1;break; //2.0ms
case(16): th0h=0xf7;th0l=0xcc;tl0h=0xba;tl0l=0x14; flad=1;break; //2.1ms
case(17): th0h=0xf7;th0l=0x68;tl0h=0xba;tl0l=0x78; flad=1;break; //2.2ms
case(18): th0h=0xf7;th0l=0x04;tl0h=0xba;tl0l=0xdc; flad=1;break;// 2.3ms
case(19): th0h=0xf6;th0l=0xa0;tl0h=0xbb;tl0l=0x40; flad=1;break; // 2.4ms
case(20): th0h=0xf6;th0l=0x3c;tl0h=0xbb;tl0l=0xa4; flad=1;break;// 2.5ms时舵机(从正面看)向左转到快到极限。
        default:break;
        } 
}
}while(1);
   if(!flau)
   {
    switch(key)
  {
    case(7): th1l=,th1h=,tl1l=,tl1h=;flau=1;break;
case(6): th1l=,th1h=,tl1l=,tl1h=;flau=1;break;
case(5): th1l=,th1h=,tl1l=,tl1h=;flau=1;break;
case(4): th1l=,th1h=,tl1l=,tl1h=;flau=1;break;
case(3): th1l=,th1h=,tl1l=,tl1h=;flau=1;break;
case(2): th1l=,th1h=,tl1l=,tl1h=;flau=1;break;
case(1): th1l=,th1h=,tl1l=,tl1h=;flau=1;break;
case(0): th1l=,th1h=,tl1l=,tl1h=;flau=1;break;
case(11): th1l=,th1h=,tl1l=,tl1h=;flau=1;break;
case(12): th1l=,th1h=,tl1l=,tl1h=;flau=1;break;
case(13): th1l=,th1h=,tl1l=,tl1h=;flau=1;break;
case(14): th1l=,th1h=,tl1l=,tl1h=;flau=1;break;
case(15): th1l=,th1h=,tl1l=,tl1h=;flau=1;break;
case(16): th1l=,th1h=,tl1l=,tl1h=;flau=1;break;
case(17): th1l=,th1h=,tl1l=,tl1h=;flau=1;break;
    case(18): th1l=,th1h=,tl1l=,tl1h=;flau=1;break;
case(19): th1l=,th1h=,tl1l=,tl1h=;flau=1;break;
case(20): th1l=,th1h=,tl1l=,tl1h=;flau=1;break;
   }
   }
}
很简单,看懂以上程序也许会对你有所帮助。

#16


楼上很强大    很好。。。