#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;
}