51单片机按键控制lcd1602代码
时间: 2023-10-07 20:07:31 浏览: 182
以下是51单片机按键控制LCD1602的代码,其中使用了Keil C编译器和STC89C52单片机:
```c
#include <reg52.h> // 引入头文件
sbit RS = P2^0; // 定义LCD1602的RS, RW, EN三个引脚
sbit RW = P2^1;
sbit EN = P2^2;
void delay_ms(unsigned int ms) // 延时函数,单位为毫秒
{
unsigned int i, j;
for(i=0; i<ms; i++)
for(j=0; j<1141; j++);
}
void lcd_write_command(unsigned char command) // 向LCD1602写入命令
{
RS = 0;
RW = 0;
P0 = command;
EN = 1;
delay_ms(5);
EN = 0;
}
void lcd_write_data(unsigned char data) // 向LCD1602写入数据
{
RS = 1;
RW = 0;
P0 = data;
EN = 1;
delay_ms(5);
EN = 0;
}
void lcd_init() // LCD1602初始化函数
{
lcd_write_command(0x38); // 设置数据总线为8位,显示2行,5x7点阵字符
lcd_write_command(0x0c); // 显示开启,光标关闭,光标闪烁关闭
lcd_write_command(0x06); // 光标右移,字符串不动
lcd_write_command(0x01); // 清屏
}
void main()
{
unsigned char key;
lcd_init(); // LCD1602初始化
while(1)
{
key = P1; // 读取P1口的按键值
switch(key)
{
case 0xfe: // 按下第一个按键
lcd_write_command(0x80); // 光标移到第一行第一个字符
lcd_write_data('H');
lcd_write_data('e');
lcd_write_data('l');
lcd_write_data('l');
lcd_write_data('o');
break;
case 0xfd: // 按下第二个按键
lcd_write_command(0x80); // 光标移到第一行第一个字符
lcd_write_data('W');
lcd_write_data('o');
lcd_write_data('r');
lcd_write_data('l');
lcd_write_data('d');
break;
case 0xfb: // 按下第三个按键
lcd_write_command(0xc0); // 光标移到第二行第一个字符
lcd_write_data('E');
lcd_write_data('m');
lcd_write_data('b');
lcd_write_data('e');
lcd_write_data('d');
break;
case 0xf7: // 按下第四个按键
lcd_write_command(0xc0); // 光标移到第二行第一个字符
lcd_write_data('M');
lcd_write_data('a');
lcd_write_data('k');
lcd_write_data('e');
lcd_write_data('r');
break;
default:
break;
}
}
}
```
上述代码中,P1口连接了4个按键,分别对应LCD1602上的4个位置。当按下某个按键时,根据其对应的位置,向LCD1602写入相应的字符串。其中,使用了延时函数进行了一定的时间控制。需要注意的是,LCD1602的RS、RW、EN三个引脚需要根据实际连接情况进行修改。
阅读全文