久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
51單片機DHT11溫濕度傳感器通過1602顯示
[打印本頁]
作者:
v5jianqiang
時間:
2018-9-7 23:43
標題:
51單片機DHT11溫濕度傳感器通過1602顯示
這是智能家居系統中窗戶開關控制部分,適用于51單片機,全部原創。DHT11溫濕度傳感器通過1602顯示。
單片機源程序如下:
//11.0592MHz單片機STC89C52RC;DHT11在LCD1602顯示
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
/***********端口定義**************/
sbit RS=P2^0;//1602RS端口
sbit RW=P2^1;//1602RW端口
sbit E=P2^5;//1602E端口
//LCD1602數據口接P0
sbit IO=P2^7;//dht11數據口
sbit I1=P2^3;
sbit l1=P1^0;
sbit l2=P1^1;
/*sbit l3=P1^2;
sbit l4=P1^3;
sbit l5=P1^4;
sbit l6=P1^5;
sbit l7=P1^6;
sbit l8=P1^7; */
bit RXAAOK; //接收到0XAA開頭標志
bit RXFRMOK; //接收一幀完整數據標
uchar RXBUF[32],TXBUF[32]; //接收緩存
uchar RX_P; //數據個數
/**********變量定義*****************/
uint timeout;//溢出
uchar RH_H;//溫度整數位
uchar RH_L;// 溫度小數位
uchar T_H;// 濕度整數位
uchar T_L;// 濕度小數位
uchar Cheakdata;//校驗位
uint timeout1;//溢出
uchar RH_H1;//溫度整數位
uchar RH_L1;// 溫度小數位
uchar T_H1;// 濕度整數位
uchar T_L1;// 濕度小數位
uchar Cheakdata1;//校驗位
uchar PM2_5;
uchar PM10;
/**********************************/
/*****延時1ms******/
void Delay1ms(uchar c) //1ms延時
{
uchar i, j;
for(;c>0;c--)
{
_nop_();
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
}
}
/*****延時10us******/
void Delay10us(void) //10us延時
{
uchar i;
{
i = 2;
while (--i);
}
}
void UART_init()
{
TMOD = 0x20; //T1工作模式2 8位自動重裝
TH1 = 0xfd; //11111101
TL1 = 0xfd; //比特率9600
TR1 = 1; //啟動T1定時器
SM0 = 0;
SM1 = 1; //串口工作方式1 10位異步
REN = 1; //串口允許接受
EA = 1;
ES = 1;
}
void UARTO_ISR() interrupt 4 //接收中斷
{
uchar i,j; //用處提取接收緩沖器的字符
if(RI)
{
i=SBUF; //提取字符
RI=0;
if(RXFRMOK == 0) //判斷是否接收到起始字符0XAA
{
if(RXAAOK) //如果接收到0XAA,繼續接收后面的字符
{
RXBUF[RX_P]=i; //字符存入數組
if((RX_P>3)&&(RXBUF[RX_P] == 0xab) ) //判斷是是否接收完畢一幀數據
{
RXFRMOK=1; //如果接收完成,置位RXFRMOK;
RXAAOK=0; //清零開始標志位RXAAOK
}
RX_P++; //接收計數器加一
}
if(!RXAAOK&&(i==0xaa))
{
RXAAOK=1;
RX_P=0;
}
}
}
for(j = 0;j < 4;j++)
{
TXBUF[j] = RXBUF[j+1]; //提取中間四位
}
/*for(j = 0;j < 4;j++)
{
SBUF = TXBUF[j];
while(!TI);
TI = 0;
} */
}
/****1602忙檢測函數****/
uchar LCD1602_BUSY()//讀狀態
{
uchar state;
RS=0;
RW=1;
P0=0xFF;
E=1;
Delay1ms(1);
E=0;
return state;
}
/*****1602寫數據函數帶忙檢測*****/
void LCD1602_WRITE_DATA_BUSY(uchar databuf)
{
while((LCD1602_BUSY()&&0x80)==0x80);
RS=1;
RW=0;
P0=databuf;
E=1;
E=0;
}
/****1602寫指令函數******/
void LCD1602_WRITE_COM(uchar combuf)
{
RS=0;
RW=0;
P0=combuf;
E=1;
E=0;
}
/****1602寫指令函數帶忙檢測******/
void LCD1602_WRITE_COM_BUSY(uchar combuf)
{
while((LCD1602_BUSY()&&0x80)==0x80);
RS=0;
RW=0;
P0=combuf;
E=1;
E=0;
}
/****1602初始化函數******/
void LCD1602_init(void)
{
Delay1ms(15);//15ms
LCD1602_WRITE_COM(0x38);
Delay1ms(5);//5ms
LCD1602_WRITE_COM(0x38);
Delay1ms(5);//5ms
LCD1602_WRITE_COM(0x38);
LCD1602_WRITE_COM_BUSY(0x38);
LCD1602_WRITE_COM_BUSY(0x08);
LCD1602_WRITE_COM_BUSY(0x01);
LCD1602_WRITE_COM_BUSY(0x06);
LCD1602_WRITE_COM_BUSY(0x0C);
}
/*******DHT11讀字節**************/
uchar ReadByte(void)
{
uchar i;
uchar buf=0;
for(i=0;i<8;i++)
{
IO=1;
timeout=0;
while((IO==0)&&((timeout++)<500));
Delay10us();
Delay10us();
Delay10us();
_nop_();//31us
buf=buf<<1;
if(IO==1)
{
buf=buf|0x01;
}
timeout=0;
while((IO==1)&&((timeout++)<500));
}
return buf;
}
/*******DHT11讀溫濕度************/
uchar ReadRH(void)
{
IO=0;
Delay1ms(20);//20ms
IO=1;
Delay10us();
Delay10us();
Delay10us();
Delay10us();
Delay10us();//50us
if(IO==0)
{
timeout=0;
while((IO==0)&&((timeout++)<500));
timeout=0;
while((IO==1)&&((timeout++)<500));
RH_H=ReadByte();
RH_L=ReadByte();
T_H=ReadByte();
T_L=ReadByte();
Cheakdata=ReadByte();
if(Cheakdata==RH_H+RH_L+T_H+T_L)
{return 1;}//成功
else
{return 0;}//失敗
}
else
return 0;//失敗
}
/*******DHT11讀字節**************/
uchar ReadByte1(void)
{
uchar i;
uchar buf=0;
for(i=0;i<8;i++)
{
I1=1;
timeout=0;
while((I1==0)&&((timeout1++)<500));
Delay10us();
Delay10us();
Delay10us();
_nop_();//31us
buf=buf<<1;
if(I1==1)
{
buf=buf|0x01;
}
timeout1=0;
while((I1==1)&&((timeout1++)<500));
}
return buf;
}
/*******DHT11讀溫濕度************/
uchar ReadRH1(void)
{
I1=0;
Delay1ms(20);//20ms
I1=1;
Delay10us();
Delay10us();
Delay10us();
Delay10us();
Delay10us();//50us
if(I1==0)
{
timeout1=0;
while((I1==0)&&((timeout1++)<500));
timeout1=0;
while((I1==1)&&((timeout1++)<500));
RH_H1=ReadByte1();
RH_L1=ReadByte1();
T_H1=ReadByte1();
T_L1=ReadByte1();
Cheakdata1=ReadByte1();
if(Cheakdata1==RH_H1+RH_L1+T_H1+T_L1)
{return 1;}//成功
else
{return 0;}//失敗
}
else
return 0;//失敗
}
/******1602寫地址函數*********/
void LCD1602_WRITE_ADRESS(uchar x,uchar y)
{
if(y==0)
LCD1602_WRITE_COM_BUSY(0x80+x);
else
LCD1602_WRITE_COM_BUSY(0x80+0x40+x);
}
/*********1602顯示*************/
void LCD1602_DISP(uchar x,uchar y,uchar buf)
{
LCD1602_WRITE_ADRESS(x,y);
LCD1602_WRITE_DATA_BUSY(buf);//顯示數字
}
/*****主函數*****/
void main(void)
{
UART_init();
LCD1602_init();
while(1)
{
if(ReadRH()==1)
if(ReadRH1()==1)
if(RXFRMOK)
{
P1=0xff;
PM2_5=((TXBUF[0]+TXBUF[1]*256)/10);
PM10=((TXBUF[2]+TXBUF[3]*256)/10);
RXFRMOK=0;
if(RH_H>99) RH_H=0;
if(T_H>50) T_H=0;
if(RH_H1>99) RH_H1=0;
if(T_H1>50) T_H1=0;
if(PM10>120) l1=0; //關窗
else if(PM2_5>30) l1=0; //關窗
else if(T_H1<12||T_H1>32) l1=0; //關窗
else if(T_H<T_H1) l1=0; // 關窗
else l2=0; //開窗
LCD1602_DISP(0,0,'T');
LCD1602_DISP(1,0,'1');
LCD1602_DISP(2,0,':');
LCD1602_DISP(3,0,T_H/10+'0');
LCD1602_DISP(4,0,T_H%10+'0');
LCD1602_DISP(5,0,0xdf);
LCD1602_DISP(6,0,'C');
LCD1602_DISP(8,0,'P');
LCD1602_DISP(9,0,'2');
LCD1602_DISP(10,0,'5');
//LCD1602_DISP(11,0,PM2_5/100+'0');
LCD1602_DISP(12,0,PM2_5/10%10+'0');
LCD1602_DISP(13,0,PM2_5%10+'0');
LCD1602_DISP(14,0,'m');
LCD1602_DISP(15,0,'g');
LCD1602_DISP(0,1,'T');
LCD1602_DISP(1,1,'2');
LCD1602_DISP(2,1,':');
LCD1602_DISP(3,1,T_H1/10+'0');
LCD1602_DISP(4,1,T_H1%10+'0');
LCD1602_DISP(5,1,0xdf);
LCD1602_DISP(6,1,'C');
LCD1602_DISP(8,1,'P');
LCD1602_DISP(9,1,'1');
LCD1602_DISP(10,1,'0');
LCD1602_DISP(11,1,PM10/100+'0');
LCD1602_DISP(12,1,PM10/10%10+'0');
LCD1602_DISP(13,1,PM10%10+'0');
LCD1602_DISP(14,1,'m');
LCD1602_DISP(15,1,'g');
}
}
}
復制代碼
所有資料51hei提供下載:
dht11.doc
(47.5 KB, 下載次數: 105)
2018-9-7 23:42 上傳
點擊文件名下載附件
DHT11溫濕度通過1602顯示程序
下載積分: 黑幣 -5
作者:
POLARIS、
時間:
2018-12-26 14:08
6666 正好需要
作者:
ontheroad
時間:
2019-2-23 15:41
89c52直接用樓主的代碼,為什么在主機發出開始信號后,始終得不到DHT11發出的低電平的輸出呢?
作者:
Helen——1
時間:
2019-5-6 20:31
為什么1602上什么都不顯示啊
作者:
JT341125
時間:
2019-9-30 21:57
正好需要部分代碼
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
久久久久亚洲精品
|
欧美亚洲日本
|
亚洲欧美日韩电影
|
日韩精品一区二区三区中文字幕
|
狠狠骚
|
精品国模一区二区三区欧美
|
综合色播
|
国产精品美女久久久久aⅴ国产馆
|
欧美成人精品一区二区男人看
|
福利网站在线观看
|
九色在线观看
|
国产精品精品久久久久久
|
亚洲一区二区三区在线视频
|
国产美女精品视频
|
欧美亚洲国产一区二区三区
|
中文字幕日韩欧美
|
中文字幕成人
|
国产精品免费视频一区
|
一级一片在线观看
|
五月婷婷在线视频
|
天天干天天色
|
欧美综合在线观看
|
2022精品国偷自产免费观看
|
新超碰97
|
欧美久久大片
|
久久久久久久久久久91
|
日韩av在线一区二区
|
欧美aaa一级片
|
日韩一区二区在线视频
|
av毛片在线免费观看
|
精品99久久久久久
|
在线欧美一区二区
|
成人性生交大片
|
久久99精品久久久久久琪琪
|
亚洲毛片在线观看
|
黄色一级大片在线免费看产
|
亚洲a视频
|
1区2区视频
|
欧美亚洲国产精品
|
成人在线亚洲
|
精品国产一区二区三区日日嗨
|