嵌入式 在开发板上画圆
程序员文章站
2022-05-21 09:38:05
...
嵌入式 在开发板上画圆
一、简述
记--在开发板(6818,cortex,800W*480H)上画出圆形。
源码打包:链接:https://pan.baidu.com/s/123gNBZecp_52lC-LZpUt5A 密码:zela
二、例子
1、 一个静态的圆。
主要测试代码
void lcd_draw_point(unsigned int x, unsigned int y, unsigned int color, unsigned int *lcd_ptr)
{
if( x<LCD_WIDTH && y<LCD_HEIGHT )
{
*(lcd_ptr+LCD_WIDTH*y+x) = color;
}
}
void lcd_draw_circle(unsigned r_x, unsigned int r_y, unsigned int radius, unsigned int *lcd_ptr)
{
unsigned int x_begin, y_begin;
if(r_x-radius<0)
{
r_x = radius;
}
if(r_y-radius<0)
{
r_y = radius;
}
for(y_begin=r_y-radius; y_begin<r_y+radius; y_begin++)
{
for(x_begin=r_x-radius; x_begin<r_x+radius; x_begin++)
{
if((r_x-x_begin)*(r_x-x_begin) + (r_y-y_begin)*(r_y-y_begin) < radius*radius)
{
lcd_draw_point(x_begin, y_begin, 0x0000ff00, lcd_ptr);
}
}
}
}
编译代码,在开发板运行:
代码效果
2、滚动的圆
主要测试代码:
void lcd_draw_run_circle(unsigned r_x, unsigned int r_y, unsigned int radius, unsigned int mv_speed, unsigned int *lcd_ptr)
{
int x_mv = mv_speed, y_mv = mv_speed;
unsigned int x_begin, y_begin;
if(r_x-radius<0)
{
r_x = radius;
}
if(r_y-radius<0)
{
r_y = radius;
}
while(1)
{
for(y_begin=r_y-radius; y_begin<r_y+radius; y_begin++)
{
for(x_begin=r_x-radius; x_begin<r_x+radius; x_begin++)
{
if((r_x-x_begin)*(r_x-x_begin) + (r_y-y_begin)*(r_y-y_begin) < radius*radius)
{
lcd_draw_point(x_begin, y_begin, 0x0000ff00, lcd_ptr);
}
}
}
if(r_x<radius || r_x>= LCD_WIDTH - radius)
{
x_mv = -x_mv;
}
r_x += x_mv;
if(r_y<radius || r_y>= LCD_HEIGHT - radius)
{
y_mv = -y_mv;
}
r_y += y_mv;
for(y_begin=0; y_begin<LCD_HEIGHT; y_begin++)
{
for(x_begin=0; x_begin<LCD_WIDTH; x_begin++)
{
if((r_x-x_begin)*(r_x-x_begin) + (r_y-y_begin)*(r_y-y_begin) >= radius*radius)
{
lcd_draw_point(x_begin, y_begin, WHITE_COLOR, lcd_ptr);
}
}
}
}
}
代码效果
三、补充
颜色:0xaarrggbb 其中aa是透明度,rr是红色,gg是绿色,bb蓝色。(三原色0~255)
0x00FFFFFF白色