12232液晶第二行第一个字符显示乱码

12864液晶为什么出入汉字会出现乱码?

12864液晶为什么出入汉字会出现乱码?

如果输入的是数字或者字符可以是任意的地址,如果是汉字只能存放于偶数地址。比如第一行80H你写入一个字符‘a’接着写入'我'  
A可以正常显示 ‘我’是乱码 所以你需要在A后面加入空格符 将我放入到81H中
你的地址没有对应好,也就是第一行的前两个地址00 01  这两个地址写一个汉字,但是如果你在01 02 写入一个汉字,他一定会出现乱码

12232液晶第二行第一个字符显示乱码

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++);

}




你可能感兴趣的:(12232液晶第二行第一个字符显示乱码)