标题:
51单片机 DHT11 oled显示温湿度 人流量检测
[打印本页]
作者:
qwertyppp
时间:
2020-3-21 15:08
标题:
51单片机 DHT11 oled显示温湿度 人流量检测
51单片机 DHT11 oled显示温湿度 人流量检测 蓝牙串口控制开关
部分代码
#include "reg52.h"
#include "oled.h"
#include<intrins.h>
#define MAIN_Fosc 24000000L //define main clock
#define Baudrate 500000L //define the baudrate
//12T mode: 600~115200 for 22.1184MHZ, 300~57600 for 11.0592MHZ
//1T mode: 7200~1382400 for 22.1184MHZ, 3600~691200 for 11.0592MHZ
#define BRT_Reload (256 - MAIN_Fosc / 16 / Baudrate) //Calculate the timer1 reload value ar 1T mode
u8 person=0;
u8 rec_RH,rec_TH;
void DHT11_delay_us(u8 n)
{
while(--n);
}
void DHT11_delay_ms(u8 z)
{
u8 i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
void DHT11_start()
{
Data=1;
DHT11_delay_us(2);
Data=0;
DHT11_delay_ms(20);
Data=1;
DHT11_delay_us(30);
}
u8 DHT11_rec_byte()
{
u8 i,dat=0;
for(i=0;i<8;i++)
{
while(!Data);
DHT11_delay_us(8);
dat<<=1;
if(Data==1)
dat+=1;
while(Data);
}
return dat;
}
void DHT11_receive()
{
u8 R_H,R_L,T_H,T_L,RH,RL,TH,TL,revise;
DHT11_start();
if(Data==0)
{
while(Data==0);
DHT11_delay_us(40);
R_H=DHT11_rec_byte();
R_L=DHT11_rec_byte();
T_H=DHT11_rec_byte();
T_L=DHT11_rec_byte();
revise=DHT11_rec_byte();
DHT11_delay_us(25);
if((R_H+R_L+T_H+T_L)==revise)
{
RH=R_H;
RL=R_L;
TH=T_H;
TL=T_L;
}
rec_RH=RH;
rec_TH=TH;
}
}
void Person_num()
{
while(red1 == 0&&red2 == 1)
{
if(red1 == 1&&red2 == 1)
person++;
}
while(red2 == 0&&red1 == 1&&person > 0)
{
if(red1 == 1&&red2 == 1)
person--;
}
}
void uart_init(void)
{
EA=1;
ES=1;
TMOD=0x20;
SCON=0x70;
PCON|=0x00;
TH1=0xfd;//9600bps;
TR1=1;
}
/*******************************Main*******************************/
void main(void)
{
Initial_M096128x64_ssd1306();
Delay_1ms(5);
OLED_Clear();
OLED_ShowCHinese(0,0,0); //显示"温"
OLED_ShowCHinese(20,0,2);//显示"度"
OLED_ShowCHinese(40,0,5);//显示":"
OLED_ShowNum(60,0,0);
OLED_ShowCHinese(80,0,6);
OLED_ShowCHinese(0,2,1); //显示"湿"
OLED_ShowCHinese(20,2,2);//显示"度"
OLED_ShowCHinese(40,2,5);//显示":"
OLED_ShowNum(60,2,0);
OLED_ShowChar(80,2,10);
OLED_ShowCHinese(0,4,3); //显示"人"
OLED_ShowCHinese(20,4,4);//显示"数"
OLED_ShowCHinese(40,4,5);//显示":"
OLED_ShowNum(60,4,0);
Delay_50ms(25);
while(1)
{
uart_init();
OLED_ShowNum(60,0,rec_TH);
OLED_ShowNum(60,2,rec_RH);
DHT11_receive();
Person_num();
OLED_ShowNum(60,4,person);
DHT11_delay_us(100);
}
}
void uart0_interrupt (void) interrupt 4
{
if(RI)
{
u8 receive = SBUF;
RI = 0;
switch(receive)
{
case '0': key1 = 0;break;
case '1': key1 = 1;break;
case '2': key2 = 0;break;
case '3': key2 = 1;break;
}
}
}
复制代码
显示温湿度 - 改进.zip
2020-3-21 15:11 上传
点击文件名下载附件
下载积分: 黑币 -5
73.75 KB, 下载次数: 56, 下载积分: 黑币 -5
作者:
admin
时间:
2020-3-22 15:23
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1