armのLCD


#include 
#include 
#include 
#include 
#include 
#include 

int *plcd = NULL;

/*
******************************************************
*           (x,y)      color  
******************************************************
*/
void lcd_draw_point(int x, int y, int color)
{
    *(plcd + x + 800*y) = color;
}

/*
******************************************************
*                  LCD  
******************************************************
*/
void lcd_WR_color()
{
    //   lcd     
    //    0,0         800*480   
    int x,y;
    for (y = 0; y < 480; y++)
    {
        for (x = 0; x < 800; x++)
            lcd_draw_point(x, y, 0xffffffff);
    }
}


/*
*******************************************************
*      (X0,Y0)           width,
*      hight,   color       
******************************************************
*/
void lcd_draw_rectangle(int x,int y,int w,int h,int color)
{
    int i,j;
    for (i= y; i < y+h; i++)  // 
    {
        for (j = x; j 
            lcd_draw_point(j, i, color);
    }
}


/*  
*******************************************************
*        (X0,Y0)           r    
******************************************************
*/
void lcd_draw_circle(int x,int y,int r,int color)
{
    int i,j;
    int s;
    for(i=0;i<480;i++)
    {
        s=0;
        for(j=0;j<800;j++)
        {
            s=(y-i)*(y-i)+(x-j)*(x-j);
            if(s>=((r-1)*(r-1))&&s<=((r+1)*(r+1)))
                lcd_draw_point(j, i, color);
        }
    }
}


/*
*******************************************************
*        (X0,Y0)           r    
******************************************************
*/
void lcd_draw_disc(int x,int y,int r,int color)
{
    int i,j;
    for(i=0;i<480;i++)
    {
        for(j=0;j<800;j++)
        {
            if((j-x)*(j-x)+(i-y)*(i-y)<=r*r)
                    lcd_draw_point(i, j, color);
        }
    }
}

/*
*******************************************************
*              
*******************************************************
*/
int main(int argc, char *argv[])
{
    //  LCD
    int fd;

    fd = open("/dev/fb0", O_RDWR);
    //if (fd == -1)
    if (-1 == fd)
    {
        perror("open lcd error");
        return 0;
    }

    //    
    //   LCD      ,plcd           ///  => plcd    lcd  0    
    //        plcd          lcd 
    plcd = mmap(NULL, 800*480*4,PROT_READ | PROT_WRITE,MAP_SHARED,fd,0);

    //  
    int color[480][800];

    //lcd         
     lcd_WR_color();


    //1、 lcd    50,50         50*50   
    lcd_draw_rectangle(50,50,50,50,0x00fef0ef);

    //2、 lcd    200,200     ,        80
    lcd_draw_disc(200,200,80,0xadbc00ff);

    //3、 lcd    400,200     ,        80
    lcd_draw_circle(400,400,80,0);
    close(fd);

    return 0;
}