51单片机lcd1602显示字符串和汉字
时间: 2023-07-29 17:10:24 浏览: 116
要在LCD1602上显示字符串和汉字,需要先初始化LCD1602,然后将字符和汉字转换为相应的ASCII码并发送到LCD1602的数据端口。以下是一个简单的例子:
```c
#include <reg51.h>
//定义LCD1602的I/O端口
sbit RS=P2^0;
sbit RW=P2^1;
sbit EN=P2^2;
//向LCD发送一个指令
void LcdWriteCmd(unsigned char cmd)
{
RS=0; //选择命令模式
RW=0; //选择写入模式
EN=1; //打开使能
P0=cmd; //发送指令
EN=0; //关闭使能
}
//向LCD发送一个字符
void LcdWriteData(unsigned char dat)
{
RS=1; //选择数据模式
RW=0; //选择写入模式
EN=1; //打开使能
P0=dat; //发送数据
EN=0; //关闭使能
}
//初始化LCD1602
void InitLcd()
{
LcdWriteCmd(0x38); //设置16*2显示,5*7点阵,8位数据接口
LcdWriteCmd(0x0c); //设置显示开,光标关,闪烁关
LcdWriteCmd(0x06); //设置文字在显示器上的移动方向,每次写入后光标加1,整屏不移动
LcdWriteCmd(0x01); //清屏
}
//显示字符串
void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str)
{
unsigned char i;
if(y==0) LcdWriteCmd(0x80+x); //在第一行显示
else LcdWriteCmd(0xc0+x); //在第二行显示
for (i=0;str[i]!=0;i++) //逐个发送字符
{
LcdWriteData(str[i]);
}
}
//显示汉字
void LcdShowChinese(unsigned char x, unsigned char y, unsigned char *str)
{
unsigned char i;
if(y==0) LcdWriteCmd(0x80+x); //在第一行显示
else LcdWriteCmd(0xc0+x); //在第二行显示
for (i=0;str[i]!=0;i+=2) //逐个发送汉字
{
LcdWriteData(str[i]); //发送高字节
LcdWriteData(str[i+1]); //发送低字节
}
}
void main()
{
InitLcd(); //初始化LCD1602
LcdShowStr(0, 0, "Hello, world!"); //显示字符串
LcdShowChinese(0, 1, "\xba\xba\xd7\xd6\xce\xf6\xb2\xe5\xd0\xde\xcf\xf1"); //显示汉字
while(1);
}
```
在上面的代码中,`\xba\xba\xd7\xd6\xce\xf6\xb2\xe5\xd0\xde\xcf\xf1` 是“你好世界”的ASCII码,需要先将其转换为相应的汉字再发送到LCD1602上。