📄 lcdc_driver.c
字号:
* 函数功能描述:(x1,y1)--(x2,y2)处划线;
*
* 输入参数:BYTE类型坐标x1,y1,x2,y2; bool类型标识flag;
*
* 返回数据:none;
*
* 注意: none;
************************************************************************************/
unsigned char LCD_Draw_line(unsigned char x1,y1,x2,y2,flag)
{
unsigned char data i,temp;
float data k,b;
if ((x1>=MAX_BIT_X)||(x2>=MAX_BIT_X)||(y1>=MAX_BIT_Y)||(y2>=MAX_BIT_Y))
return false;
if (y1==y2)
{
if (x1>x2)
{
temp=x1;
x1=x2;
x2=temp;
}
for (i=x1;i<x2+1; i++)
LCD_Draw_dot(i,y1,flag);
}
else if (x1==x2)
{
if (y1>y2)
{
temp=y1;
y1=y2;
y2=temp;
}
for (i=y1;i<y2+1; i++)
LCD_Draw_dot(x1,i,flag);
}
else
{
if (abs(x2-x1)>=abs(y2-y1))
{
k=1.0*(y2-y1)/(x2-x1);
b=y1-k*x1;
if (x1>x2)
{
temp=x1;
x1=x2;
x2=temp;
}
for (i=x1;i<x2+1; i++)
{
temp=k*i+b;
LCD_Draw_dot(i,temp,flag);
}
}
else
{
k=1.0*(x2-x1)/(y2-y1);
b=x1-k*y1;
if (y1>y2)
{
temp=y1;
y1=y2;
y2=temp;
}
for (i=y1;i<y2+1; i++)
{
temp=k*i+b;
LCD_Draw_dot(temp,i,flag);
}
}
}
}
/***********************************************************************************
* 函数名称:LCD_Draw_circle;
*
* 函数功能描述:以(x,y)为圆心,r为半径画圆;
*
* 输入参数:unsigned char类型坐标x,y, bool类型标识flag;
*
* 返回数据:none;
*
* 注意: none;
************************************************************************************/
void LCD_Draw_circle(unsigned char x,y,r,flag)
{
unsigned char data r_2,i,x1,y1,temp_x;
unsigned int data temp;
r_2=0.707*r;
temp=r*r;
for (i=0; i<=r_2; i++)
{
if (flag)
{
if (!(i&0x01))
{
x1=i;
y1=sqrt(1.0*(temp-x1*x1))+0.5;
LCD_Draw_dot(x1+x,y1+y,flag);
LCD_Draw_dot(-x1+x,y1+y,flag);
LCD_Draw_dot(x1+x,-y1+y,flag);
LCD_Draw_dot(-x1+x,-y1+y,flag);
temp_x=x1;
x1=y1;
y1=temp_x;
LCD_Draw_dot(x1+x,y1+y,flag);
LCD_Draw_dot(-x1+x,y1+y,flag);
LCD_Draw_dot(x1+x,-y1+y,flag);
LCD_Draw_dot(-x1+x,-y1+y,flag);
}
}
else
{
x1=i;
y1=sqrt(1.0*(temp-x1*x1))+0.5;
LCD_Draw_dot(x1+x,y1+y,flag);
LCD_Draw_dot(-x1+x,y1+y,flag);
LCD_Draw_dot(x1+x,-y1+y,flag);
LCD_Draw_dot(-x1+x,-y1+y,flag);
temp_x=x1;
x1=y1;
y1=temp_x;
LCD_Draw_dot(x1+x,y1+y,flag);
LCD_Draw_dot(-x1+x,y1+y,flag);
LCD_Draw_dot(x1+x,-y1+y,flag);
LCD_Draw_dot(-x1+x,-y1+y,flag);
}
}
}
/***********************************************************************************
* 函数名称:LCD_Draw_Rectangle;
*
* 函数功能描述:以(x1,y1)和(x2,y2)为对角点画矩形;
*
* 输入参数:BYTE类型坐标x1,y1,x2,y2; bool类型标识flag;
*
* 返回数据:none;
*
* 注意: none;
************************************************************************************/
void LCD_Draw_Rectangle(unsigned char x1,y1,x2,y2,flag)
{
LCD_Draw_line(x1,y1,x2,y1,flag);
LCD_Draw_line(x1,y1,x1,y2,flag);
LCD_Draw_line(x2,y1,x2,y2,flag);
LCD_Draw_line(x1,y2,x2,y2,flag);
}
/***********************************************************************************
* 函数名称:LCD_Draw_FillRectangle;
*
* 函数功能描述:以(x1,y1)和(x2,y2)为对角点画矩形实体;
*
* 输入参数:BYTE类型坐标x1,y1,x2,y2; bool类型标识flag;
*
* 返回数据:none;
*
* 注意: none;
************************************************************************************/
void LCD_Draw_FillRectangle(unsigned char x1,y1,x2,y2,flag)
{
unsigned char data i;
for (i=x1; i<=x2; i++)
LCD_Draw_line(i,y1,i,y2,flag);
}
/***********************************************************************************
* 函数名称:Draw_dot;
*
* 函数功能描述:画点序列;
*
* 输入参数:none;
*
* 返回数据:none;
*
* 注意: none;
************************************************************************************/
void Draw_dot(void)
{
unsigned char x;
unsigned char y;
LCDC_DisFull(Clr);
x=0;
y=0;
while(1)
{
Delay_ms(10);
LCD_Draw_dot(x,y,1);
x+=2;
if(x>128)
{
y++;
x=0;
}
if(y>64)
{
LCDC_DisFull(Clr);
y=0;
}
key=GetKey();
if((key!=0xff)&&(key!=0x0a))
return;
}
}
/***********************************************************************************
* 函数名称:Draw_line;
*
* 函数功能描述:画过圆点的直线;
*
* 输入参数:none;
*
* 返回数据:none;
*
* 注意: none;
************************************************************************************/
void Draw_line(void)
{
unsigned char x;
unsigned char y;
LCDC_DisFull(Clr);
x=0;
y=0;
while(1)
{
Delay_ms(200);
LCDC_DisFull(Clr);
LCD_Draw_line(0,0,x,y,1);
y+=3;
if(y<63)
{
x=127;
}
if(y>63)
{
y=63;
x-=6;
if(x<=5)
{
y=0;
x=127;
LCDC_DisFull(Clr);
}
}
key=GetKey();
if((key!=0xff)&&(key!=0x0b))
return;
}
}
/***********************************************************************************
* 函数名称:Draw_Rectangle;
*
* 函数功能描述:画矩形;
*
* 输入参数:none;
*
* 返回数据:none;
*
* 注意: none;
************************************************************************************/
void Draw_Rectangle(void)
{
unsigned char x;
unsigned char y;
LCDC_DisFull(Clr);
x=0;
y=0;
while(1)
{
Delay_ms(200);
LCD_Draw_Rectangle(63-x,31-y,63+x,31+y,1);
x+=4;
y+=2;
if(x>64)
{
x=0;
LCDC_DisFull(Clr);
}
if(y>32)
{
LCDC_DisFull(Clr);
y=0;
}
key=GetKey();
if((key!=0xff)&&(key!=0x0c))
return;
}
}
/***********************************************************************************
* 函数名称:Draw_FillRectangle;
*
* 函数功能描述:画实心矩形;
*
* 输入参数:none;
*
* 返回数据:none;
*
* 注意: none;
************************************************************************************/
void Draw_FillRectangle(void)
{
unsigned char x;
unsigned char y;
LCDC_DisFull(Clr);
x=0;
y=0;
while(1)
{
Delay_ms(200);
LCDC_DisFull(Clr);
LCD_Draw_FillRectangle(63-x,31-y,63+x,31+y,1);
x+=4;
y+=2;
if(x>64)
{
x=0;
LCDC_DisFull(Clr);
}
if(y>32)
{
LCDC_DisFull(Clr);
y=0;
}
key=GetKey();
if((key!=0xff)&&(key!=0x0d))
return;
}
}
/***********************************************************************************
* 函数名称:Draw_circle;
*
* 函数功能描述:画同心圆;
*
* 输入参数:none;
*
* 返回数据:none;
*
* 注意: none;
************************************************************************************/
void Draw_circle(void)
{
unsigned char x;
LCDC_DisFull(Clr);
x=0;
while(1)
{
Delay_ms(200);
LCD_Draw_circle(63,31,x,1);
x+=3;
if(x>32)
{
x=0;
LCDC_DisFull(Clr);
}
key=GetKey();
if((key!=0xff)&&(key!=0x0e))
return;
}
}
/************************************************************************************
* 文件结束
************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -