51单片机的lcd1602显示
时间: 2023-07-30 17:05:43 浏览: 50
51单片机与LCD1602的连接和显示是一个比较常见的应用。下面是一个简单的示例代码,可以让LCD1602在51单片机上进行显示:
```C
#include <reg51.h>
#define LCD_DATA P2 // 数据口连接到P2口
sbit RS = P3^0; // RS引脚连接到P3.0口
sbit EN = P3^1; // EN引脚连接到P3.1口
void delay(unsigned int time) {
unsigned int i, j;
for(i = 0; i < time; i++)
for(j = 0; j < 120; j++);
}
void LCD_WriteCmd(unsigned char cmd) {
RS = 0; // 将RS置低,表示发送命令
LCD_DATA = cmd; // 将命令写入数据口
EN = 1; // 拉高EN引脚,使得LCD可以读取数据
delay(5); // 延时一段时间
EN = 0; // 拉低EN引脚,表示完成数据发送
}
void LCD_WriteData(unsigned char dat) {
RS = 1; // 将RS置高,表示发送数据
LCD_DATA = dat; // 将数据写入数据口
EN = 1; // 拉高EN引脚,使得LCD可以读取数据
delay(5); // 延时一段时间
EN = 0; // 拉低EN引脚,表示完成数据发送
}
void LCD_Init() {
LCD_WriteCmd(0x38); // 8位数据接口、2行显示、5x7点阵字符
LCD_WriteCmd(0x0C); // 开显示、光标不闪烁
LCD_WriteCmd(0x06); // 光标自动右移
LCD_WriteCmd(0x01); // 清屏
}
void LCD_DisplayString(unsigned char x, unsigned char y, unsigned char *str) {
unsigned char addr;
if(y == 1) {
addr = 0x80 + x; // 第一行地址计算
} else {
addr = 0xC0 + x; // 第二行地址计算
}
LCD_WriteCmd(addr); // 设置显示地址
while(*str != '\0') {
LCD_WriteData(*str); // 显示字符
str++;
}
}
void main() {
LCD_Init(); // 初始化LCD
LCD_DisplayString(0, 0, "Hello, CSDN!"); // 在第一行显示字符串
LCD_DisplayString(0, 1, "LCD1602 Demo!"); // 在第二行显示字符串
while(1);
}
```
这段代码使用了P2口作为LCD1602的数据口,RS引脚连接到P3.0口,EN引脚连接到P3.1口。通过调用相关函数,可以实现命令的发送、数据的发送以及字符串的显示。