c51单片机温度传感器dht11JLX12864G-086显示
时间: 2023-09-25 09:15:32 浏览: 116
要使用c51单片机和温度传感器dht11以及JLX12864G-086显示器来显示温度值,可以按照以下步骤进行操作:
1. 连接硬件:将dht11传感器的VCC引脚连接到单片机的5V电源,GND引脚连接到单片机的GND,DATA引脚连接到单片机的P1.0口;将JLX12864G-086显示器的VCC引脚连接到单片机的5V电源,GND引脚连接到单片机的GND,CS引脚连接到单片机的P2.7口,SID引脚连接到单片机的P2.5口,SCLK引脚连接到单片机的P2.6口,RST引脚连接到单片机的P2.4口。
2. 编写程序:使用c语言编写程序,包括初始化dht11传感器和JLX12864G-086显示器,读取dht11传感器的温度值并将其转换为字符串格式,然后在JLX12864G-086显示器上显示该温度值。
3. 调试程序:将程序下载到单片机上,并连接电源,观察JLX12864G-086显示器是否能够正常显示温度值。如果出现问题,可以通过调试程序来解决。
下面是一个简单的示例程序,可以帮助你开始编写你自己的程序:
```c
#include <reg52.h>
#include <stdio.h>
sbit DHT11_DATA=P1^0;
sbit LCD_CS=P2^7;
sbit LCD_SID=P2^5;
sbit LCD_SCLK=P2^6;
sbit LCD_RST=P2^4;
void Delay10us()
{
int i=2;
while(i--);
}
void DelayMs(unsigned int ms)
{
while(ms--)
{
Delay10us();
Delay10us();
Delay10us();
Delay10us();
Delay10us();
Delay10us();
Delay10us();
Delay10us();
}
}
void LCD_WR_CMD(unsigned char cmd)
{
unsigned char i;
LCD_CS=0;
LCD_SID=0;
Delay10us();
LCD_SCLK=0;
Delay10us();
for(i=0;i<8;i++)
{
if(cmd&0x80)
{
LCD_SID=1;
}
else
{
LCD_SID=0;
}
Delay10us();
LCD_SCLK=1;
Delay10us();
LCD_SCLK=0;
Delay10us();
cmd<<=1;
}
LCD_CS=1;
}
void LCD_WR_DAT(unsigned char dat)
{
unsigned char i;
LCD_CS=0;
LCD_SID=1;
Delay10us();
LCD_SCLK=0;
Delay10us();
for(i=0;i<8;i++)
{
if(dat&0x80)
{
LCD_SID=1;
}
else
{
LCD_SID=0;
}
Delay10us();
LCD_SCLK=1;
Delay10us();
LCD_SCLK=0;
Delay10us();
dat<<=1;
}
LCD_CS=1;
}
void LCD_Init()
{
LCD_RST=0;
DelayMs(100);
LCD_RST=1;
DelayMs(100);
LCD_WR_CMD(0x30);
DelayMs(50);
LCD_WR_CMD(0x0c);
DelayMs(50);
LCD_WR_CMD(0x01);
DelayMs(50);
}
void DHT11_Init()
{
DHT11_DATA=1;
DelayMs(1000);
}
unsigned char DHT11_Read_Byte()
{
unsigned char i,dat=0;
for(i=0;i<8;i++)
{
while(!DHT11_DATA);
Delay10us();
if(DHT11_DATA)
{
dat|=1<<(7-i);
while(DHT11_DATA);
}
}
return dat;
}
void DHT11_Read_Temp(unsigned char *temp)
{
unsigned char dat[5],i;
DHT11_Init();
DHT11_DATA=0;
DelayMs(18);
DHT11_DATA=1;
while(DHT11_DATA);
for(i=0;i<5;i++)
{
dat[i]=DHT11_Read_Byte();
}
if(dat[0]+dat[1]+dat[2]+dat[3]==dat[4])
{
*temp=dat[2];
}
else
{
*temp=0xff;
}
}
void main()
{
unsigned char temp;
char str[5];
LCD_Init();
while(1)
{
DHT11_Read_Temp(&temp);
sprintf(str,"%d",temp);
LCD_WR_CMD(0x34);
LCD_WR_CMD(0x80);
LCD_WR_DAT('T');
LCD_WR_DAT('e');
LCD_WR_DAT('m');
LCD_WR_DAT('p');
LCD_WR_DAT(':');
LCD_WR_DAT(str[0]);
LCD_WR_DAT(str[1]);
LCD_WR_DAT(str[2]);
LCD_WR_DAT(str[3]);
DelayMs(1000);
}
}
```
阅读全文