给我设计51单片机在LCD1602上显示温度、湿度、光照,头文件与主程序分开编写。要详细
时间: 2024-05-15 08:19:53 浏览: 145
说明每一个步骤和所需材料。
步骤1:准备材料
- 51单片机
- 温湿度传感器
- 光照传感器
- LCD1602液晶显示屏
- 电位器
- 杜邦线
- 电源线
- 电路板
步骤2:连接电路
- 将温湿度传感器和光照传感器的VCC接到5V电源线上,GND接到GND电源线上。
- 将温湿度传感器的数据线DHT11_DATA连接到51单片机的P1口,光照传感器的数据线连接到P2口。
- 将LCD1602液晶显示屏的VSS和RW接到GND电源线上,VDD接到5V电源线上,RS接到P3.0口,E接到P3.1口,D4-D7接到P2.4-P2.7口,K接到电位器的中心,A和V0接到电位器的两端。
步骤3:编写头文件
```
#ifndef _LCD1602_H_
#define _LCD1602_H_
void LCD1602_Init(void);
void LCD1602_WriteCommand(unsigned char Command);
void LCD1602_WriteData(unsigned char Data);
void LCD1602_ShowString(unsigned char X,unsigned char Y,unsigned char *String);
#endif
```
步骤4:编写主程序
```
#include <reg52.h>
#include "LCD1602.h"
#define DHT11_DATA P1
sbit LDR=P2^0;
unsigned char LcdCode[]="Temp: C Hum: % Light: ";
void Delay10us() //延时10us
{
unsigned char a,b;
for(b=1;b>0;b--)
for(a=2;a>0;a--);
}
void Delay500ms() //延时500ms
{
unsigned char a,b,c;
for(c=81;c>0;c--)
for(b=152;b>0;b--)
for(a=70;a>0;a--);
}
void StartSignal() //DHT11开始信号
{
DHT11_DATA=0;
Delay10us();
DHT11_DATA=1;
Delay500ms();
Delay10us();
}
unsigned char ReceiveData() //接收DHT11数据
{
unsigned char i,j;
for(j=0;j<8;j++)
{
i=0;
while(DHT11_DATA==0);
while(DHT11_DATA==1) //计算高电平时间
{
i++;
Delay10us();
}
if(i>50) //高电平时间过长则判断为1
return 1;
else //高电平时间过短则判断为0
return 0;
}
}
void main()
{
unsigned char Temp,Hum;
char s[3];
LCD1602_Init(); //LCD1602初始化
while(1)
{
StartSignal(); //DHT11开始信号
if(ReceiveData()==0) //接收温度整数部分
{
Temp=DHT11_DATA;
ReceiveData();
}
else
continue;
if(ReceiveData()==0) //接收温度小数部分
{
Temp+=(DHT11_DATA<<8);
ReceiveData();
}
else
continue;
if(ReceiveData()==0) //接收湿度整数部分
{
Hum=DHT11_DATA;
ReceiveData();
}
else
continue;
if(ReceiveData()==0) //接收湿度小数部分
{
Hum+=(DHT11_DATA<<8);
ReceiveData();
}
else
continue;
ADC_CONTR=0x81; //启动ADC转换
while(!(ADC_CONTR&0x10)); //等待转换完成
LCD1602_ShowString(0,0,LcdCode);
sprintf(s,"%d",(Temp>>8)); //将温度整数部分转换为字符型
LCD1602_ShowString(5,0,s); //显示温度整数部分
sprintf(s,"%d",(Temp&0xFF)); //将温度小数部分转换为字符型
LCD1602_ShowString(8,0,s); //显示温度小数部分
LCD1602_ShowString(10,0,"C"); //显示温度单位
sprintf(s,"%d",(Hum>>8)); //将湿度整数部分转换为字符型
LCD1602_ShowString(16,0,s); //显示湿度整数部分
sprintf(s,"%d",(Hum&0xFF)); //将湿度小数部分转换为字符型
LCD1602_ShowString(19,0,s); //显示湿度小数部分
LCD1602_ShowString(21,0,"%"); //显示湿度单位
sprintf(s,"%d",(ADC_RES>>2)); //将光照强度转换为字符型
LCD1602_ShowString(0,1,s); //显示光照强度
Delay500ms(); //延时500ms
}
}
```
步骤5:编译和下载程序
使用Keil C51编译器编译程序,将生成的HEX文件下载到51单片机中。
步骤6:测试程序
将温湿度传感器和光照传感器与51单片机连接好后,接通电源即可在LCD1602液晶显示屏上显示温度、湿度和光照强度。
阅读全文