本项目提供了一个基于DS18B20传感器和1602 LCD显示屏的温度监控系统方案,支持用户自定义温度上限与下限设置。
DS18b20 温度检测液晶显示-温度可调上下限1602显示
主函数实现如下:
```c
void main (void)
{
int temp, tempH = 50, tempL = 1;
float temperature;
unsigned char TempFlag = 0;
char displaytemp[16], num;
// 初始化液晶和定时器,初始化串口通信,并写入自定义字符
LCD_Init();
DelayMs(20);
LCD_Clear();
Init_Timer0();
UART_Init();
Lcd_User_Chr();
while (1) // 主循环
{
num = KeyScan();
switch(num)
{
case 1: if(tempH < 127) tempH++; break;
case 2: if(tempH > -55) tempH--; break;
case 3: if(tempL < 127) tempL++; break;
case 4: if(tempL > -55) tempL--; break;
default:break;
}
switch(TempFlag)
{
case 0:
sprintf(displaytemp, H.%3d L.%3d , tempH, tempL);
LCD_Write_String(0,1, displaytemp); // 显示第二行
break;
case 1:
LCD_Write_String(0,1,over tempH );
break;
case 2:
LCD_Write_String(0,1,under tempL );
break;
default:break;
}
if (ReadTempFlag == 1) {
ReadTempFlag = 0;
// 获取温度值并转换为浮点数
temp = ReadTemperature();
temperature = temp * 0.0625;
temp >>= 4;
// 判断当前温度是否超过设定的上限或下限,并更新标志位
if (temp > tempH) TempFlag = 1;
else if(temp < tempL) TempFlag = 2;
else TempFlag = 0;
sprintf(displaytemp, Temp %6.2f , temperature);
// 显示温度值
LCD_Write_String(0,0, displaytemp);
// 在屏幕上显示温度符号C
LCD_Write_Char(13,0, 0x01);
LCD_Write_Char(14,0,C);
}
}
}
```