在开发板上画出一个2048棋盘的矩阵

#include "head.h"

int* p lcd =NULL; //显示屏内存映射的起始地址

int g lcd width; //LCD显示屏的宽度

int g lcd high ; //LCD显示屏的高度

int g lcd bpp; //每个像素点所占的比特位

//int x:屏的X轴(宽度、列)坐标

//int y:屏幕y轴(高度、行)坐标

void lcd draw point (int x,int y,int color)

{

if(x>=0&&x<g lcd width && y>=0 &&y<g lcd high)

{

*(p lcd +g lcd width*y+x)=color;

}

}

//int x0:X轴的起始点坐标

//int y0:Y轴的起始点坐标

//int w:矩形宽度

//int h:矩形高度

void lcd draw rect(int x0,int y0,int w,int h,int color)

{

if(x0<0||y0<0||w<0||h<0)

{

printf("lcd draw rect param error!\n");

return;

}

if(x0+w->g lcd width)||(y0+h> g lcd high))

{

peintf("lcd draw rect parram error!\n");

return;

}

//画一个矩形

for (int y=y0);y<y0+h;y++) //行-->高-->y轴

{

for (int x=x0;x<x0+w;x++)//列-->宽-->x轴

{

lcd draw point(x,y,color);

}

}

//画出2048棋盘的矩阵

void draw matrix()

{

int x0=185,y0=25;

for (int i=0;i<4;i++)

{

for(int j=0;j<4;j++)

{

lcd draw rect(x0+j*110,y0+i*100,100,100,0x00A2E8);

}

}

//打开显示屏的驱动文件

int lcd=open("/dev/fb0,O RDWR);

if(lcd<0)

{

perror("open fb0 fail");

return -1;

}

//动态显示屏幕信息

struct fb var screeninfo info;

ioctl(lcd,FBIOGET VSCREENINFO ,&info);

g lcd width=info.xers;

g lcd high=info.xers;

g lcd bpp=info.bits per pixel;

//计算显示屏所有像素点的总字节数

int scree size=g lcd width*g lcd high*g lcd bpp/8;

//执行内存映射

p lcd =mmap(NULL,scree size,PROT WRITE ,MAP SHARED,lcd,0);

if (p lcd ==MAP FAILED)

{

perror("mmap fail");

return-1;

}

//清屏

lcd draw rect (0,0,g lcd width,g,lcd high,0xffffff);

//画棋盘

draw matrix();

close(lcd);

munmap(p lcd ,scree size);

return 0;

}