c51单片机lcd1602温度
时间: 2024-01-09 13:05:26 浏览: 102
根据提供的引用内容,以下是一个基于C51单片机和LCD1602显示屏的温度显示的设计示例:
```c
#include <reg52.h>
sbit DQ = P2^0; // DS18B20温度传感器数据线连接到P2.0口
sbit RS = P2^1; // LCD1602的RS引脚连接到P2.1口
sbit RW = P2^2; // LCD1602的RW引脚连接到P2.2口
sbit EN = P2^3; // LCD1602的EN引脚连接到P2.3口
void delay(unsigned int t) // 延时函数
{
unsigned int i, j;
for(i = 0; i < t; i++)
for(j = 0; j < 125; j++);
}
void LcdWriteCom(unsigned char com) // 写命令到LCD1602
{
RS = 0; // RS置低,表示写命令
RW = 0; // RW置低,表示写操作
P0 = com; // 将命令写入P0口
EN = 1; // 使能信号置高
delay(5); // 延时一段时间
EN = 0; // 使能信号置低
}
void LcdWriteData(unsigned char dat) // 写数据到LCD1602
{
RS = 1; // RS置高,表示写数据
RW = 0; // RW置低,表示写操作
P0 = dat; // 将数据写入P0口
EN = 1; // 使能信号置高
delay(5); // 延时一段时间
EN = 0; // 使能信号置低
}
void LcdInit() // 初始化LCD1602
{
LcdWriteCom(0x38); // 设置显示模式为2行,5x7点阵
LcdWriteCom(0x0c); // 显示开,光标关闭
LcdWriteCom(0x06); // 光标右移,不移动显示
LcdWriteCom(0x01); // 清屏
}
void main()
{
unsigned char temp[5]; // 存储温度值的数组
unsigned char i;
while(1)
{
LcdInit(); // 初始化LCD1602
LcdWriteCom(0x80); // 设置显示位置为第一行第一列
LcdWriteData('T'); // 显示字母T
LcdWriteData('e'); // 显示字母e
LcdWriteData('m'); // 显示字母m
LcdWriteData('p'); // 显示字母p
LcdWriteData(':'); // 显示冒号
DQ = 1; // 主机拉高总线
delay(5); // 延时一段时间
DQ = 0; // 主机拉低总线
delay(80); // 延时一段时间
DQ = 1; // 主机释放总线
delay(5); // 延时一段时间
while(!DQ); // 等待DS18B20的应答信号
delay(30); // 延时一段时间
for(i = 0; i < 5; i++) // 读取温度值
{
while(DQ); // 等待DS18B20的数据信号
delay(5); // 延时一段时间
temp[i] = DQ; // 读取数据
delay(30); // 延时一段时间
}
LcdWriteCom(0x86); // 设置显示位置为第一行第七列
LcdWriteData(temp[0]); // 显示温度值的第一位
LcdWriteData(temp[1]); // 显示温度值的第二位
LcdWriteData('.'); // 显示小数点
LcdWriteData(temp[3]); // 显示温度值的第四位
LcdWriteData(temp[4]); // 显示温度值的第五位
delay(1000); // 延时一段时间
}
}
```
这个示例程序通过C51单片机和LCD1602显示屏实现了温度的显示。程序首先初始化LCD1602,然后通过DS18B20温度传感器读取温度值,并将温度值显示在LCD1602上。
阅读全文