基于80C52单片机,使用DS18B20温度传感器,在LCD显示屏上显示当前温度传感器的读数,代码为?
时间: 2024-03-03 14:50:43 浏览: 68
DS18B20.C(一般通用的数字温度传感器)完成代码,可直接使用.
好的,我可以为您提供一个基础的代码示例。请注意,这只是一个简单的示例,您可能需要根据您的具体硬件和需求进行修改。
```c
#include <reg52.h>
#include <intrins.h>
#define LCD_DATA_PORT P0 // LCD数据总线
sbit LCD_RS = P2^0; // LCD命令/数据选择线
sbit LCD_RW = P2^1; // LCD读/写选择线
sbit LCD_EN = P2^2; // LCD使能线
sbit DQ = P3^4; // DS18B20数据线
unsigned char temperature; // 温度变量
// LCD写命令函数
void LCD_Write_Cmd(unsigned char cmd)
{
LCD_RS = 0; // 选择命令模式
LCD_RW = 0; // 选择写入模式
LCD_DATA_PORT = cmd; // 发送命令
LCD_EN = 1; // 使能
_nop_(); // 等待
_nop_();
LCD_EN = 0; // 关闭使能
}
// LCD写数据函数
void LCD_Write_Data(unsigned char dat)
{
LCD_RS = 1; // 选择数据模式
LCD_RW = 0; // 选择写入模式
LCD_DATA_PORT = dat; // 发送数据
LCD_EN = 1; // 使能
_nop_(); // 等待
_nop_();
LCD_EN = 0; // 关闭使能
}
// LCD初始化函数
void LCD_Init()
{
LCD_Write_Cmd(0x38); // 8位数据总线,2行显示,5x7点阵字符
LCD_Write_Cmd(0x0c); // 关闭光标,开启显示
LCD_Write_Cmd(0x06); // 光标移动,文字不动
LCD_Write_Cmd(0x01); // 清屏
}
// DS18B20写一个字节
void DS18B20_Write_Byte(unsigned char dat)
{
unsigned char i;
for (i = 0; i < 8; i++) {
DQ = 0; // 发送起始信号
_nop_();
_nop_();
DQ = dat & 0x01; // 发送数据位
_nop_();
_nop_();
DQ = 1; // 释放总线
dat >>= 1;
}
}
// DS18B20读一个字节
unsigned char DS18B20_Read_Byte()
{
unsigned char i, dat = 0;
for (i = 0; i < 8; i++) {
DQ = 0; // 发送起始信号
_nop_();
_nop_();
DQ = 1; // 释放总线
_nop_();
_nop_();
dat >>= 1; // 读取数据位
if (DQ) dat |= 0x80;
}
return dat;
}
// DS18B20读温度函数
void DS18B20_Read_Temperature()
{
unsigned char TL, TH;
DS18B20_Write_Byte(0xcc); // 跳过ROM操作
DS18B20_Write_Byte(0x44); // 启动温度转换
while (!DQ); // 等待转换完成
DS18B20_Write_Byte(0xcc); // 跳过ROM操作
DS18B20_Write_Byte(0xbe); // 读取温度寄存器
TL = DS18B20_Read_Byte(); // 读取低字节
TH = DS18B20_Read_Byte(); // 读取高字节
temperature = (TH << 4) | (TL >> 4); // 计算温度值
}
// 主函数
void main()
{
LCD_Init(); // 初始化LCD
while (1) {
DS18B20_Read_Temperature(); // 读取温度值
LCD_Write_Cmd(0x80); // 光标移到第一行第一列
LCD_Write_Data('T'); // 显示"T"
LCD_Write_Data('e'); // 显示"e"
LCD_Write_Data('m'); // 显示"m"
LCD_Write_Data('p'); // 显示"p"
LCD_Write_Data(':'); // 显示":"
LCD_Write_Data(temperature / 10 + '0'); // 显示十位数
LCD_Write_Data(temperature % 10 + '0'); // 显示个位数
_nop_();
_nop_();
_nop_();
}
}
```
在上面的代码中,我使用了80C52单片机、LCD1602液晶显示屏和DS18B20温度传感器。您需要根据您的具体硬件进行修改。代码执行流程如下:
1. 初始化LCD显示屏。
2. 循环读取DS18B20温度传感器数据。
3. 将温度值显示在LCD显示屏上。
希望这个代码示例能够帮助到您!
阅读全文