STC单片机lcd1602显示温度
时间: 2023-09-27 21:11:19 浏览: 219
要实现STC单片机LCD1602显示温度,需要先连接温度传感器并读取温度值,然后将温度值转换为字符串并输出到LCD1602上。
以下是可能的代码实现:
```c
#include <STC12C5A60S2.h>
#include <intrins.h>
#define LCD_RS P1_0 // LCD1602 RS信号引脚
#define LCD_RW P1_1 // LCD1602 RW信号引脚
#define LCD_E P1_2 // LCD1602 E信号引脚
#define LCD_D4 P1_4 // LCD1602 数据信号引脚4
#define LCD_D5 P1_5 // LCD1602 数据信号引脚5
#define LCD_D6 P1_6 // LCD1602 数据信号引脚6
#define LCD_D7 P1_7 // LCD1602 数据信号引脚7
#define TEMP_PIN P3_0 // 温度传感器引脚
// 延时函数
void delay(unsigned int t) {
while(t--);
}
// LCD1602命令写入
void LCD_WriteCmd(unsigned char cmd) {
LCD_RS = 0;
LCD_RW = 0;
LCD_E = 0;
_nop_();
_nop_();
LCD_D7 = cmd >> 7;
LCD_D6 = (cmd >> 6) & 0x01;
LCD_D5 = (cmd >> 5) & 0x01;
LCD_D4 = (cmd >> 4) & 0x01;
LCD_E = 1;
_nop_();
_nop_();
LCD_E = 0;
_nop_();
_nop_();
LCD_D7 = (cmd >> 3) & 0x01;
LCD_D6 = (cmd >> 2) & 0x01;
LCD_D5 = (cmd >> 1) & 0x01;
LCD_D4 = cmd & 0x01;
LCD_E = 1;
_nop_();
_nop_();
LCD_E = 0;
delay(5);
}
// LCD1602数据写入
void LCD_WriteData(unsigned char data) {
LCD_RS = 1;
LCD_RW = 0;
LCD_E = 0;
_nop_();
_nop_();
LCD_D7 = data >> 7;
LCD_D6 = (data >> 6) & 0x01;
LCD_D5 = (data >> 5) & 0x01;
LCD_D4 = (data >> 4) & 0x01;
LCD_E = 1;
_nop_();
_nop_();
LCD_E = 0;
_nop_();
_nop_();
LCD_D7 = (data >> 3) & 0x01;
LCD_D6 = (data >> 2) & 0x01;
LCD_D5 = (data >> 1) & 0x01;
LCD_D4 = data & 0x01;
LCD_E = 1;
_nop_();
_nop_();
LCD_E = 0;
delay(5);
}
// 初始化LCD1602
void LCD_Init() {
delay(15000);
LCD_WriteCmd(0x30);
delay(4500);
LCD_WriteCmd(0x30);
delay(300);
LCD_WriteCmd(0x30);
delay(600);
LCD_WriteCmd(0x38); // 设置16x2显示,5x8点阵,8位数据接口
LCD_WriteCmd(0x08); // 关闭显示
LCD_WriteCmd(0x01); // 清除显示
LCD_WriteCmd(0x06); // 显示光标右移,不移动内容
LCD_WriteCmd(0x0C); // 打开显示,不显示光标、闪烁
}
// 读取温度值
float Get_Temperature() {
unsigned int temp; // 温度值
unsigned char low_byte, high_byte; // 低字节和高字节
float temperature; // 实际温度值
// 启动温度传感器
TEMP_PIN = 1;
delay(10);
TEMP_PIN = 0;
delay(10);
// 读取温度值
TEMP_PIN = 1;
delay(10);
low_byte = TEMP_PIN;
delay(10);
high_byte = TEMP_PIN;
delay(10);
// 计算温度值
temp = (high_byte << 8) | low_byte;
temperature = temp * 0.0625;
return temperature;
}
// 将浮点数转换为字符串
void FloatToString(char* str, float value) {
int integer = (int)value;
int decimal = (int)((value - integer) * 100);
sprintf(str, "%d.%02d", integer, decimal);
}
void main() {
char temp_str[10]; // 存储温度字符串
LCD_Init(); // 初始化LCD1602
while(1) {
float temperature = Get_Temperature(); // 读取温度值
FloatToString(temp_str, temperature); // 将温度值转换为字符串
LCD_WriteCmd(0x01); // 清屏
LCD_WriteCmd(0x80); // 光标移到第一行第一列
LCD_WriteData('T');
LCD_WriteData('e');
LCD_WriteData('m');
LCD_WriteData('p');
LCD_WriteData(':');
LCD_WriteData(' ');
for(int i = 0; i < strlen(temp_str); i++) {
LCD_WriteData(temp_str[i]); // 在第一行显示温度值
}
delay(1000); // 延时1秒钟
}
}
```
注意:以上代码仅供参考,具体实现方式可能因电路设计、STC单片机型号等因素而异。请根据具体情况进行调整。
阅读全文