void LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2) { u16 t; int xerr=0,yerr=0,delta_x,delta_y,distance; int incx,incy,uRow,uCol; delta_x=x2-x1; //计算坐标增量 delta_y=y2-y1; uRow=x1; uCol=y1; if(delta_x>0)incx=1; //设置单步方向 else if(delta_x==0)incx=0;//垂直线 else {incx=-1;delta_x=-delta_x;} if(delta_y>0)incy=1; else if(delta_y==0)incy=0;//水平线 else{incy=-1;delta_y=-delta_y;} if( delta_x>delta_y)distance=delta_x; //选取基本增量坐标轴 else distance=delta_y; for(t=0;t<=distance+1;t++ )//画线输出 { _LCD_DrawPoint(uRow,uCol);//画点 xerr+=delta_x ; yerr+=delta_y ; if(xerr>distance) { xerr-=distance; uRow+=incx; } if(yerr>distance) { yerr-=distance; uCol+=incy; } } } 逐行注释
时间: 2024-03-12 19:49:28 浏览: 67
API.rar_arm9 api_s3c2410 api_uCOS-II Display.h
下面是对该函数的逐行注释:
```
void LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2) {
u16 t; // 循环计数器
int xerr=0,yerr=0,delta_x,delta_y,distance; // xerr、yerr表示误差,delta_x、delta_y表示坐标增量,distance表示基本增量坐标轴的长度
int incx,incy,uRow,uCol; // incx、incy表示单步方向,uRow、uCol表示当前坐标
delta_x=x2-x1; // 计算x坐标增量
delta_y=y2-y1; // 计算y坐标增量
uRow=x1; // 设置起始点坐标
uCol=y1;
if(delta_x>0) incx=1; // 设置单步方向
else if(delta_x==0) incx=0; // 如果x坐标没有变化,说明是垂直线,单步方向设置为0
else {
incx=-1; // 如果x坐标减小,单步方向设置为-1
delta_x=-delta_x; // x坐标增量取反
}
if(delta_y>0) incy=1; // 设置单步方向
else if(delta_y==0) incy=0; // 如果y坐标没有变化,说明是水平线,单步方向设置为0
else{
incy=-1; // 如果y坐标减小,单步方向设置为-1
delta_y=-delta_y; // y坐标增量取反
}
if(delta_x>delta_y) distance=delta_x; // 如果x坐标增量大于y坐标增量,基本增量坐标轴的长度选择x坐标增量
else distance=delta_y; // 否则选择y坐标增量
for(t=0;t<=distance+1;t++ ) // 循环绘制线条
{
_LCD_DrawPoint(uRow,uCol); // 绘制像素点
xerr+=delta_x ; // 计算误差
yerr+=delta_y ;
if(xerr>distance) // 如果误差大于增量
{
xerr-=distance; // 误差减去增量
uRow+=incx; // 坐标加上单步方向
}
if(yerr>distance) // 如果误差大于增量
{
yerr-=distance; // 误差减去增量
uCol+=incy; // 坐标加上单步方向
}
}
}
```
阅读全文