您的位置:首页 > 其它

arm之LCD

2017-06-20 17:24 106 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  arm