请生成基于51单片机由独立按键控制LCD1602显示屏显示由用户设定温度值的程序,其中第一个按键按下以后可以设置温度,且按下后温度值闪烁,第二个键按下可以使温度显示值加一,第三个按键按下使温度值减一,
时间: 2024-03-25 18:42:11 浏览: 64
基于51单片机的1602液晶显示温度和时间的C程序.docx
好的,以下是程序的代码,注意需要在51单片机上使用Keil C编译器进行编译:
```
#include <reg51.h>
#include <intrins.h>
#define LCD1602_DATA P0 // 数据口
sbit LCD1602_RS = P2^6; // RS引脚
sbit LCD1602_RW = P2^5; // RW引脚
sbit LCD1602_EN = P2^7; // EN引脚
unsigned char temperature = 25; // 初始温度为25度
void delay_ms(unsigned int ms) // 延时函数,单位毫秒
{
unsigned int i,j;
for(i=0;i<ms;i++)
{
for(j=0;j<121;j++);
}
}
void LCD1602_WriteCommand(unsigned char Command) // 写命令
{
LCD1602_RS = 0; // RS低电平,选择命令寄存器
LCD1602_RW = 0; // RW低电平,选择写入模式
LCD1602_DATA = Command; // 将命令写入数据口
LCD1602_EN = 1; // EN高电平,使能
_nop_(); // 稍作延时
LCD1602_EN = 0; // EN低电平,禁能
}
void LCD1602_WriteData(unsigned char Data) // 写数据
{
LCD1602_RS = 1; // RS高电平,选择数据寄存器
LCD1602_RW = 0; // RW低电平,选择写入模式
LCD1602_DATA = Data; // 将数据写入数据口
LCD1602_EN = 1; // EN高电平,使能
_nop_(); // 稍作延时
LCD1602_EN = 0; // EN低电平,禁能
}
void LCD1602_Init() // LCD1602初始化
{
LCD1602_WriteCommand(0x38); // 8位数据总线,2行显示,5*7点阵字符
LCD1602_WriteCommand(0x0c); // 显示开,关光标,光标不闪烁
LCD1602_WriteCommand(0x06); // 右移光标,不移动显示
LCD1602_WriteCommand(0x01); // 清屏
}
void display_temperature() // 显示温度
{
LCD1602_WriteCommand(0x80); // 光标移动到第一行第一个字符
LCD1602_WriteData('T');
LCD1602_WriteData('e');
LCD1602_WriteData('m');
LCD1602_WriteData('p');
LCD1602_WriteData(':');
LCD1602_WriteData(' ');
LCD1602_WriteData(temperature/10+'0'); // 十位数
LCD1602_WriteData(temperature%10+'0'); // 个位数
LCD1602_WriteData('C');
}
void main()
{
unsigned char key, flag = 0;
LCD1602_Init(); // LCD1602初始化
display_temperature(); // 显示温度
while(1)
{
key = P1; // 读取按键值
if(key == 0x01) // 第一个按键按下,设置温度
{
flag = ~flag; // 标志位取反,用于温度值闪烁
while(P1 == 0x01) // 等待按键松开
{
if(flag) // 温度值闪烁
{
LCD1602_WriteCommand(0x8e); // 光标移动到第一行第九个字符
LCD1602_WriteData(' '); // 清空
LCD1602_WriteData(' '); // 清空
}
else
{
display_temperature(); // 显示温度
}
delay_ms(500); // 500ms延时
}
}
else if(key == 0x02) // 第二个按键按下,温度加一
{
temperature++;
display_temperature(); // 显示温度
}
else if(key == 0x04) // 第三个按键按下,温度减一
{
temperature--;
display_temperature(); // 显示温度
}
}
}
```
这个程序使用P1口读取三个按键的值,根据不同的按键操作来设置和改变温度值,并在LCD1602显示屏上显示温度。第一个按键按下后,温度值会闪烁,此时再次按下即可退出设置模式。
阅读全文