单片机技术网|技术阅读
登录|注册

您现在的位置是:单片机技术网 > 技术阅读 > 基于STM32的pwm温控风扇(带人体检测)

基于STM32的pwm温控风扇(带人体检测)

.

      STM32DS18B20 LCD1602STM32

   STM32+LCD1602+DS18B20++PWM+

.

1LCD1602

22

3

4

5pwm10


.

1AD,

2PCB

.

1

2

int main(void){ u8 count = 0; Motor = 0; delay_init(); //延时函数初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 delay_ms(500); LCD_Init();//1602初始化 KEY_Init();//按键初始化 while(DS18B20_Init())//温度初始化 { LCD_Write_String(0,0," DS18B20 Erro "); LCD_Write_String(0,1," "); } DS18B20_Get_Temp();//温度初始化 LCD_Write_String(0,0," DS18B20 Init..."); delay_ms(1000); LCD_Write_String(0,0,"Temp: C M: C"); LCD_Write_String(0,1,"Auto: Gear: "); TIM3_Int_Init(1,7199);//10kh频率计数,定时100us if(Auto_flag == 1) LCD_Write_String(5,1,"on "); else LCD_Write_String(5,1,"off"); display_Max(); while(1) { keyscan();//按键扫描 if(count++ >= 200)//延时一段时间读取温度 { count = 0; temperature = DS18B20_Get_Temp();//获取温度 if(temperature<0) { LCD_Write_Char(5,0,'-'); //显示负号 temperature=-temperature; //转为正数 }else LCD_Write_Char(5,0,' '); //去掉负号 //显示温度 LCD_Write_Char(6,0,temperature/100+'0'); LCD_Write_Char(7,0,temperature%100/10+'0'); if(Auto_flag == 1)//在开启模式下,感应到有人,并且温度超过上限开启风扇 { if(RTHW == 1)//感应到有人 { temp_dispose(temperature/10);//根据温度进行pwm调节 } else//没感应到有人,关闭风扇 { PWM_Val = 100; Motor = 0; LCD_Write_String(14,1,"--"); } } else//关闭风扇 { PWM_Val = 100; Motor = 0; LCD_Write_String(14,1,"--"); } } delay_ms(1); }}