|
我对单色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);
}
}
}
}
希望高手指点下,谢谢了!等我把程序弄完我就把代码发上来! |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|