热度 1
/****************************************对称法画圆的8个镜像点*****************************************/void CircleDot(unsigned char x,unsigned char y,char xx,char yy,unsigned char Color)//内部函数,对称法画圆的8个镜像点{Lcd_PutPixel((x+yy),(y+xx),Color);//第 1 个 8 分圆Lcd_PutPixel((x+xx),(y+yy),Color);//第 2 个 8 分圆Lcd_PutPixel((x-xx),(y+yy),Color);//第 3 个 8 分圆Lcd_PutPixel((x-yy),(y+xx),Color);//第 4 个 8 分圆Lcd_PutPixel((x-yy),(y-xx),Color);//第 5 个 8 分圆Lcd_PutPixel((x-xx),(y-yy),Color);//第 6 个 8 分圆Lcd_PutPixel((x+xx),(y-yy),Color);//第 7 个 8 分圆Lcd_PutPixel((x+yy),(y-xx),Color);//第 8 个 8 分圆}
/******************************************向LCD指定圆心坐标画一个半径为r的指定颜色的圆*******************************************/void Lcd_Circle(unsigned char x,unsigned char y,unsigned char r,unsigned char Color)//中点法画圆{//中点法画圆unsigned char xx,yy;char deltax,deltay,d;xx=0;yy=r;deltax=3;deltay=2-r-r;d=1-r;CircleDot(x,y,xx,yy,Color);//对称法画圆的8个镜像点while (xx {if (d<0){d+=deltax;deltax+=2;xx++;}else{d+=deltax+deltay;deltax+=2;deltay+=2;xx++;yy--;}CircleDot(x,y,xx,yy,Color);//对称法画圆的8个镜像点}}
/*******************************************向LCD指定起始坐标和结束坐标之间画一条指定颜色的直线********************************************/void Lcd_Line(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2,unsigned char Color){unsigned int x,y;unsigned int d_x,d_y;//d_x=x2-x1;d_y=y2-y1;int err=0;unsigned char temp=0;if(y2 {x=x1;y=y1;x1=x2;y1=y2;x2=x;y2=y;}d_y=y2-y1;if (d_y==0){if (x1>x2){x=x1;x1=x2;x2=x;}for (x=x1;x<=x2;x++)Lcd_PutPixel(x,y1,Color);}else{if(x2>=x1){temp=1;d_x=x2-x1;}elsed_x=x1-x2;x=x1;y=y1;Lcd_PutPixel(x,y,Color);if(temp&&(d_y<=d_x))while(x!=x2){if(err<0){x=x+1;err=err+(y2-y);}else{x=x+1;y=y+1;err=err+(y2-y)-(x2-x);}Lcd_PutPixel(x,y,Color);}else if(temp&&(d_y>d_x))while(y!=y2){d_x=x2-x;d_y=y2-y;if(err<0){x=x+1;y=y+1;err=err+d_y-d_x;}else{y=y+1;err=err-d_x;}Lcd_PutPixel(x,y,Color);}else if(!temp&&(d_y<=d_x))while(x!=x2){d_x=x-x2;d_y=y2-y;if(err<0){x=x-1;err=err+d_y;}else{x=x-1;y=y+1;err=err+d_y-d_x;}Lcd_PutPixel(x,y,Color);}else if(!temp &&(d_y>d_x)){while(y!=y2){d_x=x-x2;d_y=y2-y;if(err<0){x=x-1;y=y+1;err=err+d_y-d_x;}else{y=y+1;err=err-d_x;}Lcd_PutPixel(x,y,Color);}}}}
/***************************************************函数名称:LcdTimeX(uint8 Length,uint8 Angle)函数功能:计算指针的X坐标输入参数:circle_x:圆心横坐标Length :半径长度Angle :角度输出参数: x坐标****************************************************/unsigned char Lcd_TimeX(unsigned char circle_x,unsigned char Length,unsigned char Angle){unsigned char x;if((Angle>0) && (Angle<=15)){x = circle_x + Length * (sin(PI * Angle / 30));}else if(Angle > 15 && Angle <= 30){x = circle_x + Length * cos((PI * Angle) / 30 - (PI / 2 ));}else if(Angle > 30 && Angle <= 45){x = circle_x - Length * sin((PI * Angle) / 30- PI);}else{x = circle_x-Length * cos((PI * Angle) / 30 - ((3 * PI) / 2));}return x;}
/***************************************************函数名称:LcdTimeY(uint8 Length,uint8 Angle)函数功能:计算指针的Y坐标输入参数:circle_y:圆心纵坐标Length :半径长度Angle :角度输出参数: Y坐标****************************************************/unsigned char Lcd_TimeY(unsigned char circle_y,unsigned char Length,unsigned char Angle){unsigned char y;if((Angle>0) && (Angle<=15)){y = circle_y - Length * (cos(PI * Angle / 30));}else if(Angle > 15 && Angle <= 30){y = circle_y + Length * sin((PI * Angle) / 30 - (PI / 2 ));}else if(Angle > 30 && Angle <= 45){y = circle_y + Length * cos((PI * Angle) / 30- PI);}else{y = circle_y - Length * sin((PI * Angle) / 30 - ((3 * PI) / 2));}return y;}
void init_Point_Clock() //初始化表盘
{
unsigned char i;
Lcd_Circle(32,32,31,1);//画圆 圆心坐标(32,32) 半径31
for(i=0;i<60;i++)
{
if((i%5)==0) //画刻度
{
Lcd_Line(Lcd_TimeX(32,30,i),Lcd_TimeY(32,30,i),Lcd_TimeX(32,27,i),Lcd_TimeY(32,27,i),1);
}
}
}