芯课堂 | 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.mzph.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>…