芯課堂 | UI Creator 物理鍵盤移植指南

圖片

LVGL提供輸入設備的種類一共有5種,分別是:touchpad(觸摸板)、mouse(鼠標)、keypad(鍵盤)、encoder(編碼器)、button(外部按鍵)。而基于UI Creator框架下我們已經提供了touchpad的輸入設備移植,但通常在我們的項目中,有多種輸入方式,除了比較常見的屏幕觸摸之外,還有矩陣按鍵和旋轉編碼器等輸入方式也較為常見,而鍵盤的移植和使用跟觸摸板有所區別,本篇旨在詳細說明如何基于UI Creator框架移植鍵盤的輸入設備。

RECRUIT

首先我們找到lv_porting/lv_port_indev.c文件打開,在靜態聲明中把關于keypad相關的聲明復制出來,如下圖所示:

圖片

接著在lv_port_indev_init(void) 函數中同樣把keypad相關的函數的復制出來,如下圖所示:

圖片

然后在靜態函數中同樣地把keypad相關函數復制出來,如下圖:

圖片

然后分別在keypad_init(void) 添加按鍵驅動的初始化和在keypad_get_key(void) 添加按鍵掃描代碼,這里以每個IO驅動一個按鍵為例,將GPIO配置為輸入、使能上拉,具體代碼如下:

圖片

然后編寫按鍵掃描代碼,與其定義的鍵值一一匹配

圖片

為了方便驗證,我們在keypad_read(…)中增加串口打印信息,來判斷我們獲取的鍵值是否正確

圖片

完成后編譯下載,我們看到串口調試助手中,打印信息符合預期,至此我們的鍵盤移植完畢。

圖片

值得注意的是,我們需要使用lv_group_t *group = lv_group_create() 創建組,并且使用lv_group_add_obj(group, obj)在組中增加控件,最后將這個組添加給輸入設備lv_indev_set_group(indev_keypad, group).

可以在界面的xxx_start(…)中創建組并添加控件,如下所示:

圖片

至此,我們完成了基于UI Creator的輸入設備之鍵盤(keypad)的移植,并且已經添加對應的組和控件。

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

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

相關文章

Tron 節點 性能壓測

文章目錄 一、代碼說明1.1 主要功能1.2 代碼示例1.3 代碼解釋1.4 執行流程 二、結果分析三、參數解釋3.1 numWorkers 和 numRequests 說明3.2 使用場景 四、注意事項 最近搭建了一個TRON節點,同事不相信我的自建節點比官方更靠譜,咱們給他使用golang寫一…

如何成為一個專業的AI產品經理?

可以找專業的老師帶。 可以找專業的內容學。 可以多遇挫折并快速學習,屢敗屢戰,筆者本人從業AI十年有余,吃了不少苦,有過很多或成功或失敗的經歷。 成為一個專業的AI產品經理需要一系列專業知識和技能的積累,以及在…

axios - 簡 單 的 請 求 模 板

import {message } from ant-design-vue import axios from axios import {useUserStore } from @/store/modules/user import router from @/routerconst instance = axios.create({baseURL: http://192.168.110.171:5201,timeout: 5000, })* 請求攔截器 insta

切換Ubuntu開機的主題

要將Ubuntu系統的啟動畫面(即開機時的顯示界面)從Lubuntu切換回原生的Ubuntu界面,可以按照以下步驟操作: 1. 安裝原生Ubuntu的plymouth主題 首先,確保你已經安裝了原生Ubuntu的plymouth主題。打開終端并運行以下命令…

基于Matlab卷積神經網絡(CNN)人臉識別系統

歡迎大家點贊、收藏、關注、評論啦 ,由于篇幅有限,只展示了部分核心代碼。 文章目錄 一項目簡介 二、功能三、系統四. 總結 一項目簡介 一、項目背景與意義 人臉識別技術作為計算機視覺領域的一個重要分支,已經廣泛應用于安全監控、身份驗證…

Python基礎知識歸納總結

目錄 一、線性表 總結 二、棧 三、隊列 四、哈希表 五、字符串 六、正則表達式 綜合示例 一、線性表 線性表(通常用列表表示)是一種按線性順序存儲元素的數據結構。 插入元素 (append, insert) 刪除元素 (remove, pop) 查找元素 (index) 更新…

FreeRTOS學習——FreeRTOS隊列(下)之隊列創建

本篇文章記錄我學習FreeRTOS隊列創建的知識。主要分享隊列創建需要使用的初始化函數、隊列復位函數。 需要進一步了解FreeRTOS隊列的相關知識,讀者可以參考以下文章: FreeRTOS學習——FreeRTOS隊列(上)_freertos 單元素隊列-CSDN博…

Spring、SpringMVC、SpringBoot 三者之間是什么關系

Spring、SpringMVC、SpringBoot 是三個獨立的框架,它們之間的關系是: 1. Spring是一個Java的輕量級應用框架,提供了基于IoC和AOP的支持,用于構建企業級應用。Spring有多 個模塊,包括 Spring Core、Spring Context、Spring JDBC、…

高質量油封選擇的重要性

在現代工業和機械系統中,油封的作用至關重要。它們不僅防止潤滑劑泄漏,還阻止污染物進入系統,從而保障設備的正常運行。選擇高質量的油封對于保證設備性能、延長使用壽命和降低維護成本至關重要。本文將從多個角度探討選擇高質量油封的重要性…

【hackmyvm】Slowman靶機

文章目錄 主機探測端口探測FTP匿名登錄 目錄探測hydra爆破mysql爆破zip------fcrackzip爆破密碼-----john提權 主機探測 ┌──(root?kali)-[/home/kali] └─# fping -ag 192.168.9.1/24 2>/dev/null 192.168.9.221 主機192.168.9.224 靶機端口探測 ┌──(roo…

送變電乙級資質申請攻略:關鍵步驟與注意事項

關鍵步驟: 工商注冊與資本核實: 確保企業已正式注冊,且注冊資金不少于100萬元人民幣,同時準備企業法人營業執照等相關證明文件。 人員配置與注冊: 根據資質要求,配置齊全合理的專業技術人員,包括…

【教程】Linux 安裝 kkFileView 文檔在線預覽項目 及優化

【教程】Linux 安裝 kkFileView 文檔在線預覽項目 官網 kkFileView - 在線文件預覽 (keking.cn) 安裝包 可以直接下載成品 也可以下載source 源碼 自己編譯 kkFileView 發行版 - Gitee.com 打開IDEA 然后先clear 再install 然后在 file-online-preview\server\target 目錄…

Nginx R31 doc-09-Serving Static Content 靜態內容

提供靜態內容 配置 NGINX 和 NGINX Plus 以提供靜態內容,使用類型特定的根目錄,檢查文件存在性,并進行性能優化。 本節介紹如何配置 NGINX 和 NGINX Plus 以提供靜態內容,如何定義搜索請求文件的路徑,如何設置索引文…

WordPress插件Disable WP REST API,可根據是否登錄來禁用REST API

前面跟大家分享了代碼版禁用WordPress REST API的方法(詳見『WordPress4.7以上版本如何禁用JSON REST API?』),不過有些站長不太敢折騰自己的網站代碼,那么建議試試這款Disable WP REST API,它可以&#xf…

小結5:朗讀練習第二段

五、朗讀練習2 2024-5-6始,5-14終,5-15寫。 我漸漸體會到一些朗讀的樂趣。但我還要考研,要寫作業、期末考試。如果是在大一該多好。我可以就這樣一天一天的寫下去,慢慢地有一些自己的作品,還能錄視頻發到b站上。 上一篇…

通過修改物理內存實現跨進程內存讀寫

習一下利用修改物理內存來跨進程內存讀寫 系統:win10 21h1 x64 編譯環境: vs2022 詳情見附錄 基礎 虛擬地址轉物理地址 虛擬地址也稱線性地址,一個線性地址進程的DirBase地址可以轉換成物理地址。先來看線性地址的含義 在x64體系中只實現了48位的virtu…

刀片式服務器的主要組件有哪些?

刀片式服務器是專門為特殊應用行業跟高密度計算環境設計的,是高可用高密度低成本的服務器平臺,刀片服務器這個名稱主要是根據產品的形狀,刀片式服務器的組成單元外形扁平,就像刀片一樣,整體設計的比較緊湊,…

C#和C++有什么區別?

C#和C都是廣泛使用的編程語言,但它們在設計理念、應用場景和語法上有許多顯著的區別。以下是一些關鍵區別的詳細介紹: 1. 設計理念和目的 C: 設計目的:C是一種面向系統編程和應用程序開發的語言,具有高效性和靈活性…

電工杯b題

雖然這次休息不打,但是看了一下,我比較傾向于機器學習灌水(doge

刷題之從前序遍歷與中序遍歷序列構造二叉樹(leetcode)

從前序遍歷與中序遍歷序列構造二叉樹 前序遍歷&#xff1a;中左右 中序遍歷&#xff1a;左中右 前序遍歷的第一個數必定為根節點&#xff0c;再到中序遍歷中找到該數&#xff0c;數的左邊是左子樹&#xff0c;右邊是右子樹&#xff0c;進行遞歸即可。 #include<vector>…