资料编号:074
功能介绍:采用stm32单片机作为主控CPU,采用DHT11传感器采集温湿度,采用光敏传感器采集光照强度,通过按键设置温湿度、光照的阈值,当温度高于设置值,继电器开启散热,当湿度低于设置值,继电器开启加湿,当光敏值大于设置值,蜂鸣器进行报警提醒,LCD1602显示相关数据,程序中文注释,新手容易看懂,全套实物资料齐全:
下面是实物演示视频和相关实物图片
下面是程序部分展示(程序有中文注释,新手容易看懂)
部分程序展示:
//定时器设置1
void TimerConfig(TIM_TypeDef* TIMx,unsigned int time)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_DeInit(TIMx);
TIM_TimeBaseStructure.TIM_Period = time * 2; /* 自动重装载寄存器周期的值(计数值) */
/* 累计 TIM_Period个频率后产生一个更新或者中断 */
TIM_TimeBaseStructure.TIM_Prescaler= (4000- 1); /* 时钟预分频数 例如:时钟频率=72MHZ/(时钟预分频+1) */
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; /* 采样分频 */
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; /* 向上计数模式 */
TIM_TimeBaseInit(TIMx, &TIM_TimeBaseStructure);
TIM_ClearFlag(TIMx, TIM_FLAG_Update); /* 清除溢出中断标志 */
TIM_ITConfig(TIMx,TIM_IT_Update,ENABLE);
}
//定时器开关
void TimerSW( TIM_TypeDef* TIMx, FunctionalState NewState )
{
TIM_SetCounter(TIMx,0);
TIM_Cmd(TIMx,NewState);
}
char k6,k7;
/*
wendu,shidu,guangqiang,xiaoshi,fenzhong
*/
void Display(void)
{
char xxx=0,yyy=0;
//T1 温度
WrByte1602(0,0,'T'); //.
WrByte1602(0,1,'='); //.
WrByte1602(0,2,AsciiCode[wendu%100/10]);
WrByte1602(0,3,AsciiCode[wendu%10]);
WrByte1602(0,4,' ');
//T2 湿度
WrByte1602(0,5,'H'); //.
WrByte1602(0,6,'='); //.
WrByte1602(0,7,AsciiCode[shidu%100/10]);
WrByte1602(0,8,AsciiCode[shidu%10]);
WrByte1602(0,9,' ');
//T3 光强
WrByte1602(0,10,'G'); //.
WrByte1602(0,11,'='); //.
WrByte1602(0,12,AsciiCode[guangqiang%1000/100]);
WrByte1602(0,13,AsciiCode[guangqiang%100/10]);
WrByte1602(0,14,AsciiCode[guangqiang%10]);
WrByte1602(0,15,' ');
xxx=0;yyy=1;
//T6 湿度动作值
WrByte1602(1,2,AsciiCode[wendu1%100/10]);
WrByte1602(1,3,AsciiCode[wendu1%10]);
WrByte1602(1,7,AsciiCode[shidu1%100/10]);
WrByte1602(1,8,AsciiCode[shidu1%10]);
WrByte1602(1,12,AsciiCode[gm%1000/100]);
WrByte1602(1,13,AsciiCode[gm%100/10]);
WrByte1602(1,14,AsciiCode[gm%10]);
}
int main(void)
{
char i=0;
float vol;//电压
//时钟配置
SystemInit();
SystemCoreClockUpdate();
//引脚配置
GPIO_Configuration();
//LCD1602初始化
Init1602();
NVICConfig();
//RCC时钟开启
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
//定时器
TimerConfig(TIM3,10);//定时器
//开启定时器
TimerSW(TIM3, ENABLE);
//获取光敏电阻阻值,单位K欧
ADC_Set();
//DS1302数据编码格式需要进行转换
PBout(5)=0;//LED灯亮
//WriteDS1302Clock(time_buf);
while (1)
{
delay_ms(10);
//计算光强
vol = ADC_GetConversionValue(ADC1);
vol = 10*(4095-vol)/vol;
//根据阻值计算光强
guangqiang = 285.6*pow(vol,-1.168)+0.1;
//读取室内温度
DHT11_receive(&shidu,&wendu);
Display();
//按键扫描
anjiansaomiao();
if(wendu%100>wendu1) Q1=0;
else Q1=1;
if(shidu%100>shidu1) Q2=0;
else Q2=1;
if(guangqiang>gm) Q3=0;
else Q3=1;
程序打开方法:采用keil5打开,公众号有软件安装包
原理图采用【AD】altium designer打开,公众号有安装包
下面是资料包里面包含的相关文件展示
资料源链接:设计资料合集