51单片机 利用LM016L做一个温度显示器,可判断正负,四舍五入
时间: 2024-01-26 21:02:41 浏览: 196
实现一个温度显示器,需要使用温度传感器获取当前温度值,并将其显示在LCD1602液晶屏上。以下是一个简单的代码示例,可以在51单片机上实现温度显示器,并且能够判断正负,四舍五入。
```c
#include <reg51.h>
#include <string.h>
// 定义LCD1602液晶屏的I/O口
#define LCD1602_DB P0
sbit LCD1602_RS = P2^6;
sbit LCD1602_RW = P2^5;
sbit LCD1602_EN = P2^7;
// 定义温度传感器的I/O口
sbit DQ = P1^0;
// 延时函数
void delay(unsigned int t) {
while (t--);
}
// 初始化LCD1602液晶屏
void init_lcd1602() {
delay(2000);
lcd1602_write_cmd(0x38);
lcd1602_write_cmd(0x0c);
lcd1602_write_cmd(0x06);
lcd1602_write_cmd(0x01);
delay(2000);
}
// LCD1602液晶屏写命令
void lcd1602_write_cmd(unsigned char cmd) {
LCD1602_DB = cmd;
LCD1602_RS = 0;
LCD1602_RW = 0;
LCD1602_EN = 1;
delay(5);
LCD1602_EN = 0;
}
// LCD1602液晶屏写数据
void lcd1602_write_data(unsigned char dat) {
LCD1602_DB = dat;
LCD1602_RS = 1;
LCD1602_RW = 0;
LCD1602_EN = 1;
delay(5);
LCD1602_EN = 0;
}
// 读取温度传感器的值
int read_temperature() {
unsigned char a, b;
int temp;
DQ = 0;
delay(5);
DQ = 1;
delay(5);
a = DQ;
delay(5);
b = DQ;
delay(5);
if (a == 0 && b == 1) {
DQ = 0;
delay(5);
DQ = 1;
delay(5);
temp = DQ;
delay(5);
temp <<= 8;
DQ = 0;
delay(5);
DQ = 1;
delay(5);
temp |= DQ;
}
return temp;
}
// 显示温度值
void display_temperature(int temp) {
char str[16];
int integer, decimal;
// 判断正负
if (temp < 0) {
lcd1602_write_data('-');
temp = -temp;
}
// 四舍五入
temp += 5;
// 转换为字符串
integer = temp / 10;
decimal = temp % 10;
sprintf(str, "%d.%d", integer, decimal);
// 输出到液晶屏上
for (int i = 0; i < strlen(str); i++) {
lcd1602_write_data(str[i]);
}
}
int main() {
int temp;
init_lcd1602();
lcd1602_write_cmd(0x80);
lcd1602_write_data('T');
lcd1602_write_data(':');
while (1) {
temp = read_temperature();
lcd1602_write_cmd(0x8c);
display_temperature(temp);
delay(1000);
}
return 0;
}
```
以上代码仅供参考,具体实现可能需要根据具体的开发板、库函数和温度传感器进行调整。
阅读全文