基于51单片机的lcd1602的两行显示
时间: 2023-09-02 10:05:35 浏览: 184
以下是基于51单片机和LCD1602的两行显示的基本代码:
```c
#include <reg51.h> // 引入51单片机寄存器定义文件
#define LCD1602_DB P0 // 定义LCD1602数据总线为P0口
sbit LCD1602_RS = P2^0; // 定义LCD1602 RS引脚为P2.0口
sbit LCD1602_RW = P2^1; // 定义LCD1602 RW引脚为P2.1口
sbit LCD1602_E = P2^2; // 定义LCD1602 E引脚为P2.2口
void delay(unsigned int i) { // 延时函数
while(i--);
}
void LCD1602_WriteCmd(unsigned char cmd) { // 写命令函数
LCD1602_RS = 0; // 选择命令寄存器
LCD1602_RW = 0; // 写操作
LCD1602_E = 1; // 使能
LCD1602_DB = cmd; // 写入命令
delay(50); // 延时
LCD1602_E = 0; // 禁止
}
void LCD1602_WriteData(unsigned char dat) { // 写数据函数
LCD1602_RS = 1; // 选择数据寄存器
LCD1602_RW = 0; // 写操作
LCD1602_E = 1; // 使能
LCD1602_DB = dat; // 写入数据
delay(50); // 延时
LCD1602_E = 0; // 禁止
}
void LCD1602_Init() { // LCD1602初始化函数
LCD1602_WriteCmd(0x38); // 设置16*2显示,5*7点阵,8位数据接口
LCD1602_WriteCmd(0x0c); // 显示器开,光标不显示,光标闪烁不显示
LCD1602_WriteCmd(0x06); // 光标右移,字符不移动
LCD1602_WriteCmd(0x01); // 清除显示
}
void LCD1602_Display(unsigned char x, unsigned char y, unsigned char *p) { // LCD1602显示函数
unsigned char addr;
if(x == 0) { // 第1行
addr = 0x80 + y; // 地址为0x80 + 列数
} else { // 第2行
addr = 0xc0 + y; // 地址为0xc0 + 列数
}
LCD1602_WriteCmd(addr); // 设置显示地址
while(*p) { // 循环显示字符串
LCD1602_WriteData(*p++); // 写入数据
}
}
void main() {
LCD1602_Init(); // LCD1602初始化
LCD1602_Display(0, 0, "Hello, World!"); // 在第1行第1列显示字符串
LCD1602_Display(1, 0, "From AI Chatbot!"); // 在第2行第1列显示字符串
while(1); // 循环等待
}
```
该代码实现了在LCD1602上显示两行字符串,可以根据需要修改每行字符串的内容和列数。