51单片机lcd1602显示温度
时间: 2023-09-02 12:14:24 浏览: 93
51单片机ds18b20和lcd1602显示温度.doc
首先,需要连接温度传感器和LCD1602模块到51单片机。温度传感器可以选择DS18B20或者LM35,这里以DS18B20为例。
连接步骤如下:
1. 将DS18B20的VCC引脚连接到单片机的5V电源,GND引脚连接到单片机的GND引脚,DQ引脚连接到单片机的P2.0口。
2. 将LCD1602模块的VSS引脚连接到单片机的GND引脚,VDD引脚连接到单片机的5V电源,VO引脚接到单片机的电位器中间脚,RS引脚接到单片机的P0.0口,RW引脚接到单片机的GND引脚,E引脚接到单片机的P0.1口,D0~D7引脚分别连接到单片机的P0.2~P0.7口。
接线完成后,可以开始编写程序。
程序如下:
```
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit DQ=P2^0;
sbit RS=P0^0;
sbit E=P0^1;
void delay_1us(uint t)
{
while(t--);
}
void delay_ms(uint t)
{
while(t--)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
}
void write_com(uchar com)
{
RS=0;
P0=com;
E=1;
delay_1us(5);
E=0;
}
void write_data(uchar dat)
{
RS=1;
P0=dat;
E=1;
delay_1us(5);
E=0;
}
uchar read_temp()
{
uchar temp=0;
uchar cnt=0;
uchar i;
write_com(0xcc);
write_com(0x44);
delay_ms(100);
write_com(0xcc);
write_com(0xbe);
for(i=0;i<8;i++)
{
temp>>=1;
DQ=1;
_nop_();
if(DQ)
temp|=0x80;
delay_1us(4);
}
if(temp&0x80)
{
temp=~temp+1;
cnt=1;
}
temp=(temp>>4)*10+(temp&0x0f);
if(cnt)
write_data('-');
else
write_data(' ');
write_data(temp/10+'0');
write_data(temp%10+'0');
write_data('C');
return temp;
}
void init()
{
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
void main()
{
init();
while(1)
{
read_temp();
delay_ms(1000);
}
}
```
程序解析:
1. 定义了DS18B20的数据引脚为P2.0,LCD1602模块的RS引脚为P0.0,E引脚为P0.1。
2. 编写了延时函数delay_1us和delay_ms,用于延时等待传感器数据读取和LCD1602模块的响应。
3. 编写了写命令函数write_com和写数据函数write_data,用于向LCD1602模块发送指令和数据。
4. 编写了读取温度函数read_temp,用于读取DS18B20传感器的温度值,并在LCD1602模块上显示。
5. 在初始化函数init中,设置LCD1602模块的显示模式。
6. 在主函数main中,循环读取温度值,并延时1秒钟后再次读取。
注意事项:
1. 在程序中需要用到DS18B20的温度转换函数,需要先下载DS18B20的驱动程序。
2. 在编译程序时需要选择合适的编译器和下载工具。
3. 在接线时需要注意引脚的对应关系,如果接线错误可能会导致程序无法正常运行。
阅读全文