在開發板上畫出一個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.pswp.cn/diannao/94644.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/94644.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/94644.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

開源軟件與文化:從嬉皮士精神到數字時代的協同創新

開源軟件與文化&#xff1a;從嬉皮士精神到數字時代的協同創新 本文章由筆者使用提示詞驅動AI創作&#xff0c;并進行審閱。 文章目錄開源軟件與文化&#xff1a;從嬉皮士精神到數字時代的協同創新一、引言&#xff1a;開源的文化基因與技術革命二、開源軟件的文化根源&#x…

sigfillset 函數詳解

sigfillset 函數詳解 一、函數概念 sigfillset() 是 POSIX 信號處理中的核心函數&#xff0c;用于初始化并填充一個信號集&#xff0c;使其包含當前系統支持的所有信號。它是操作信號屏蔽字&#xff08;signal mask&#xff09;的基礎工具&#xff0c;常與 sigprocmask()、sigs…

Redis實戰(8) -- 分布式鎖Redission底層機制

介紹Redisson 是基于 Redis 實現的 Java 駐內存數據網格&#xff08;In-Memory Data Grid&#xff09;&#xff0c;提供了分布式和可擴展的 Java 數據結構&#xff0c;如分布式鎖、分布式集合等。【注意】如果需要重新實現redission&#xff0c;需要重新設置RedissionClient配置…

Linux基礎測試

linux基礎測試 一、環境準備 基礎環境信息 登錄用戶&#xff1a;root&#xff08;初始密碼&#xff1a;redhat&#xff09; 虛擬機啟動&#xff1a;登錄后執行 virt-manager&#xff0c;右鍵啟動 node1 和 node2 虛擬機 node1 信息&#xff1a;root 密碼為 redhat&#xf…

Linux中Docker Swarm實踐

一、部署前后分離使用你自己的自定義鏡像部署多個副本所有副本使用相同的配置和邏輯Nginx 做反向代理統一入口外部訪問形式如&#xff1a;http://your-domain/api/xxx1.1 建立私庫鏡像已構建并推送到可訪問的鏡像倉庫啟動 Docker Registry 容器docker run -d -p 5000:5000 --re…

Dash 中的 dcc.Clipboard 組件詳解:實現一鍵復制功能

dcc.Clipboard 是 Dash 核心組件庫中的一個實用工具&#xff0c;允許用戶將指定內容一鍵復制到系統剪貼板&#xff0c;極大提升用戶體驗。本文將深入解析該組件的用法、特性和實際應用場景。 一、組件核心功能與價值 dcc.Clipboard 解決了 Web 應用中的關鍵痛點&#xff1a; 簡…

初識C++類的6個默認成員函數

目錄 一、初始化和清理 二、拷貝復制 三、取地址重載 四、重要說明 五、注意事項 六、示例代碼 在C中&#xff0c;當一個類沒有顯式定義某些成員函數時&#xff0c;編譯器會自動生成6個默認成員函數。這些函數可以分為以下幾類&#xff1a; 一、初始化和清理 1、構造函數…

Spring事務失效場景?

題目詳細答案Spring事務失效的場景主要有以下幾種。非public方法使用Transactional場景描述&#xff1a;Spring事務管理是基于AOP實現的&#xff0c;而AOP對于JDK動態代理或CGLib動態代理只會代理public方法。如果事務方法的訪問修飾符為非public&#xff0c;SpringAOP無法正確…

1.電動汽車動力電池系統技術介紹與分類

1.電動汽車動力電池系統技術介紹與分類 1.1 電動汽車發展的三個 “黃金時代” 第一個黃金時代&#xff08;19 世紀末 - 20 世紀初&#xff09; 技術基礎&#xff1a;鉛酸蓄電池發明&#xff08;1859 年&#xff09;&#xff0c;推動電動三輪車&#xff08;1873 年&#xff09;、…

調用阿里云-阿里云百煉 AI

相關文檔&#xff1a;大模型服務平臺百煉控制臺 多輪對話&#xff1a;通義千問模型的多輪對話_大模型服務平臺百煉(Model Studio)-阿里云幫助中心 創建知識庫&#xff1a;大模型服務平臺百煉控制臺 創建智能體&#xff1a;大模型服務平臺百煉控制臺 點擊智能體發布后&#x…

Apache Flink:從實時數據分析到實時AI

引言歡迎踏上這段深入了解 Apache Flink 演進歷程的旅程&#xff0c;Apache Flink 是一項重新定義了實時數據處理的技術。本博客文章基于王峰&#xff08;阿里云開放數據平臺負責人、Apache Flink Committer&#xff09;在 2025 年 Flink Forward Asia 新加坡大會上的演講內容編…

oelove奧壹新版v11.7旗艦版婚戀系統微信原生小程序源碼上架容易遇到的幾個坑,避免遺漏參數白屏顯示等問題

oelove和 金媒我都用過一段時間&#xff0c;其中oelove 用的時間較多&#xff0c;也比較了解這個系統&#xff0c;這個系統比較不錯的就是小程序是原生的&#xff08;完全遵循微信開發者平臺規則非Uniapp&#xff09;開發的&#xff0c;原生小程序的特點就是兼容性好&#xff0…

行為模式-模板方法模式

定義&#xff1a;Define the skeleton of an algorithm in an operation,deferring some steps to subclasses.Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithms structure.&#xff08;定義一個操作中的算法的框架&a…

Java集合遍歷練習題

以下是10道難度遞增的集合遍歷練習題&#xff0c;涵蓋List、Set、Map的各種遍歷方式&#xff0c;包含解題思路、代碼實現和輸出結果&#xff1a; 練習題1&#xff1a;基礎遍歷 - ArrayList的for-each遍歷 題目&#xff1a;創建一個存儲5個字符串的ArrayList&#xff08;元素為&…

深度學習·ZegclipClip-RC

Zegclip 獲取圖像的特殊編碼&#xff1a;使用prompt tuning的技術&#xff0c;目的是減少過擬合和計算量。調整文本編碼&#xff1a;使用RD關系描述符&#xff0c;將每一個文本對應的[cls] token和圖像對應的[cls] token作哈密頓積&#xff0c;最后文本[cls]token形式化任務 文…

Taro 擴展 API 深度解析與實戰指南

Taro 擴展 API 深度解析與實戰指南 Taro 作為一款優秀的多端開發框架&#xff0c;提供了一系列強大的擴展 API&#xff0c;這些 API 極大地提升了開發效率和應用的可維護性。本文將深入解析 Taro 的擴展 API&#xff0c;并根據其功能特性進行分類講解&#xff0c;幫助開發者更…

容器之王--Docker的部署及基本操作演練

1.2 部署docker 1.2.1 容器工作方法1.2.2 部署第一個容器 官方站點&#xff1a;https://docs.docker.com/ 1.2.2.1 配置軟件倉庫 ]# cd /etc/yum.repos.d ]# vim docker.repo [docker] name docker-ce baseurl https://mirrors.aliyun.com/docker-ce/linux/rhel/9/x86_64/sta…

VFTO與局部放電-高壓設備絕緣系統的雙重挑戰與防護策略

目錄 引言VFTO的定義與形成機理VFTO對高壓設備絕緣系統的影響局部放電的危害與機制VFTO與局部放電的關聯性分析檢測與監測技術防護與抑制措施未來技術發展趨勢結論與展望引言 在現代電力系統中&#xff0c;超快速暫態過電壓&#xff08;Very Fast Transient Overvoltage, VFTO&…

Windows下Rust編碼實現MP4點播服務器

Rust編碼可以實現眾多簡潔、可靠、高效的應用&#xff0c;但語法邏輯要求嚴格&#xff0c;尤其是依賴庫的選擇調用&#xff0c;需要耐心堅持“推敲”。借助DeepSeek并反復編程調試和問答改進&#xff0c;可以最終得到完整有效的Rust編碼。下面分享Windows下Rust編碼實現MP4點播…

ubuntu-相關指令

1、串口1.1確認在系統中檢查設備是否正常加載&#xff0c;在終端輸入以下命令&#xff1a;way1&#xff1a;ll /dev | grep ttyUSB&#xff08;ll是LL的小寫&#xff09; way2&#xff1a;ll /dev | grep ttyACM way3&#xff1a;ll /dev | grep ttyCH343USB&#…