版主
  
主题
帖子
积分34308
阅读权限200
注册时间2008-11-22
最后登录1970-1-1
在线时间 小时
|
void OLED_circle(uchar X,uchar Y,uchar R,uchar R1,uchar G1,uchar B1)
{//Bresenham算法
uchar a,b;
int c;
unsigned char temp1,temp2;
temp1 = (B1<<3)|(G1>>3);
temp2 = (G1<<5)|R1;
a=0;
b=R;
c=3-2*R;
while (a<b)
{
OLED_dot(X+a,Y+b,temp1,temp2); // 7
OLED_dot(X-a,Y+b,temp1,temp2); // 6
OLED_dot(X+a,Y-b,temp1,temp2); // 2
OLED_dot(X-a,Y-b,temp1,temp2); // 3
OLED_dot(X+b,Y+a,temp1,temp2); // 8
OLED_dot(X-b,Y+a,temp1,temp2); // 5
OLED_dot(X+b,Y-a,temp1,temp2); // 1
OLED_dot(X-b,Y-a,temp1,temp2); // 4
if(c<0) c=c+4*a+6;
else
{
c=c+4*(a-b)+10;
b-=1;
}
a+=1;
}
if (a==b)
{
OLED_dot(X+a,Y+b,temp1,temp2);
OLED_dot(X+a,Y+b,temp1,temp2);
OLED_dot(X+a,Y-b,temp1,temp2);
OLED_dot(X-a,Y-b,temp1,temp2);
OLED_dot(X+b,Y+a,temp1,temp2);
OLED_dot(X-b,Y+a,temp1,temp2);
OLED_dot(X+b,Y-a,temp1,temp2);
OLED_dot(X-b,Y-a,temp1,temp2);
}
}
有C的,用过还行.. |
|