51单片机lcd1602显示温度程序
时间: 2023-08-31 09:11:16 浏览: 109
基于51单片机的DS18B20下的LCD1602.rar
以下是51单片机LCD1602显示温度的程序示例:
```c
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit RS=P2^0;
sbit RW=P2^1;
sbit EN=P2^2;
void delay(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void lcd_write_cmd(uchar cmd)
{
RS=0;
RW=0;
P0=cmd;
EN=1;
_nop_();
_nop_();
EN=0;
}
void lcd_write_data(uchar dat)
{
RS=1;
RW=0;
P0=dat;
EN=1;
_nop_();
_nop_();
EN=0;
}
void lcd_init()
{
lcd_write_cmd(0x38);
delay(5);
lcd_write_cmd(0x0c);
delay(5);
lcd_write_cmd(0x06);
delay(5);
lcd_write_cmd(0x01);
delay(5);
lcd_write_cmd(0x80);
delay(5);
}
void main()
{
uchar temperature[5] = ""; // 温度存储数组
float temp; // 温度值
uchar i;
TMOD = 0x01; // 设置计时器0工作方式
TH0 = 0xfc; // 设置计时器0初始值
TL0 = 0x18;
TR0 = 1; // 启动计时器0
while (1)
{
if (TF0 == 1) // 计时器0溢出
{
TH0 = 0xfc; // 重新设置计时器0初始值
TL0 = 0x18;
TF0 = 0; // 清除计时器0溢出标志
temp = (float)rand() / RAND_MAX * 10 + 20; // 模拟温度值
sprintf(temperature, "%.1f", temp); // 转换成字符串
lcd_init(); // 初始化LCD
lcd_write_cmd(0x80); // 在第1行第1列显示温度
for (i = 0; i < 5; i++)
{
if (temperature[i] == '\0')
break;
lcd_write_data(temperature[i]);
}
delay(1000); // 延时1秒
}
}
}
```
说明:
1. 程序中使用了计时器0来模拟温度值的变化,并且每隔1秒钟更新一次温度值;
2. `lcd_write_cmd()` 函数用来向LCD写入指令;
3. `lcd_write_data()` 函数用来向LCD写入数据;
4. `lcd_init()` 函数用来初始化LCD;
5. `sprintf()` 函数用来将浮点型数据转换成字符串;
6. `delay()` 函数用来延时,其参数为延时时间(单位:毫秒);
7. 温度值的变化是通过 `rand()` 函数模拟的,其范围为 20℃~30℃。
阅读全文