A可以正常显示 ‘我’是乱码 所以你需要在A后面加入空格符 将我放入到81H中
你的地址没有对应好,也就是第一行的前两个地址00 01 这两个地址写一个汉字,但是如果你在01 02 写入一个汉字,他一定会出现乱码
你的地址没有对应好,也就是第一行的前两个地址00 01 这两个地址写一个汉字,但是如果你在01 02 写入一个汉字,他一定会出现乱码
12232液晶第二行第一个字符显示乱码,然后给字符串加了一个code 后,不再显示乱码!
#include<STC_NEW_8051.h>
sbit RS=P5^1; // 命令或数据
sbit WRD=P4^4; //写入、读出命令引脚
sbit E=P5^0; //使能
//sbit PSB=P2^0; //串行、并行
//sbit RES=P2^2; //复位
void TransferData(char data1,bit DI);
void delayms(unsigned int n);
void delay(unsigned int m);
void lcd_mesg(unsigned char code *addr1);
void lcd_mesg1(unsigned char code *addr2);
//下面来定义要显示的汉字,8*4
unsigned char code IC_DAT[]={"终于搞定啦 "};
unsigned char code IC_DAT2[]={"我终于搞定啦"};
void initinal(void) //初始化,12864有要求的要写上
{
delayms(400);
//PSB=1; //并口工作模式
delayms(10);
//RES=0; //复位
//delay(10);
//RES=1; //复位置高
//delayms(10);
TransferData(0x30,0); //选择基本指令集,8位
delayms(100);
//TransferData(0x30,0);
//delay(37);
//TransferData(0x08,0);
//delay(100);
TransferData(0x10,0);//游标或显示移位控制
delayms(100);
TransferData(0x0C,0); //开显示(无游标、不反白)
delayms(100);
TransferData(0x01,0); //清屏指令:清屏且AC值为00H
delayms(100);
TransferData(0x06,0); //设定游标移到方向及图像整体移动方向(默认游标右移,图像整体不动)
delayms(100);
}
void main(void) //分两屏来不断显示上面定义的IC_DAT和IC_DAT2汉字
{
P0M1=0X00; //STC12C5A60s2,端口改为强推挽
P0M0=0XFF;
P1M1=0X00;
P1M0=0XFF;
P2M1=0X00;
P2M0=0XFF;
P3M1=0X00;
P3M0=0XFF;
P4M1=0X00;
P4M0=0XFF;
while(1)
{
initinal();//调用LCD字库初始化程序
delay(100);
lcd_mesg(IC_DAT);
delayms(500); //延时程序必要的,长与短,自己调节
delayms(500);
//initinal();
delay(100);
lcd_mesg1(IC_DAT2);
delayms(500);
delayms(500);
}
}
void lcd_mesg(unsigned char code *addr1) //显示汉字函数,8*4=32
{
//unsigned char i;
TransferData(0x80,0);
delay(100);
while(*addr1 !='\0')
{
TransferData(*addr1,1);
addr1++;
}
}
void lcd_mesg1(unsigned char code *addr2) //显示汉字函数,8*4=32 ,注意这一行的code
{
//unsigned char i;
TransferData(0x90,0);
delay(100);
while(*addr2 !='\0')
{
TransferData(*addr2,1);
addr2++;
}
}
void TransferData(char data1,bit DI) //传送数据或是命令,当DI=0时,传送命令,当DI=1时,传送数据
{
WRD=0;
RS=DI;
delay(1);
P0=data1;
E=1;
delay(1);
E=0;
}
void delayms(unsigned int n) //延时子程序
{
unsigned int i,j;
for(i=0;i<n;i++)
for(j=0;j<2000;j++);
}
void delay(unsigned int m)
{
unsigned int i,j;
for(i=0;i<m;i++)
for(j=0;j<10;j++);
}