本帖最后由 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);
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
官方的初始化代码有时候不是能直接使用的
搞懂初始化代码后尝试修改,一般很快就会好的!
一周热门 更多>