一、功能簡介
本項(xiàng)目使用Proteus8仿真STM32單片機(jī)控制器,使用LCD1602顯示模塊、蜂鳴器、按鍵模塊、DHT11溫濕度傳感器、繼電器加熱祛濕加濕模塊等。
主要功能:
系統(tǒng)運(yùn)行后,LCD1602顯示傳感器檢測的溫度、濕度及有害氣體濃度值;若按下K3鍵進(jìn)入閾值設(shè)置模式,默認(rèn)以溫度下限開始位置閃爍;再次按下K3鍵則進(jìn)入溫度上限閃爍,如此循環(huán)??赏ㄟ^K1和K2調(diào)節(jié)閾值,當(dāng)設(shè)定好后按下K4鍵確定并返回主界面;
如果溫度高于上限,打開風(fēng)扇;如果溫度低于下限,打開加熱;
如果溫度在閾值范圍內(nèi),關(guān)閉風(fēng)扇和加熱;
如果濕度高于上限,打開除濕;如果濕度低于下限,打開加濕;
如果濕度在閾值范圍內(nèi),關(guān)閉除濕和加濕;
如果有害氣體濃度高于上限,蜂鳴器報(bào)警;否則關(guān)閉報(bào)警;
主要功能如下:
1、溫度/濕度/有害氣體檢測
2、LCD1602顯示
3、閾值設(shè)置/報(bào)警指示
4、自動(dòng)控制調(diào)節(jié)
二、軟件設(shè)計(jì)
/*
作者:嗨小易(QQ:3443792007)
*/
//系統(tǒng)數(shù)據(jù)獲取
void sys_data_get(void)
{
while(1)
{
//讀取DHT11溫濕度值
DHT11_Read_Data(&sys_ctrl.temp,&sys_ctrl.humi);
//獲取有害氣體濃度
sys_ctrl.gas=pcf8591_read_adcvalue(0);
sys_ctrl.gas=cal_map(sys_ctrl.gas,0,255,0,99);
break;
}
}
//系統(tǒng)數(shù)據(jù)顯示
void sys_data_show(void)
{
while(1)
{
//溫度顯示
lcd1602_show_nums(3,0,sys_ctrl.temp,2,0);
//濕度顯示
lcd1602_show_nums(3,1,sys_ctrl.humi,2,0);
//有害氣體濃度顯示
lcd1602_show_nums(14,0,sys_ctrl.gas,2,0);
//溫度閾值顯示
lcd1602_show_nums(7,0,sys_ctrl.templ,2,0);
lcd1602_show_nums(10,0,sys_ctrl.temph,2,0);
//濕度閾值顯示
lcd1602_show_nums(7,1,sys_ctrl.humil,2,0);
lcd1602_show_nums(10,1,sys_ctrl.humih,2,0);
//有害氣體濃度閾值顯示
lcd1602_show_nums(14,1,sys_ctrl.gash,2,0);
//設(shè)置閾值下,數(shù)字閃爍提示
switch(sys_ctrl.mode)
{
case 1://溫度下限
lcd1602_show_string(7,0," ");
delay_ms(30);
lcd1602_show_nums(7,0,sys_ctrl.templ,2,0);
break;
case 2://溫度上限
lcd1602_show_string(10,0," ");
delay_ms(30);
lcd1602_show_nums(10,0,sys_ctrl.temph,2,0);
break;
case 3://濕度下限
lcd1602_show_string(7,1," ");
delay_ms(30);
lcd1602_show_nums(7,1,sys_ctrl.humil,2,0);
break;
case 4://濕度上限
lcd1602_show_string(10,1," ");
delay_ms(30);
lcd1602_show_nums(10,1,sys_ctrl.humih,2,0);
break;
case 5://有害氣體濃度上限
lcd1602_show_string(14,1," ");
delay_ms(30);
lcd1602_show_nums(14,1,sys_ctrl.gash,2,0);
break;
}
break;
}
}
//系統(tǒng)數(shù)據(jù)設(shè)置
void sys_data_set(void)
{
u8 key=0;
key=KEY_Scan(0);
//模式設(shè)置
if(key==KEY3_PRESS)
{
sys_ctrl.mode++;
if(sys_ctrl.mode>5)sys_ctrl.mode=1;
}
//在設(shè)置模式下,加
else if(key==KEY1_PRESS)
{
switch(sys_ctrl.mode)
{
case 1://溫度下限
sys_ctrl.templ++;
if(sys_ctrl.templ>99)sys_ctrl.templ=0;
break;
case 2://溫度上限
sys_ctrl.temph++;
if(sys_ctrl.temph>99)sys_ctrl.temph=0;
break;
case 3://濕度下限
sys_ctrl.humil++;
if(sys_ctrl.humil>99)sys_ctrl.humil=0;
break;
case 4://濕度上限
sys_ctrl.humih++;
if(sys_ctrl.humih>99)sys_ctrl.humih=0;
break;
case 5://有害氣體濃度上限
sys_ctrl.gash++;
if(sys_ctrl.gash>99)sys_ctrl.gash=0;
break;
}
}
//在設(shè)置模式下,減
else if(key==KEY2_PRESS)
{
switch(sys_ctrl.mode)
{
case 1://溫度下限
sys_ctrl.templ--;
if(sys_ctrl.templ<0)sys_ctrl.templ=99;
break;
case 2://溫度上限
sys_ctrl.temph--;
if(sys_ctrl.temph<0)sys_ctrl.temph=99;
break;
case 3://濕度下限
sys_ctrl.humil--;
if(sys_ctrl.humil<0)sys_ctrl.humil=99;
break;
case 4://濕度上限
sys_ctrl.humih--;
if(sys_ctrl.humih<0)sys_ctrl.humih=99;
break;
case 5://有害氣體濃度上限
sys_ctrl.gash--;
if(sys_ctrl.gash<0)sys_ctrl.gash=99;
break;
}
}
//確定
else if(key==KEY4_PRESS)
{
sys_ctrl.mode=0;
}
}
//應(yīng)用控制系統(tǒng)
void appdemo_show(void)
{
u8 i=5;
sys_parm_init();//系統(tǒng)參數(shù)初始化
KEY_Init();
BEEP_Init();
DHT11_Init();
ctrl_pin_init();
pcf8591_init();
while(i--)
{
//讀取DHT11溫濕度值
DHT11_Read_Data(&sys_ctrl.temp,&sys_ctrl.humi);
//獲取有害氣體濃度
sys_ctrl.gas=pcf8591_read_adcvalue(0);
sys_ctrl.gas=cal_map(sys_ctrl.gas,0,255,0,99);
delay_ms(100);
}
lcd1602_init();//LCD1602初始化
sys_open_show();//系統(tǒng)初始界面顯示
while(1)
{
sys_data_get();//系統(tǒng)數(shù)據(jù)獲取
sys_data_show();//系統(tǒng)數(shù)據(jù)顯示
sys_data_set();//系統(tǒng)數(shù)據(jù)設(shè)置
sys_fun_ctrl();//系統(tǒng)功能控制
}
}
三、實(shí)驗(yàn)現(xiàn)象
B站演示視頻:https://space.bilibili.com/444388619
文章來源:http://www.zghlxwxcb.cn/news/detail-789255.html
聯(lián)系作者
專注于51單片機(jī)、STM32、國產(chǎn)32、DSP、Proteus、ardunio、ESP32、物聯(lián)網(wǎng)軟件開發(fā),PCB設(shè)計(jì),視頻分享,技術(shù)交流。文章來源地址http://www.zghlxwxcb.cn/news/detail-789255.html
到了這里,關(guān)于【Proteus仿真】【STM32單片機(jī)】環(huán)境監(jiān)測系統(tǒng)設(shè)計(jì)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!