// 函数名:write_xy_piont
// 功能: 在指定的行和列 画一个点或者删除一个点
// flag: 0 删除一个点 ,1 画一个点
// CS1 CS2 :00 ,01 ,10
void write_xy_point(u8 x,u8 y,u8 flag)
{
u8 oddwei;
u8 wholepage;
u8 rowdata;
rowdata=0;
wholepage=x/8; //行所在的页数
oddwei=x%8; //所在页数的第几页
if(y<64)
{
LCD_CS1=0;
LCD_CS2=0;
LCD_write_command(BEGIN_PAGE+wholepage);
LCD_write_command(BEGIN_Y+y);
checkbusy();
rowdata= LCD_read_data();
if(flag==1)
rowdata |= 1<<oddwei;
else
rowdata &=~(1<<oddwei);
write_page_8bit(&rowdata,wholepage,y,1);
}
else if((y>=64)&&(y<128))
{
LCD_CS1=0;
LCD_CS2=1;
LCD_write_command(BEGIN_PAGE+wholepage);
LCD_write_command(BEGIN_Y+y-64);
checkbusy();
rowdata= LCD_read_data();
if(flag==1)
rowdata |= 1<<oddwei;
else
rowdata &=~(1<<oddwei);
write_page_8bit(&rowdata,wholepage,y-64,1);
}
else
{
LCD_CS1=1;
LCD_CS2=0;
LCD_write_command(BEGIN_PAGE+wholepage);
LCD_write_command(BEGIN_Y+y-128);
checkbusy();
rowdata= LCD_read_data();
if(flag==1)
rowdata |= 1<<oddwei;
else
rowdata &=~(1<<oddwei);
write_page_8bit(&rowdata,wholepage,y-128,1);
}
}
// 函数名: draw_line
// 功能 : 在任意两点间画一条直线或者删除一条直线
//Bresenham算法-直线光栅法算法 flag : 0 删除,1 画一条直线
void draw_line(u8 x0,u8 y0,u8 x1,u8 y1,u8 flag)
{
u16 t;
int nowrow,nowcol; // 行 列
int incx,incy; // 基准
int distance_x,distance_y,distance;
int xerr=0,yerr=0;
nowrow=x0;
nowcol=y0;
distance_x=(int)x1-(int)x0;
distance_y=(int)y1-(int)y0;
if(distance_x>0)incx=1; // 判断x1 yu x0 大小,然后给基准x赋值
else if(distance_x==0)incx=0;
else
{
incx=-1;
distance_x=-distance_x;
}
if(distance_y>0)incy=1; //判断y1 与 y0 大小,然后给基准x赋值
else if(distance_y==0)incy=0;
else
{
incy=-1;
distance_y=-distance_y;
}
if(distance_x>distance_y)distance=distance_x;
else distance=distance_y;
for(t=0;t<distance+1;t++)
{
write_xy_point(nowrow,nowcol,flag);
xerr+=distance_x;
yerr+=distance_y;
if(xerr>distance)
{
xerr-=distance;
nowrow+=incx;
}
if(yerr>distance)
{
yerr-=distance;
nowcol+=incy;
}
}
}