今天筆者給大家介紹一種利用51微控制器的溫度模組製作乙個小空間的溫度濕度檢測系統,溫度檢測使用的是dht11,如果想將此專案移植到開發板上,需要自行修改管腳。
原理截圖
源**如下:
#include#include "intrins.h"
typedef unsigned char uint8;
typedef unsigned int
uint16;
sbit rs=p2^6; // 資料命令選擇
sbit rw=p2^5; //讀寫選擇
sbit e=p2^7; //使能
sbit k1=p3^3; //模式
sbit k2=p2^1; //加
sbit k3=p2^2; //減
sbit dht11_dq_out=p3^2;
sbit led1=p3^6;
sbit led2=p3^7;
sbit dq=p2^0;
uint8 mode=0,xian;
char temph=50,templ=20;
char humih=80,humil=20;
uint8 temp,humi;
uint8 flag; //設定報警標誌
uint8 a,c,tempvalue;
uint8 code num[10]="0123456789";
uint8 code str1="temp:"; //溫度
uint8 code str2="humi:"; //濕度
uint8 code str3="error";
uint8 code str4="success ";
uint8 code str5="%rh";
uint8 code str6="temph:"; //設定溫度上限顯示
uint8 code str7="templ:"; //設定溫度下限顯示
uint8 code str8="humih:"; //設定濕度上限顯示
uint8 code str9="humil:"; //設定濕度下限顯示
void delay(uint16 i)
void delay_ms(uint16 i)
void wrc(uint8 c) //寫命令
void wrd(uint8 dat) //寫資料
void lcd_init() // lcd1602初始化
//復位dht11
void dht11_rst()
//等待dht11的回應
//返回1:未檢測到dht11的存在
//返回0:存在
uint8 dht11_check()
;
if(retry>=100)return
1; else retry=0;
while (!dht11_dq_out&&retry<100)//dht11拉低後會再次拉高40~50us
;if(retry>=100)return
1;
return0;}
//dht11初始化
//返回0:初始化成功,1:失敗
uint8 dht11_init()
//從dht11讀取乙個位
//返回值:1/0
uint8 dht11_read_bit(void)
retry=0;
while((!dht11_dq_out)&&retry<100)//等待變高電平 26-28us表示0,116-118us表示1
delay(1);//等待40us
if(dht11_dq_out)return
1; else
return
0;
}//從dht11讀取乙個位元組
//返回值:讀到的資料
uint8 dht11_read_byte(void)
return dat;
}//從dht11讀取一次資料
//temp:溫度值(範圍:0~50°)
//humi:濕度值(範圍:20%~90%)
//返回值:0,正常;1,讀取失敗
uint8 dht11_read_data(uint8 *temp,uint8 *humi)
if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
}else
return
1; return
0;
}void ds18b20init() //18b20的初始化
void ds18b20wr(uint8 dat) //18b20寫資料
}uint8 ds18b20rd() //18b20讀資料
return value;
}uint8 readtemp() //讀取溫度內需要復位的
void key_pros() //按鍵處理函式
while(!k1);
}if(mode==1) //對溫度上限設定
while(!k2);
}if(k3==0) //減
while(!k3);}}
if(mode==2) //對溫度下限設定
while(!k2);
}if(k3==0) //減
while(!k3);}}
if(mode==3) //對濕度上限設定
while(!k2);
}if(k3==0) //減
while(!k3);}}
if(mode==4) //對濕度下限設定
while(!k2);
}if(k3==0) //減
while(!k3);}}
}void lcd_init_display() //lcd初始化顯示
for(i=0;i<5;i++)
}void data_pros() //資料處理函式
for(i=0;i<3;i++)
}if(mode==1) //溫度上限顯示
wrd(temphbuf[0]);
wrd(temphbuf[1]);
}if(mode==2) //溫度下限顯示
wrd(templbuf[0]);
wrd(templbuf[1]);
}if(mode==3) //濕度上限顯示
wrd(humihbuf[0]);
wrd(humihbuf[1]);
}if(mode==4) //濕度下限顯示
wrd(humilbuf[0]);
wrd(humilbuf[1]);
}}void baojinpros() //報警處理
if(tempvalue<=templ||humi<=humil) //檢測溫度或者濕度低於設定下限值 公升溫溼
if((tempvalue>templ&&tempvaluehumil&&humi=0;
led2=0;
}}void main()
}wrc(0x01);
lcd_init_display(); //lcd初始化顯示
i=0;
while(1)
delay(1000);
}
}
基於51微控制器的溫度探測
這次的專案姑且算作舊瓶裝新酒吧,以前做過stm32和dht11的溫度探測,這一次是較為低價版的c51和ds18b20溫度探測。ds18b20是常用的數字溫度感測器,其輸出的是數碼訊號,具有體積小,硬體開銷低,抗干擾能力強,精度高的特點。個人感覺主要特點就是 低,這對於很多精度要求不高的量產產品來說很...
基於51微控制器的溫度採集系統
下面是一張原理圖 源 如下 include define uint unsigned int define uchar unsigned char include typedef bit bool sbit io p1 1 口線定義 sbit bee p1 0 sbit rs p2 5 sbit r...
基於51微控制器WiFi溫濕度遠端控制
stc89c52rc微控制器最小系統 esp8266系列模組 5v繼電器模組 蜂鳴器dht11溫濕度感測器 keil4 sbit led1 p1 0 手動自動狀態 sbit led2 p1 1 濕度狀態 sbit led3 p1 2 溫度狀態 sbit k1 p1 3 sbit k2 p1 4 sb...