51单片机lcd1602显示汉字
时间: 2023-07-29 17:07:45 浏览: 175
在51单片机上使用LCD1602显示汉字,需要先将汉字转换成对应的点阵数据,然后再通过LCD1602的指令将点阵数据写入到LCD1602的CGRAM中,最后在指定位置显示即可。
以下是一个简单的例子,演示如何显示汉字“你好”:
```c
#include <reg51.h>
#define LCD1602_DB P0
sbit LCD1602_RS = P2^6;
sbit LCD1602_RW = P2^5;
sbit LCD1602_EN = P2^7;
void delay(unsigned int t) // 延时函数
{
unsigned int i, j;
for(i = 0; i < t; i++)
for(j = 0; j < 120; j++);
}
void LCD1602_WriteCommand(unsigned char Command) // 写入指令
{
LCD1602_RS = 0;
LCD1602_RW = 0;
LCD1602_EN = 0;
LCD1602_DB = Command;
delay(5);
LCD1602_EN = 1;
delay(5);
LCD1602_EN = 0;
}
void LCD1602_WriteData(unsigned char Data) // 写入数据
{
LCD1602_RS = 1;
LCD1602_RW = 0;
LCD1602_EN = 0;
LCD1602_DB = Data;
delay(5);
LCD1602_EN = 1;
delay(5);
LCD1602_EN = 0;
}
void LCD1602_Init() // LCD1602初始化函数
{
LCD1602_WriteCommand(0x38); // 8位数据接口,2行显示,5x7点阵字符
LCD1602_WriteCommand(0x0c); // 显示开,光标关,光标位置不显示
LCD1602_WriteCommand(0x06); // 光标加1,写入字符后移
LCD1602_WriteCommand(0x01); // 显示清屏
}
void LCD1602_WriteCGRAM(unsigned char Address, unsigned char *Data) // 写入CGRAM
{
unsigned char i;
if(Address < 8)
{
LCD1602_WriteCommand(0x40 + Address * 8);
for(i = 0; i < 8; i++)
LCD1602_WriteData(Data[i]);
}
}
void LCD1602_DisplayString(unsigned char x, unsigned char y, unsigned char *String) // 在指定位置显示字符串
{
unsigned char i;
if(x < 16)
{
if(y == 0)
LCD1602_WriteCommand(0x80 + x);
else if(y == 1)
LCD1602_WriteCommand(0x80 + 0x40 + x);
else
return;
}
else
return;
for(i = 0; String[i] != '\0'; i++)
LCD1602_WriteData(String[i]);
}
void main()
{
unsigned char NiHao[8] = {0x0e, 0x04, 0x0e, 0x04, 0x0e, 0x00, 0x0e, 0x00}; // 汉字“你”的点阵数据
unsigned char *NiHaoStr = "NiHao"; // 汉字“你”的拼音
LCD1602_Init(); // 初始化LCD1602
LCD1602_WriteCGRAM(0, NiHao); // 将汉字“你”的点阵数据写入CGRAM中,地址为0
LCD1602_DisplayString(0, 0, NiHaoStr); // 在第一行第一列显示汉字“你”
while(1);
}
```
以上程序使用了一个数组存储了汉字“你”的点阵数据,先将点阵数据写入到CGRAM中,然后在指定位置显示汉字即可。如果需要显示其他汉字,可以根据对应的点阵数据进行修改。需要注意的是,LCD1602只能显示8位宽的字符,因此一个汉字需要占用2个字符位置。
阅读全文