|
設(shè)計(jì)要求
1.設(shè)計(jì)一套基于51單片機(jī)的溫濕度Proteus仿真監(jiān)控系統(tǒng); 2.采用SHT11、DHT11或DS18B20傳感器模塊; 3.LCD液晶實(shí)時(shí)顯示當(dāng)前環(huán)境溫濕度值; 4.設(shè)計(jì)報(bào)警單元,實(shí)現(xiàn)系統(tǒng)對(duì)超限溫濕度監(jiān)控報(bào)警; 5.設(shè)計(jì)輸入單元,可對(duì)系統(tǒng)正常溫濕度范圍進(jìn)行調(diào)節(jié); 6.仿真系統(tǒng)能夠可靠、穩(wěn)定地運(yùn)行;
概述
系統(tǒng)通過(guò)SHT11溫濕度傳感器感應(yīng)周?chē)沫h(huán)境的溫度和濕度,通過(guò)單片機(jī)對(duì)采集到的數(shù)據(jù)進(jìn)行讀取處理,經(jīng)過(guò)LCD1602顯示模塊實(shí)時(shí)顯示溫濕度數(shù)據(jù),同時(shí)可以通過(guò)按鍵模塊對(duì)溫濕度報(bào)警上、下限值進(jìn)行設(shè)定。當(dāng)SHT11讀取的溫濕度值不再設(shè)定范圍內(nèi)時(shí),報(bào)警模塊LED燈指示故障信息,同時(shí)蜂鳴器報(bào)警;當(dāng)溫濕度讀取數(shù)據(jù)正常后,LED燈熄滅,蜂鳴器關(guān)閉。
系統(tǒng)運(yùn)行
資料截圖5.jpg (82.99 KB, 下載次數(shù): 96)
下載附件
2019-8-18 21:20 上傳
仿真總電路圖
模糊化.jpg (195.21 KB, 下載次數(shù): 102)
下載附件
2019-8-18 21:20 上傳
部分程序:
/*********************************************************/
// 往SHT11寫(xiě)入一個(gè)字節(jié)
/*********************************************************/
char ShtWriteByte(unsigned char value)
{
unsigned char i,error=0;
for(i=128;i>0;i>>=1) // 高位為1,循環(huán)右移
{
if (i&value)
Data_P=1; // 和要發(fā)送的數(shù)相與,結(jié)果為發(fā)送的位
else
Data_P=0;
Sck_P=1;
_nop_(); // 延時(shí)3us
_nop_();
_nop_();
Sck_P=0;
}
Data_P=1; // 釋放數(shù)據(jù)線
Sck_P=1;
error=Data_P; // 檢查應(yīng)答信號(hào),確認(rèn)通訊正常
_nop_();
_nop_();
_nop_();
Sck_P=0;
Data_P=1;
return error; // error=1 通訊錯(cuò)誤
}
/*********************************************************/
// 從SHT11讀出一個(gè)字節(jié)
/*********************************************************/
char ShtReadByte(unsigned char ack)
{
unsigned char i,val=0;
Data_P=1; // 釋放數(shù)據(jù)線
for(i=0x80;i>0;i>>=1) // 高位為1,循環(huán)右移
{
Sck_P=1;
if(Data_P)
val=(val|i); // 讀一位數(shù)據(jù)線的值
Sck_P=0;
}
Data_P=!ack; // 如果是校驗(yàn),讀取完后結(jié)束通訊
Sck_P=1;
_nop_(); // 延時(shí)3us
_nop_();
_nop_();
Sck_P=0;
_nop_();
_nop_();
_nop_();
Data_P=1; // 釋放數(shù)據(jù)線
return val;
}
/*********************************************************/
// SHT11啟動(dòng)傳輸
/*********************************************************/
void ShtTransStart(void)
{
Data_P=1;
Sck_P=0;
_nop_();
Sck_P=1;
_nop_();
Data_P=0;
_nop_();
Sck_P=0;
_nop_();
_nop_();
_nop_();
Sck_P=1;
_nop_();
Data_P=1;
_nop_();
Sck_P=0;
}
|