您的位置:首页 > 健康 > 养生 > 基于51单片机的温控风扇-数码管显示-风扇人体感应

基于51单片机的温控风扇-数码管显示-风扇人体感应

2025/1/7 13:07:28 来源:https://blog.csdn.net/eletronicfish/article/details/139665537  浏览:    关键词:基于51单片机的温控风扇-数码管显示-风扇人体感应

一.硬件方案

系统采用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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com