arm之LCD

来源:互联网 发布:颀乎其 编辑:程序博客网 时间:2024/05/21 09:58
#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;}