arm之LCD

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>

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 <x+w; 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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值