hanbing4147 发表于 2013-4-15 22:02:57

求救LCD显示问题

本帖最后由 hanbing4147 于 2013-4-15 22:06 编辑

我在调试8952驱动T6963C的LCD时,在(0,0)位置时为乱码,其他位置正常,请教各位大侠是怎么回事?!
附上程序;#include <reg52.h>



#include"LCD_ziku.h"
#define unintunsigned int
#define unchar unsigned char
sbit LCD_CD=P3^3;
sbit LCD_WR=P3^6;
sbit LCD_RD=P3^7;
sbit LCD_CE=P3^4;
unchar LCD_Busy(void)//读取ST0,ST1状态
{
unchar i,dat;
      for(i=10;i>0;i--)
      {
          P0=0xff;
          LCD_CD=1;
          LCD_RD=0;
          dat=P0;
          LCD_RD=1;
          dat=0x03&dat;
          if(dat==0x03)
             return 1;
      }
   return 0;   
}

void LCD_Data(dat)
{
        if(LCD_Busy()==1)
        {LCD_CD=0;
        P0=dat;
        LCD_WR=0;
        LCD_WR=1;}
}


void LCD_Com1(command)//写有 1 个参数命令
{
        if(LCD_Busy()==1)
        {LCD_CD=1;
        P0=command;
        LCD_WR=0;
        LCD_WR=1;}
}

void LCD_Com2(dat, command)//写有 2 个参数命令
{
        LCD_Data(dat);
        LCD_Com1(command);
}

void LCD_Com3(data1, data2, command)//写有 3 个参数命令
{
        LCD_Data(data1);
        LCD_Data(data2);
        LCD_Com1(command);
}


//汉字显示 参数说明LCD_HZ(行,列,第几个字)
void LCD_HZ(int x,int y,unchar n)
{
        int i,StartAddr;               //
    StartAddr=x*30*16+y*2;               //1行30*8点; 1个汉字占2行
        for(i=0;i<16;i++)
{
        LCD_Com3((StartAddr%256),(StartAddr/256),0x24);
        LCD_Com2( HZTable, 0xc0); //数据自动写,地址加1
        LCD_Com2( HZTable, 0xc4); //数据自动写,地址不变
        StartAddr=StartAddr +30;
}
}


void LCD_Clear(void)//清屏
{
        long i;
        LCD_Com3(0x00,0x00,0x24);
        LCD_Com1(0xb0);
        for(i=0;i<4096;i++)   //8*1024=8K
        LCD_Data(0x00);
        LCD_Com1(0xb2);
}


void LCD_Init(void)//初始化LCD
{
        LCD_CE=0;
        LCD_CD=1;
        LCD_WR=1;
        LCD_RD=1;
        LCD_Com3( 0x00,0x00,0x40 ); //设置文本显示首地址
        LCD_Com3( 0x1e,0x00,0x41);//设置文本显示宽度
        LCD_Com3( 0x00,0x00,0x42 ); //设置图形显示首地址
        LCD_Com3( 0x1e,0x00,0x43);//设置图形显示宽度
    //LCD_Com3( 0x00,0x00,0x21 );
        LCD_Com1(0x80);             //设置显示方式 文本xor图形(因)
        LCD_Com1(0x9F);             //设置显示状态文本开,图形开,光标闪烁开
        LCD_Com1(0xa7);             //设置光标形状   8x8方块
        LCD_Clear();
}



main()
{
LCD_Init();
while(1)
{
   
       LCD_HZ(0,0,1);      〈〈==这句改成LCD_HZ(1,0,1);就正常。
        LCD_HZ(7,14,1);
   
}
}

283868130 发表于 2013-4-15 23:04:21

检查下LCD的初始化代码,弄清楚每个命令的含义
官方的初始化代码有时候不是能直接使用的
搞懂初始化代码后尝试修改,一般很快就会好的!

hanbing4147 发表于 2013-4-17 22:12:42

283868130 发表于 2013-4-15 23:04 static/image/common/back.gif
检查下LCD的初始化代码,弄清楚每个命令的含义
官方的初始化代码有时候不是能直接使用的
搞懂初始化代码后 ...

十分感谢您的回复,我已经搞定了,只要把StartAddr=StartAddr +30;
放在LCD_Com3((StartAddr%256),(StartAddr/256),0x24);
      LCD_Com2( HZTable, 0xc0); //数据自动写,地址加1
      LCD_Com2( HZTable, 0xc4); //数据自动写,地址不变
的前面就OK。不过显示速度有点慢还在研究中。。。。。。
页: [1]
查看完整版本: 求救LCD显示问题