关于液晶屏RA8803
最近在做RA8803的51驱动,一直没能成功,有做过的吗?
能给点提示吗?
WR320240R的蓝底白字的屏,背光有,无任何显示。
用示波器量RA8803的51脚,有3M左右的矩形波输出(我的示波器不是太好)
13脚的DISPOFF信号老是为低,读REG,都示FF。怀疑程序有错误,按3个母程序改过,都不行。
我的系统示11.0592MHZ的,AT89C52。
以下是关键子程序:大家给分析分析,先谢谢了。
/*---------------------------------------------------------------*/
void delay(uint x) //液晶屏用延时子程序
{
data uint i;
for(i=0;i<x;i++) ;
}
/*---------------------------------------------------------------*/
void delay1ms(uchar x) //延时1MS
{
data uchar i,j,m;
for(m=x;m>0;m--)
{for(i=2;i>0;i--)
{for(j=231;j>0;j--) ;
}
}
}
/*---------------------------------------------------------------*/
void lcd_regwr(uchar regdata) //液晶屏写寄存器
{
LCD_DATABUS=regdata;
LCD_CS=0;
LCD_RS=0;
LCD_RD=1;
LCD_WR=0;
_nop_();
_nop_();
_nop_();
_nop_();
LCD_WR=1;
LCD_CS=1;
}
/*---------------------------------------------------------------*/
void lcd_regwrite(uchar x,uchar y)//液晶屏向指定寄存器写数
{
data uchar i,j;
i=x;
j=y;
lcd_regwr(i);
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
lcd_regwr(j);
}
/*---------------------------------------------------------------*/
uchar lcd_regread(uchar regname) //从指定的寄存器读数
{
data uchar i;
i=regname;
lcd_regwr(i);
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
LCD_DATABUS=0xFF;
LCD_CS=0;
LCD_RS=0;
LCD_WR=1;
LCD_RD=0;
_nop_();
_nop_();
i=LCD_DATABUS;
LCD_RD=1;
LCD_CS=1;
return i;
}
/*---------------------------------------------------------------*/
void lcd_datawrite(uchar lcdata) //向数据区写数
{
data uchar i;
i=lcdata;
LCD_CS=0;
LCD_DATABUS=i;
LCD_RD=1;
LCD_RS=1;
LCD_WR=0;
_nop_();
_nop_();
_nop_();
_nop_();
LCD_WR=1;
LCD_CS=1;
}
/*---------------------------------------------------------------*/
uchar lcd_dataread(void) //读数据区
{
data uchar i;
LCD_DATABUS=0xFF;
LCD_CS=0;
LCD_RS=1;
LCD_WR=1;
LCD_RD=0;
_nop_();
_nop_();
i=LCD_DATABUS;
LCD_RD=1;
LCD_CS=1;
return i;
}
/*---------------------------------------------------------------*/
void lcd_chkbusy(void) //检测BUSY是否忙碌
{
do{
}while(LCD_BUSY==1);
}
/*---------------------------------------------------------------*/
void lcd_clear(void) //清显示
{
data uchar i;
lcd_regwrite(0xE0,0x00);
i=lcd_regread(0xF0);
i&=0xF7;
i|=0x08;
lcd_regwrite(0xF0,i);
}
/*---------------------------------------------------------------*/
void lcd_gotoxy(uchar x,uchar y) //光标定位
{
lcd_regwrite(0x60,x);
lcd_regwrite(0x70,y);
}
/*---------------------------------------------------------------*/
void lcd_reset(void) //LCD复位
{
LCD_CONTROL=0xFF;
delay1ms(200);
LCD_CS=0;
delay1ms(100);
LCD_RST=0;
delay1ms(600);
LCD_RST=1;
delay1ms(300);
LCD_CONTROL=0xFF;
}
/*---------------------------------------------------------------*/
void lcd_initial(void) //LCD设置
{
lcd_regwrite(0x00,0xC9);//WLCR 11000101正常模式,绘图模式,正常开启,正常显示
lcd_regwrite(0x01,0xE3);//MISC 11110011内部CLK_OUT输出使能,INT中断低电平有效,系统频率8MHZ
lcd_regwrite(0x02,0x10);//APSR 00010000内部ROM/RAM读取速度60ns,禁止直接读取内部字型ROM
lcd_regwrite(0x03,0x80);//ADSR 00010000正常不卷动,不平移
lcd_regwrite(0x10,0x6B);//WCCR 01101011光标自动移位禁能,中英文对齐使能,DDRAM正相存取,正常字体,光标自动移位使能,光标不显示,光标闪烁,光标宽度自适应
lcd_regwrite(0x11,0x22);//QWLR 00100010光标高度,行距
lcd_regwrite(0x12,0x91);//MAMR 10010001图形模式下光标先水平再垂直,只显示PAGE1图层
lcd_regwrite(0x20,0x27);//AWRR 00100111工作窗右边位置
lcd_regwrite(0x30,0xEF);//AWBR 11101111工作窗底边位置
lcd_regwrite(0x40,0x00);//AWLR 00000000工作窗左边位置
lcd_regwrite(0x50,0x00);//AWTP 00000000工作窗顶边位置
lcd_regwrite(0x21,0x27);//DWRR 00100111显示窗右边位置
lcd_regwrite(0x31,0xEF);//DWBR 11101111显示窗底边位置
lcd_regwrite(0x41,0x00);//DWLR 00000000显示窗左边位置
lcd_regwrite(0x51,0x00);//DWTR 00000000显示窗顶边位置
lcd_regwrite(0x60,0x00);//CPXR 00000000光标位置X
lcd_regwrite(0x70,0x00);//CPYR 00000000光标位置Y
lcd_regwrite(0x61,0x00);//BGSG 00000000光标显示X
lcd_regwrite(0x71,0x00);//BGCM 00000000水平移动块的起始位置
lcd_regwrite(0x72,0xEF);//EDCM 11101111水平移动块的结束位置
lcd_regwrite(0x80,0x33);//BTR 00110011光标闪烁
lcd_regwrite(0x81,0x00);//FRCA 00000000使用模块COMMON数
lcd_regwrite(0x90,0x04);//SCCR 00000100屏幕更新
lcd_regwrite(0x91,0x00);//FRCB 00000000保留
lcd_regwrite(0xA0,0x11);//INTR 00010001光标的ROW,触摸屏中断设置
lcd_regwrite(0xA1,0x00);//KSCR 00000000按键扫描禁能,按键组数8*8,消除弹跳的波长,波形频率
lcd_regwrite(0xA2,0x00);//KSDR 00000000按键扫描输出值
lcd_regwrite(0xA3,0x00);//KSER 00000000按键扫描输入值
lcd_regwrite(0xB0,0x27);//INTX 00100111光标中断位置X
lcd_regwrite(0xB1,0xEF);//INTY 11101111光标中断位置Y
lcd_regwrite(0xC0,0x00);//TPCR 11101111触摸屏功能使能,触摸屏资料输出使能,触摸屏扫描使能,控制位全开
lcd_regwrite(0xC1,0x0A);//TPSR/ADCS 00001010ADC转换频率
lcd_regwrite(0xC8,0x80);//TPXR 10000000触摸屏行数据高字节
lcd_regwrite(0xC9,0x80);//TPYR 10000000触摸屏列数据高字节
lcd_regwrite(0xCA,0x00);//TPZR 00000000触摸屏数据行低字节列低字节
lcd_regwrite(0xD0,0x0C);//LCCR 00011000亮度控释使能,亮度中等
lcd_regwrite(0xE0,0x00);//PNTR 00000000图形模式数据寄存器
lcd_regwrite(0xF0,0xA8);//FNCR 10101000执行ROM转换电路使能,选择上部256KB字型ROM,简体512KB MODEL2,重复写入开始,输入数值不强制ASC2,选择ASC2区块0
lcd_regwrite(0xF1,0x00);//FVHT 00000000字型水平大小位一倍,垂直大小位一倍