一.硬件方案
系统采用51单片机作为控制平台对风扇转速进行控制。可由用户设置高、低温度值,测得温度值在高低温度之间时打开风扇弱风档,当温度升高超过所设定的温度时自动切换到大风档,当温度小于所设定的温度时自动关闭风扇。风扇控制状态随外界温度而定,并通过PWM的方式控制风扇的转速。电路主要由51单片机+最小系统+数码管显示模块+数码管驱动模块+温度采集模块+人体感应模块+风扇模块+按键模块等构成:
二.设计功能
(1)采用DS18B20温度传感器测温,三级管驱动数码管显示温度和风扇的档位,人体感应模块检测是否有人。
(2)共3个按键:1设置、2键加、3键减。按一下设置可以设置上限值,再按下设置下限,均可以按键加减调整;
(3)利用PWM调速,当温度低于下限时,风扇步转动,当温度处于上下限之间时,1档转动(风速50%转速转动),当温度超过上限时,风扇全速转动。
(4)红外人体传感器检测周围是否有人,当周围无人时,风扇停止转动。
三.设计原理图
(1)原理图主要采用AD软件进行设计,如图:
(2)Protues仿真图如下:
四.软件设计
主程序源码
/****************主函数***************/
void main()
{static uchar value;time_init(); //初始化定时器 pwm=1;hw = 1;while(1){ key(); //按键程序if(key_can < 10){key_with(); //设置温度 }if(flag_200ms == 1) //200ms 处理一次温度程序{ flag_200ms = 0; temperature = read_temp()%1000; //先读出温度的值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(); //风扇控制函数value ++;if(value >= 4){value = 0;if(miao != 0){miao --; //时间减1}if(miao == 0)flag_en = 0;}if(hw == 1) //感应到人{miao = 30;flag_en = 1;}}}
}/*************定时器0中断服务程序***************/
void time0_int() interrupt 1
{ static uchar value; //定时2ms中断一次TH0 = 0xf8;TL0 = 0x30; //2msvalue++; display(); //数码管显示函数if(value >= 150){value = 0; flag_200ms = 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秒连加大些} }}
}
资料链接:https://pan.baidu.com/s/1o8zRxoETzARNyNBTpz3vWA?pwd=57gd