LCD速度如何解决?
我对单色LCD液晶屏画线画图写字时速度很慢,特别是画线的时候屏幕初始化完成后能看到画线的具体走势,可是我看人家的程序时初始化完成后,所有的文字,图片以及线条一下子就全都显示出来了,请问这是怎么做的的?希望高手帮忙啊,弄很久了这个程序!我的程序部分代码如下:/*----------------------------------------------
功能:画点函数,在图形区进行
参数:
@x--为屏幕上水平位置,以像素点为单位
@y--为屏幕上垂直位置,以像素行为单位
----------------------------------------------*/
void LCD_Drawpoint(U32 x,U32 y)
{
unsigned char dotdata,m;
unsigned int addr,addr_L,addr_H;
// 计算图形区ARM的实际显示地址
// ------------->计算点在该行的第几个字节处,每行占320/8=40个字节/行
// | ------>计算点在屏幕的第几行,每行40个字节,共240行即0~239行
// | | -->0x1000图形区SAD2地址
// | | |
addr = x/8+y*40+0x2580; // 点所在图形区的地址
addr_L = addr&0xff; // 地址低八位
addr_H = addr>>8; // 地址高八位
m = x%8; // 计算x在该字节的第几个点
dotdata = 0x80>>m; // 使X所在点所对应字节的位置1
LCD_CMDWrite(0x46); // 设置光标地址
LCD_DATAWrite(addr_L); // 写入光标地址低八位值
LCD_DATAWrite(addr_H); // 写入光标地址高八位值
LCD_CMDWrite(0x43); // 显示数据读操作
m = LCD_DATARead()|dotdata; // 读取原始点的值
LCD_CMDWrite(0x46);
LCD_DATAWrite(addr_L);
LCD_DATAWrite(addr_H);
LCD_CMDWrite(0x42); // 显示数据写操作
LCD_DATAWrite(m); // 写入数据m
}
/*---------------------------------------------------
功能:画线函数,在图形区进行
参数:
@x1,y1--为起点坐标,屏幕上水平位置,以像素点为单位
@x2,y2--为终点坐标,屏幕上垂直位置,以像素行为单位
----------------------------------------------------*/
void Draw_Line(U32 x1,U32 y1,U32 x2,U32 y2)
{
unsigned int temp;
int dalt_x,dalt_y,err=0;
if(y1>y2){
temp=x1;
x1=x2;
temp=y1;
y1=y2;
y2=temp;
}
LCD_Drawpoint(x1,y1);
dalt_x=x2-x1;
dalt_y=y2-y1;
if(dalt_x>=0){ // x2>x1
if(dalt_y>dalt_x){ // 斜率k>1
while(y1<y2){
if(err<0){
x1=x1+1;
y1=y1+1;
err=err+dalt_y-dalt_x;
}else{
y1=y1+1;
err=err-dalt_x;
}
LCD_Drawpoint(x1,y1);
}
}else{
if(dalt_y==0)
y1=y1-1;
while(x1<x2){
if(err<0){
x1=x1+1;
err=err+dalt_y;
}else{
y1=y1+1;
x1=x1+1;
err=err+dalt_y-dalt_x;
}
LCD_Drawpoint(x1,y1);
}
}
}else{
dalt_x=x1-x2;
if(dalt_y>dalt_x){
while(y1<y2){
if(err<0){
x1=x1-1;
y1=y1+1;
err=err+dalt_y-dalt_x;
}else{
y1=y1+1;
err=err-dalt_x;
}
LCD_Drawpoint(x1,y1);
}
}else{
if(dalt_y==0)
y1=y1-1;
while(x1>x2){
if(err<0){
x1=x1-1;
err=err+dalt_y;
}else{
x1=x1-1;
y1=y1+1;
err=err+dalt_y-dalt_x;
}
LCD_Drawpoint(x1,y1);
}
}
}
}
希望高手指点下,谢谢了!等我把程序弄完我就把代码发上来! 使用DMA吧,50M的主频显示也会很快的 使用DMA吧,50M的主频显示也会很快的 瓶颈不在这里,在更底层的驱动程序里 加个buffer吧。 如果你的内存够的话,可以开辟一块作为显存,修改在内存里操作,刷屏时整块刷,或者分部刷,这样就能快一点。 我的做法是建个显示buffer,数据操作全部针对该buffer完成
定时将该buffer写入屏幕,貌似速度还可以! 283868130 发表于 2012-4-19 20:16 static/image/common/back.gif
我的做法是建个显示buffer,数据操作全部针对该buffer完成
定时将该buffer写入屏幕,貌似速度还可以! ...
怎么显示buffer?没有明白你的意思,望回复,谢谢! pcr386 发表于 2012-4-19 20:10 static/image/common/back.gif
加个buffer吧。
怎么加? 同样想学一招 dtszcr 发表于 2012-4-19 20:13 static/image/common/back.gif
如果你的内存够的话,可以开辟一块作为显存,修改在内存里操作,刷屏时整块刷,或者分部刷,这样就能快一点 ...
这不是有专门的显示区吗?对于单色液晶屏有一二三四四个区,二区只能是图形方式,一三四根据自己设置,可以设置为文本形式或图形形式,可是画图都在图形区即第二显示区啊!还能怎么开辟新的内存? another_2 发表于 2012-4-20 16:37 static/image/common/back.gif
这个估计很难扭转,我们是TFT专业研发和生产厂家,有需求请联系QQ 369122197
打广告啊?不过我现在还不需要TFT tdjsppwct 发表于 2012-4-19 22:27 static/image/common/back.gif
这不是有专门的显示区吗?对于单色液晶屏有一二三四四个区,二区只能是图形方式,一三四根据自己设置,可 ...
只使用lcd的图形区,在cpu内部见一个图形区的拷贝
cpu根据实际需要更改该拷贝的内容,然后定时刷新至lcd图形区 283868130 发表于 2012-4-20 21:36 static/image/common/back.gif
只使用lcd的图形区,在cpu内部见一个图形区的拷贝
cpu根据实际需要更改该拷贝的内容,然后定时刷新至lcd ...
嗯,我往你说的试试,看看能不能写出来,没有整过这方面的程序!
页:
[1]