现有一个STC89C51单片机、一个DHT11传感器和一个LCD1602液晶屏组成的采集器,利用keil编写代码实现STC89C51单片机驱动DHT11传感器采集温湿度,并将温湿度信息显示在LCD1602液晶屏上。
时间: 2024-06-08 10:08:42 浏览: 115
好的,这是一个比较基础的单片机应用,我们可以按照以下步骤进行:
1. 确认硬件连接。将DHT11传感器的VCC接到单片机的5V电源,GND接到单片机的GND,DATA接到单片机的P1口。将LCD1602液晶屏的RS接到单片机的P2.0口,RW接到单片机的GND,EN接到单片机的P2.1口,D0-D7接到单片机的P0口。
2. 在keil中新建一个工程,选择适合的单片机型号,然后编写程序。程序分为三个部分:初始化部分、数据采集部分和数据显示部分。
3. 初始化部分:设置单片机的IO口输入输出方向,并初始化LCD1602液晶屏。
```
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit DHT11=P1^0;
sbit RS=P2^0;
sbit EN=P2^1;
void delay_ms(uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<120;j++);
}
void Write_Com(uchar com)
{
RS=0;
P0=com;
EN=1;
_nop_();
EN=0;
}
void Write_Date(uchar date)
{
RS=1;
P0=date;
EN=1;
_nop_();
EN=0;
}
void Init()
{
Write_Com(0x38);
Write_Com(0x0c);
Write_Com(0x06);
Write_Com(0x01);
}
```
4. 数据采集部分:发送启动信号,读取DHT11传感器返回的温湿度数据。
```
uchar R_data[5];
void DHT11_start()
{
uchar i=0;
DHT11=0;
delay_ms(20);
DHT11=1;
_nop_();
_nop_();
_nop_();
DHT11=0;
delay_ms(20);
DHT11=1;
while(DHT11);
while(!DHT11);
while(DHT11);
for(i=0;i<5;i++)
R_data[i]=0;
for(i=0;i<40;i++)
{
while(!DHT11);
delay_ms(30);
if(DHT11==1)
R_data[i/8]|=0x80>>(i%8);
while(DHT11);
}
}
```
5. 数据显示部分:将采集到的温湿度数据显示在LCD1602液晶屏上。
```
void main()
{
uchar humdint,temint;
Init();
Write_Com(0x80);
Write_Date('T');
Write_Date(':');
Write_Com(0x8f);
Write_Date('H');
Write_Date(':');
while(1)
{
DHT11_start();
humdint=R_data[0];
temint=R_data[2];
Write_Com(0x82);
Write_Date(temint/10+'0');
Write_Date(temint%10+'0');
Write_Com(0x8c);
Write_Date(humdint/10+'0');
Write_Date(humdint%10+'0');
delay_ms(1000);
}
}
```
6. 编译代码,生成hex文件,然后将hex文件下载到单片机中运行即可。
阅读全文