求救LCD显示问题

2020-01-30 13:46发布

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

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



#include"LCD_ziku.h"
#define unint  unsigned 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[n][i*2], 0xc0); //数据自动写,地址加1
        LCD_Com2( HZTable[n][i*2+1], 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);
   
  }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。