怎样通过代码实现51单片机温度计; (考察知识: 18B20 LCD1 602串口的综合应用) 单片机上电后,温度计启动,LCD上显示当前温度,同时将温度通过串口实时发送给上位机
时间: 2024-02-15 20:03:52 浏览: 21
要实现51单片机温度计,需要以下步骤:
1. 连接硬件:将18B20温度传感器和LCD1602液晶屏连接至单片机,同时连接串口模块。
2. 编写程序:使用keil等开发工具,编写单片机程序,实现温度采集、显示和串口发送功能。
3. 温度采集:使用18B20温度传感器采集环境温度数据,将数据通过单片机读取。
4. 显示温度:将读取到的温度数据转换为可读的格式,并在LCD1602屏幕上显示当前温度。
5. 串口发送:将温度数据通过串口发送至上位机,实现实时监测温度变化。
以下是部分代码示例:
```
// 初始化18B20温度传感器
void Ds18b20Init(){
DSPORT = 0; // 拉低总线
Delay1ms(20); // 延时20ms
DSPORT = 1; // 释放总线
Delay1us(30); // 等待30us
while(DS == 1); // 等待DS18B20的应答信号
Delay1us(80); // 等待80us
if(DS == 0){
Delay1us(80);
return;
}else{
Delay1us(80);
return;
}
}
// 从18B20读取温度
void Ds18b20ReadTemp(){
uchar TL, TH;
Ds18b20Init(); // 初始化DS18B20
Write_DS18B20(0xcc); // 跳过ROM操作
Write_DS18B20(0x44); // 启动温度转换
Delay1ms(500); // 等待转换结束
Ds18b20Init(); // 再次初始化DS18B20
Write_DS18B20(0xcc); // 跳过ROM操作
Write_DS18B20(0xbe); // 读取温度
TL = Read_DS18B20(); // 读取温度低8位
TH = Read_DS18B20(); // 读取温度高8位
Temp = TH;
Temp <<= 8;
Temp |= TL;
Temp = (float)Temp * 0.0625; // 转换为摄氏度
}
// 在LCD1602上显示温度
void DisplayTemp(){
LcdWriteCom(0x80); // 设置光标位置
LcdWriteStr("Temp: ");
LcdWriteData(Temp / 10 + '0'); // 显示整数位
LcdWriteData(Temp % 10 + '0'); // 显示小数位
LcdWriteData(0xdf); // 显示摄氏度符号
}
// 通过串口发送温度数据
void SendTemp(){
char str[10];
sprintf(str, "%.1f", Temp); // 将温度转换为字符串
SendString(str); // 通过串口发送数据
}
```
以上代码仅供参考,具体实现需要根据具体硬件配置和需求进行修改。