基於51微控制器的溫度濕度監控系統

2021-08-20 08:07:53 字數 3911 閱讀 3836

今天筆者給大家介紹一種利用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...