当前位置: 首页 > news >正文

在开发板上画出一个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;

}

http://www.lryc.cn/news/613009.html

相关文章:

  • Docker Buildx最佳实践:多架构镜像构建指南
  • P8250 交友问题
  • 如何理解“信号集是位掩码,每个bit代表一个信号”这句话?
  • QtC++ 中使用 qtwebsocket 开源库实现基于websocket的本地服务开发详解
  • UE5多人MOBA+GAS 39、制作角色上半身UI
  • Redis中间件(四):主从同步与对象模型
  • HarmonyOS系统 读取系统相册图片并预览
  • 基于django的非物质文化遗产可视化网站设计与实现
  • Jenkins全链路教程——Jenkins项目创建与基础构建
  • 2025年机械工程与自动化技术国际会议(ICMEAT 2025)
  • 单链表专题---暴力算法美学(1)(有视频演示)
  • Numpy科学计算与数据分析:Numpy数组索引与切片入门
  • 【论坛系统自动化功能测试报告】
  • 动手学深度学习(pytorch版):第一节——引言
  • 具身智能机器人 - Reachy Mini
  • MyCAT实战环节
  • 考研复习-计算机组成原理-第三章-存储系统
  • 微服务平台需求-部署一体化文档V1.0
  • cv2.threshold cv2.morphologyEx
  • Ubuntu 25.04 安装 pyenv 并配置多个 python 版本
  • Java并发与数据库锁机制:悲观锁、乐观锁、隐式锁与显式锁
  • 构建一个简洁优雅的 PHP 参数验证器 —— php-schema-validator
  • 金仓KingbaseES逻辑架构,与Oracle/MySQL对比
  • Python实现点云随机一致性(RANSAC)配准——粗配准
  • (Python)Python爬虫入门教程:从零开始学习网页抓取(爬虫教学)(Python教学)
  • 利用vue.js2X写前端搜索页面,express写后端API接口展现搜索数据
  • python数据结构与算法(基础)
  • DrissionPage自动化:高效Web操作新选择
  • 怎么在本地引入字体
  • 深入解析嵌套事务:原理与应用