lcd1602显示按键键值
时间: 2023-07-29 11:15:02 浏览: 70
好的,我可以为您提供一份C语言代码,用于读取LCD1602上的按键键值并在LCD1602上显示。请注意,此代码可能需要根据您的具体硬件配置进行调整。
```c
#include <reg51.h>
sbit RS = P3^5; //定义LCD1602的接口引脚
sbit RW = P3^6;
sbit EN = P3^4;
sbit KEY1 = P1^0; //定义按键的接口引脚
sbit KEY2 = P1^1;
sbit KEY3 = P1^2;
sbit KEY4 = P1^3;
void delay(unsigned int t); //延时函数
void write_com(unsigned char com); //写命令函数
void write_data(unsigned char dat); //写数据函数
void init_lcd(); //初始化函数
void display(); //显示函数
void main()
{
unsigned int key_val = 0;
init_lcd();
while(1)
{
if(KEY1 == 0) //检测按键1是否按下
{
delay(10); //消抖
if(KEY1 == 0)
{
key_val = 1;
display();
}
}
else if(KEY2 == 0) //检测按键2是否按下
{
delay(10);
if(KEY2 == 0)
{
key_val = 2;
display();
}
}
else if(KEY3 == 0) //检测按键3是否按下
{
delay(10);
if(KEY3 == 0)
{
key_val = 3;
display();
}
}
else if(KEY4 == 0) //检测按键4是否按下
{
delay(10);
if(KEY4 == 0)
{
key_val = 4;
display();
}
}
}
}
void delay(unsigned int t)
{
unsigned int i, j;
for(i = t; i > 0; i--)
for(j = 110; j > 0; j--);
}
void write_com(unsigned char com)
{
RW = 0;
RS = 0;
P2 = com;
EN = 1;
delay(5);
EN = 0;
}
void write_data(unsigned char dat)
{
RW = 0;
RS = 1;
P2 = dat;
EN = 1;
delay(5);
EN = 0;
}
void init_lcd()
{
write_com(0x38); //设置16*2显示,5*7点阵,8位数据接口
write_com(0x0c); //开显示,不显示光标,不闪烁
write_com(0x06); //写入字符后地址自动加1,不移动显示
write_com(0x01); //清屏
}
void display()
{
static unsigned char dis_buf[5] = {0};
unsigned int i;
dis_buf[4] = key_val % 10 + 0x30; //转换为ASCII码
dis_buf[3] = key_val / 10 % 10 + 0x30;
dis_buf[2] = key_val / 100 % 10 + 0x30;
dis_buf[1] = key_val / 1000 % 10 + 0x30;
dis_buf[0] = 'K';
write_com(0x80); //设置光标位置为第一行第一列
for(i = 0; i < 5; i++)
write_data(dis_buf[i]); //写入显示数据
}
```
该代码通过轮询的方式检测LCD1602所连接的四个按键的状态,如果检测到按键按下,就会将按键的键值保存下来并在LCD1602上显示出来。您可以根据自己的需求进行调整。
阅读全文