单片机+DHT11+1602显示屏
2020-11-28 来源:51hei
单片机源程序如下:
/*********************************************************************************
本实验仅限学习交流 AT89C52 12Mhz DHT11 LCD1602
接线如下
DHT11_DQ = P2^0
LCD1602_E= P2^7
LCD1602_RW=P2^5
LCD1602_RS=P2^6
D0—D7接到P0口
本实验没有用到DHT的校验位Check_Init,想使用校验位,定义一个变量t,t=HUMI_Buffer_Int+HUMI_Low_Int+TEM_Buffer_Int+TEM_Low_Int;
判断t与Check_Init是否相等。
本实验只显示了整数部分,小数部分没显示,小数部分显示和整数部分显示一样,类别进行。
*********************************************************************************/
#include'dht11.h'
#include'reg52.h'
#include'lcd.h'
unsigned char dis[]='RH:'; //湿度字符串
unsigned char dis1[]='TEMP:'; //温度字符串
unsigned char i;
int main()
{ LcdInit(); //1602初始化
DHT11_Init(); //DHT11初始化
while(1)
{
DHT11_Read(); //DHT11数值读取
LcdWriteCom(0x80);//第一列第一个字符
for(i=0;i<3;i++)
{
LcdWriteData(dis[i]); //显示“RH:”
}
LcdWriteData(HUMI_Buffer_Int/10+0x30); //显示湿度的十位
LcdWriteData(HUMI_Buffer_Int%10+0x30); //显示湿度的个位
LcdWriteData(0x25); //显示字符“%”
LcdWriteCom(0x80+0x40); //第二行第一个
for(i=0;i<5;i++)
{
LcdWriteData(dis1[i]); //显示字符“TEMP”
}
LcdWriteData(TEM_Buffer_Int/10+0x30); //显示温度的十位
LcdWriteData(TEM_Buffer_Int%10+0x30); //显示温度的个位
LcdWriteData(0xDF);
LcdWriteData(0x43); //显示字符“%”
}
}
#include 'DHT11.h'
//定义变量
unsigned char HUMI_Buffer_Int = 0; //湿度高位
unsigned char HUMI_Low_Int=0; //湿度低位
unsigned char TEM_Buffer_Int = 0; //温度高位
unsigned char TEM_Low_Int=0; //温度低位
unsigned char Check_Init=0; //检验位
//****************************************************
//MS延时函数(12M晶振下测试)
//****************************************************
void DHT11_delay_ms(unsigned int n)
{
unsigned int i,j;
for(i=n;i>0;i--)
{
for(j=112;j>0;j--);
}
}
//****************************************************
//延时函数
//****************************************************
void DHT11_Delay( unsigned int n )
{
unsigned int i;
for(i = 0 ; i < n ; i++ );
}
//****************************************************
//初始化DHT11
//****************************************************
bit DHT11_Init()
{
bit Flag_DHT11 = 1;
DHT11_DQ = 0;
DHT11_delay_ms(25); //延时>18ms
DHT11_DQ = 1;
DHT11_Delay(2); //延时20~40us
DHT11_Delay(2);
Flag_DHT11 = DHT11_DQ;
DHT11_Delay(2); //DHT11响应总时间80us
DHT11_Delay(4); //DHT11拉高信号80us
return Flag_DHT11;
}
//****************************************************
//读一个字节DHT11数据
//****************************************************
unsigned char DHT11_Read_Byte()
{
unsigned char i,dat,j;
while( DHT11_DQ == 1 );
for( i = 0 ; i < 8 ; i++ )
{
while( DHT11_DQ == 0 );
dat <<= 1;
for( j = 0 ; DHT11_DQ == 1 ; j++);
if( j < 10 )
dat &= 0xfe; //低位清零
else
dat |= 0x01; //低位置一
}
return dat;
}
//****************************************************
//读取温湿度值,存放在TEM_Buffer和HUMI_Buffer
//****************************************************
void DHT11_Read()
{
if( DHT11_Init() == 0 )
{
HUMI_Buffer_Int = DHT11_Read_Byte(); //读取湿度的整数值
HUMI_Low_Int=DHT11_Read_Byte(); //读取湿度的小数值
TEM_Buffer_Int = DHT11_Read_Byte(); //读取温度的整数值
TEM_Low_Int=DHT11_Read_Byte(); //读取温度的小数值
Check_Init=DHT11_Read_Byte(); //读取校验和
DHT11_Delay(3); //DHT11拉低总线50us
DHT11_DQ = 1; //释放总线
}
}
- 英飞凌携手马瑞利采用AURIX™ TC4x MCU系列推动区域控制单元创新
- 纳芯微联合芯弦推出NS800RT系列实时控制MCU
- GD32F103C8单片机的PWM输出试验
- GD32F103C系列单片机的PWM捕获功能
- 设计笔记 | 采用GD32F130系列MCU设计冰箱压缩机变频板方案
- 基于GD32L235系列MCU的微型便携式微型电源方案
- 基于GD32L235系列MCU的土壤湿度检测带磁力翻转式显示方案
- GD32VF103:采用RISC-V内核设计的MCU
- 德州仪器推出新款实时微控制器系统 可在汽车与工业应用中实现更智能的处理流程
- 关于GD32F2系列增强型MCU的介绍和应用