ARM GEC6818 LCD繪圖 實心圓 三角形 五角星 任意區域矩形以及旗幟

要在ARM上實現LCD繪圖,可以按照以下步驟進行:

  1. 硬件初始化:初始化LCD控制器和相關引腳,配置時鐘、分辨率和顏色深度等。

  2. 內存映射:將LCD顯示區域映射到ARM的內存地址空間中,可以通過ARM的內存映射機制來實現。

  3. 繪圖函數:實現繪制基本圖形的函數,如點、線、矩形、圓等。可以通過計算像素坐標和調用ARM的內存寫入指令來實現。

  4. 圖像顯示:通過調用繪圖函數繪制圖像,然后將圖像數據寫入映射的內存地址中,刷新LCD控制器以顯示圖像。

不同的LCD控制器和ARM芯片可能會有一些細節上的差異,因此具體的實現步驟可能會有所不同。此外,還可以結合相關的圖形庫或操作系統提供的繪圖函數來簡化開發過程。

這里采用的是手動繪制+內存映射。

空心圓:

int draw_circle(int color, int x, int y, int r)
{int a, b, num;a = 0;b = r;//1.打開液晶屏int fd_lcd;fd_lcd = open("/dev/fb0",  O_RDWR);if(fd_lcd == -1 ){perror("open lcd "); //perror()會根據錯誤碼返回出錯的原因return -1;}printf("fd_lcd = %d\n", fd_lcd);	//2. 顯存映射,在應用程序中得到顯存的首地址int *lcd_base=NULL; //int---每個像素點占用內存是4Blcd_base = (int *)mmap(NULL,  800*480*4, PROT_READ|PROT_WRITE, MAP_SHARED,fd_lcd, 0);if(lcd_base == NULL)return -2;3.通過顯存的首地址,將顏色數據寫入顯存while(2 * b * b >= r * r)          // 1/8圓即可{draw_point(x + a, y - b,color,lcd_base); // 0~1draw_point(x - a, y - b,color,lcd_base); // 0~7draw_point(x - a, y + b,color,lcd_base); // 4~5draw_point(x + a, y + b,color,lcd_base); // 4~3draw_point(x + b, y + a,color,lcd_base); // 2~3draw_point(x + b, y - a,color,lcd_base); // 2~1draw_point(x - b, y - a,color,lcd_base); // 6~7draw_point(x - b, y + a,color,lcd_base); // 6~5a++;num = (a * a + b * b) - r*r;if(num > 0){b--;a--;}}//4.解除顯存映射munmap(lcd_base, 800*480*4);//5.關閉液晶屏close(fd_lcd);return 0;
}

實心圓

int draw_circle(int color, int Xpos, int Ypos, int Radius)
{//1.打開液晶屏int fd_lcd;fd_lcd = open("/dev/fb0",  O_RDWR);if(fd_lcd == -1 ){perror("open lcd "); //perror()會根據錯誤碼返回出錯的原因return -1;}printf("fd_lcd = %d\n", fd_lcd);	//2. 顯存映射

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/42741.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/42741.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/42741.shtml

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

相關文章

【系統架構設計師】八、系統工程基礎知識(系統工程|系統性能)

目錄 一、系統工程 1.1 系統工程的方法 1.1.1 霍爾的三維結構 1.1.2 切克蘭德方法 1.1.3 并行工程方法 1.1.4 綜合集成法 1.1.5.WSR 系統方法。 二、系統工程生命周期 2.1 系統工程生命周期7階段 2.2 生命周期方法 三、基于模型的系統工程(MBSE) 四、系統性能 4.1…

vb.netcad二開自學筆記6:第一個繪制線段命令

.net編寫繪制直線已完全不同于ActiveX的(VBA)的方式,過程更類似于arx程序,需要通過操作AutoCAD 數據庫添加對象!下面的代碼是在以前代碼基礎上添加了一個新myline命令。 AutoCAD 數據庫結構 myline命令代碼 Imports A…

YoloV9改進策略:Block改進|輕量實時的重參數結構|最新改進|即插即用(全網首發)

摘要 本文使用重參數的Block替換YoloV9中的RepNBottleneck,GFLOPs從239降到了227;同時,map50從0.989漲到了0.99(重參數后的結果)。 改進方法簡單,只做簡單的替換就行,即插即用,非常…

使用ndoe實現自動化完成增刪改查接口

使用ndoe實現自動化完成增刪改查接口 最近工作內容比較繁瑣,手里需要開發的項目需求比較多,常常在多個項目之間來回切換,有時候某些分支都不知道自己開發了什么、做了哪些需求, 使用手寫筆記的方式去記錄分支到頭來也是眼花繚亂&a…

vscode調試教程

VSCode調試 VSCode Debuggers VSCode使用launch.json進行細粒度的控制,可以啟動程序或將其附加到復雜的調試場景中 打開Run and Debug視圖Ctrl Shift D 點擊create a launch.json file,選擇C(GDB/LLDB) 會在工作目錄自動創建.vscode/launch.json文…

【MyBatis】MyBatis 理論 40 問(二)

《MyBatis 理論 40 問》包含以下 2 篇文章: MyBatis 理論 40 問(一)MyBatis 理論 40 問(二) MyBatis 理論 40 問(二) 21.如何獲取生成的主鍵?22.當實體類中的屬性名和表中的字段名不…

influxQL基本語法及常用的聚合函數

InfluxQL(Influx Query Language)是與InfluxDB緊密集成的一種SQL風格的語言,專為處理時間序列數據而設計。其基本語法結構清晰,方便開發者理解和實現。以下是對InfluxQL基本語法及常用聚合函數的簡單介紹: 目錄 一、…

Docker Dockerfile:構建與優化

Docker Dockerfile:構建與優化 簡介 Docker 是一種廣泛使用的容器化技術,它允許開發人員將應用程序及其依賴環境打包到一個可移植的容器中。Dockerfile 是 Docker 中用于自動化容器鏡像構建的腳本文件。本文將詳細介紹 Dockerfile 的基本結構、指令使用…

【Python】已解決:(MongoDB安裝報錯)‘mongo’ 不是內部或外部命令,也不是可運行的程序

文章目錄 一、分析問題背景二、可能出錯的原因三、錯誤代碼示例四、正確代碼示例及解決方案五、注意事項 已解決:(MongoDB安裝報錯)‘mongo’ 不是內部或外部命令,也不是可運行的程序 一、分析問題背景 在安裝和配置MongoDB時,有…

怎樣在 PostgreSQL 中優化對 UUID 數據類型的索引和查詢?

文章目錄 一、UUID 數據類型概述二、UUID 索引和查詢的性能問題三、優化方案(一)選擇合適的索引類型(二)壓縮 UUID(三)拆分 UUID(四)使用覆蓋索引(五)優化查詢…

一二三應用開發平臺應用開發示例(6)——代碼生成、權限配置、運行效果查看

生成代碼 完成配置工作,接下來就是見證奇跡的時刻~ 返回到實體列表,選中“文件夾”記錄,點擊“生成代碼”按鈕,提示成功后,在項目的output目錄下輸出了平臺基于配置模板產生的各層代碼,在原有后端的基礎上…

Pyserial設置緩沖區大小失敗

文章目錄 問題描述原因分析解決方案 問題描述 使用set_buffer_size()設置緩沖區大小后,buffer size仍為默認的4096 import time import serial ser serial.Serial(baudrate9600, timeout0.5) ser.port COM1 ser.set_buffer_size(rx_size8192) ser.open() while …

windows上部署python3.11

hello,大家好,我是一名測試開發工程師,至今已在自動化測試領域深耕9個年頭,現已將本人實戰多年的多終端自動化測試框架【wyTest】開源啦,在接下來的一個月里,我將免費指導大家使用wyTest,請大家…

歐拉函數.

性質1:質數n的歐拉函數為n-1. 性質2:如果p,q都是質數,那么? ( p ? q ) ? ( p ) ? ? ( q ) ( p ? 1 ) ? ( q ? 1 ) 證明:p,2p....q*p都不與q*p互質,q同理,所以總的不互質個…

JavaEE初階-網絡編程

文章目錄 前言一、UDP與TCP1.1 有連接與無連接1.2 全雙工1.3 可靠傳輸與不可靠傳輸1.4 面向子節流與面向數據報 二、UDP回顯服務器及客戶端編寫三、UDP字典服務器四、TCP回顯服務器及客戶端編寫五、數據序列化的方式5.1 基于行文本的方式傳輸5.2 基于XML的格式5.3 基于json5.4 …

STM32芯片系列與產品后綴解讀

一. 產品系列 STM32單片機是一系列基于ARM Cortex-M內核的32位微控制器,廣泛應用于嵌入式系統中。 STM32系列由STMicroelectronics(意法半導體)開發和生產,并憑借其靈活的設計、豐富的外設和強大的生態系統,成為嵌入式…

咬文嚼字:詞元是當今生成式人工智能失敗的一個重要原因

生成式人工智能模型處理文本的方式與人類不同。了解它們基于"標記"的內部環境可能有助于解釋它們的一些奇怪行為和頑固的局限性。從 Gemma 這樣的小型設備上模型到 OpenAI 業界領先的 GPT-4o 模型,大多數模型都建立在一種稱為轉換器的架構上。由于轉換器在…

Ubuntu24.04清理常見跟蹤軟件tracker

盡量一天一更,不刷視頻,好好生活 打開系統監視器,發現開機有個tracker-miner-fs-fs3的跟蹤程序,而且上傳了10kb的數據。 搜索知,該程序會搜集應用和文件的信息。 刪除tracker 顯示帶tracker的apt程序 sudo apt lis…

ThreadLocal的內存泄漏

什么是內存泄漏 程序在申請內存后,無法釋放已申請的內存空間在定義變量時,需要一段內存空間來存儲數據信息,而這段內存如果一直不被釋放,那么就會導致內存被占用光,而被占用的這個對象,一直不能被回收掉&am…

書生·浦語2.5開源,推理能力再創新標桿

導讀 2024 年 7 月 3 日,上海人工智能實驗室與商湯科技聯合香港中文大學和復旦大學正式發布新一代大語言模型書?浦語2.5(InternLM2.5)。相比上一代模型,InternLM2.5 有三項突出亮點: 推理能力大幅提升,在…