嵌入式 在开发板上画圆

嵌入式 在开发板上画圆

一、简述

         记--在开发板(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白色

猜你喜欢

转载自blog.csdn.net/nanfeibuyi/article/details/81584155