LCD1602读写操作
时间: 2023-09-14 13:14:40 浏览: 20
LCD1602是一种常用的字符型液晶显示器,它可以显示2行16列,每个字符大小为5x8。下面是一个基本的LCD1602读写操作的例子:
首先,需要定义一些常量和变量:
```c
//定义引脚
#define RS 8
#define EN 9
#define D4 4
#define D5 5
#define D6 6
#define D7 7
//定义命令
#define CLEAR_LCD 0x01 //清除显示
#define RETURN_HOME 0x02 //光标返回到原点
#define ENTRY_MODE_SET 0x06 //光标自动右移
#define DISPLAY_ON 0x0C //开显示,光标不显示
#define FUNCTION_SET 0x28 //4位数据总线,2行显示,5x8点阵字符
//定义变量
byte row = 0; //当前行数
byte col = 0; //当前列数
```
然后,需要编写一些初始化函数,这些函数将LCD1602设置为所需的模式:
```c
void lcd_init() {
pinMode(RS, OUTPUT);
pinMode(EN, OUTPUT);
pinMode(D4, OUTPUT);
pinMode(D5, OUTPUT);
pinMode(D6, OUTPUT);
pinMode(D7, OUTPUT);
delay(50);
//设置4位数据总线
digitalWrite(D4, LOW);
digitalWrite(D5, LOW);
digitalWrite(D6, HIGH);
digitalWrite(D7, HIGH);
lcd_pulse_enable();
delay(5);
lcd_pulse_enable();
delay(1);
lcd_pulse_enable();
//设置5x8点阵字符,2行显示
lcd_send_command(FUNCTION_SET);
//开显示,光标不显示
lcd_send_command(DISPLAY_ON);
//清除显示
lcd_send_command(CLEAR_LCD);
//光标返回到原点
lcd_send_command(RETURN_HOME);
//光标自动右移
lcd_send_command(ENTRY_MODE_SET);
}
```
其中,`lcd_pulse_enable()`是一个将EN引脚置高再置低的函数:
```c
void lcd_pulse_enable() {
digitalWrite(EN, HIGH);
delayMicroseconds(1);
digitalWrite(EN, LOW);
delayMicroseconds(100);
}
```
`lcd_send_command()`是一个将命令发送到LCD1602的函数:
```c
void lcd_send_command(byte command) {
digitalWrite(RS, LOW);
lcd_send_byte(command);
if (command == CLEAR_LCD || command == RETURN_HOME) {
delay(2);
}
else {
delayMicroseconds(40);
}
}
```
`lcd_send_byte()`是一个将字节发送到LCD1602的函数:
```c
void lcd_send_byte(byte b) {
digitalWrite(D4, (b >> 0) & 1);
digitalWrite(D5, (b >> 1) & 1);
digitalWrite(D6, (b >> 2) & 1);
digitalWrite(D7, (b >> 3) & 1);
lcd_pulse_enable();
digitalWrite(D4, (b >> 4) & 1);
digitalWrite(D5, (b >> 5) & 1);
digitalWrite(D6, (b >> 6) & 1);
digitalWrite(D7, (b >> 7) & 1);
lcd_pulse_enable();
}
```
最后,还需要编写一些显示函数,这些函数将字符或字符串显示在LCD1602上:
```c
void lcd_set_cursor(byte row, byte col) {
byte address = col;
if (row == 1) {
address += 0x40;
}
lcd_send_command(0x80 | address);
}
void lcd_write_char(char c) {
digitalWrite(RS, HIGH);
lcd_send_byte(c);
col++;
if (col >= 16) {
col = 0;
row = 1;
}
lcd_set_cursor(row, col);
}
void lcd_write_string(char *str) {
while (*str) {
lcd_write_char(*str++);
}
}
```
这些函数可以组合使用,例如:
```c
lcd_init();
lcd_write_string("Hello, world!");
```
这将在LCD1602上显示一行文字“Hello, world!”。