|
52RC單片機11.0592MHZ晶振,dht11在lcd1602上不顯示數(shù)據(jù),仿真可以顯示,但是實物不行,換了別人的模塊也顯示不了,按時序圖來的不知道哪里的問題,請教大家/*********************************************************///
讀取DHT11單總線上的一個字節(jié)
/*********************************************************/
uchar DhtReadByte(void)
{
bit bit_i;
uchar j;
uchar dat=0;
for(j=0;j<8;j++)
{
while(!DHT11_P); // 等待低電平結(jié)束
Delay10us(); // 延時
Delay10us();
Delay10us();
if(DHT11_P==1) // 判斷數(shù)據(jù)線是高電平還是低電平
{
bit_i=1;
while(DHT11_P);
}
else
{
bit_i=0;
}
dat<<=1; // 將該位移位保存到dat變量中
dat|=bit_i;
}
return(dat);
}
/*********************************************************/
// 讀取DHT11的一幀數(shù)據(jù),濕高、濕低(0)、溫高、溫低(0)、校驗碼
/*********************************************************/
void ReadDhtData()
{
uchar HumiHig; // 濕度高檢測值
uchar HumiLow; // 濕度低檢測值
uchar TemHig; // 溫度高檢測值
uchar TemLow; // 溫度低檢測值
uchar check; // 校驗字節(jié)
DHT11_P=0; // 主機拉低
DelayMs(20); // 保持20毫秒
DHT11_P=1; // DATA總線由上拉電阻拉高
Delay10us(); // 延時等待30us
Delay10us();
Delay10us();
while(!DHT11_P); // 等待DHT的低電平結(jié)束
while(DHT11_P); // 等待DHT的高電平結(jié)束
//進入數(shù)據(jù)接收狀態(tài)
HumiHig = DhtReadByte(); // 濕度高8位
HumiLow = DhtReadByte(); // 濕度低8為,總為0
TemHig = DhtReadByte(); // 溫度高8位
TemLow = DhtReadByte(); // 溫度低8為,總為0
check = DhtReadByte(); // 8位校驗碼,其值等于讀出的四個字節(jié)相加之和的低8位
DHT11_P=1; // 拉高總線
if(check==HumiHig + HumiLow + TemHig + TemLow) // 如果收到的數(shù)據(jù)無誤
{
temp=TemHig; // 將溫度的檢測結(jié)果賦值給全局變量temp
humi=HumiHig; // 將濕度的檢測結(jié)果賦值給全局變量humi
}
}
|
|