文件IO6(开机动画的显示原理/触摸屏的原理与应用)
开机动画的显示原理
⦁ 基本原理
一般电子产品在开机之后都会加深用户印象,一般开机之后都会播放一段开机动画(视频、GIF…),不管哪种采用形式,内部原理都是相同,都是利用人类的眼睛的视觉暂留效应实现的,可以让用户看到画面是动态的。

如果打算实现画面的动态显示则需要确保每秒钟在用户眼睛的前面连续播放若干帧图像,帧率至少是24HZ,也被称为帧刷新率 FPS ,作为开发者而言,需要准备大量的素材,本次就以开机动画为例,实现程序设计。
⦁ 准备素材


此时可以看到生成的jpg图片的命名: Frame 0 .jpg 也就是编号范围是0 ~ 81
⦁ 程序设计

⦁ 下载调试
注意:动态图的相关素材必须也传输到开发板,由于tftp不支持传输文件夹,建议采用scp命令,另外,程序中的素材的路径必须完整。
触摸屏的原理与应用
⦁ 基本概念
项目实现过程中为了提高用户体验,一般都需要实现人机交互,常见的人机交互的方式有触摸按键、触摸屏、语音识别等方案,其中最常用的就是触摸屏。

在Linux系统下连接操作系统的输入设备不止一种,可能是一个键盘、一个 USB 鼠标或者是一块触摸屏,甚至是一个游戏机摇杆,Linux在处理这些复杂多样的输入设备时,采用的办法就是用中间层来屏蔽各种细节,所以就设计出输入子系统(输入设备的集合)来管理这些输入设备。

⦁ 驱动原理
在Linux内核中,对输入设备的使用,实际上运用了3大块来管理,它们分别是所谓的输入设备驱动层、输入子系统核心层,以及事件触发层。
(1) 设备驱动层提供对硬件各寄存器的读写访问和将底层硬件对用户输入访问的响应转换为标准的输入事件,再通过核心层提交给事件处理层。
(2) 子系统核心层对下提供了设备驱动层的编程接口,对上又提供了事件处理层的编程接口。
(3) 事件处理层就为我们用户空间的应用程序提供了统一访问设备的接口和驱动层提交来的事件处理。所以这使得我们输入设备的驱动部分不在用关心对设备文件的操作,而是要关心对各硬件寄存器的操作和提交的输入事件。

举例:当手指在屏幕上滑动的时候,驱动层中的触摸屏驱动会源源不断地产生触摸屏相关数据,并向上递送给内核输入子系统,输入子系统进一步将这些信息规整为统一的结构体,并借助事件触发层发往对应的设备节点文件,至此,应用程序即可从这些设备节点文件读取相关信息。
注意:底层驱动产生的设备数据与上层应用读取设备数据是两个完全异步的过程,彼此之间是没有耦合和约束的,例如:当底层驱动产生的触摸屏坐标信息比应用层读取的速度要快时,应用程序将会丢失一部分坐标信息。
⦁ 硬件信息
在最靠近应用程序的事件触发层上内核所获知的各类输入事件,比如键盘被按了一下、触摸屏被滑了一下等,都将被统一封装在一个叫做input_event的输入信息结构体当中,该结构体在名字叫做input.h的头文件中定义,头文件路径为/usr/inlucde/linux/input.h。


(1) type

(2) code
用于对事件的类型作进一步的描述。比如:当发生EV_KEY事件时,则可能是键盘被按下了,那么究竟是哪个按键被按下了呢?此时查看code就知道了。当发生EV_REL事件时,也许是鼠标动了,也许是滚轮动了。这时可以用code的值来加以区分。

(3) value
当code都不足以区分事件的性质的时候,可以用value来确认。比如由EV_REL和REL_WHEEL确认发生了鼠标滚轮的动作,但是究竟是向上滚还是向下滚呢?再比如由由EV_KEY和KEY_F确认了发生键盘上F键的动作,但究竟是按下呢还是弹起呢?这时都可以用value值来进一步判断。

⦁ 设备文件
触摸屏属于字符设备,所以在开发板的Linux系统已经默认把触摸屏的驱动程序安装在Linux内核中,当触摸屏的驱动安装完成后,系统内核会自动在开发板的Linux系统的 /dev目录生成对应的设备文件,所以触摸屏的设备文件的路径:/dev/input/event0

⦁ 程序设计

注意:当前的开发板的触摸屏的坐标范围是 X轴:0 ~ 1023 Y轴: 0 ~ 599 所以也就是触摸屏的坐标范围是(1024,600),所以需要等比例缩小为LCD屏的(800,480)大小。


相关文章:
文件IO6(开机动画的显示原理/触摸屏的原理与应用)
开机动画的显示原理 ⦁ 基本原理 一般电子产品在开机之后都会加深用户印象,一般开机之后都会播放一段开机动画(视频、GIF…),不管哪种采用形式,内部原理都是相同,都是利用人类的眼睛的视觉暂留效应实现的…...
低代码开发能否取代后端?深度剖析与展望-优雅草卓伊凡
低代码开发能否取代后端?深度剖析与展望-优雅草卓伊凡 在科技迅猛发展的当下,软件开发领域新思潮与新技术不断涌现,引发行业内外热烈探讨。近日,笔者收到这样一个颇具争议的问题:“低代码开发能取代后端吗?…...
反向代理断线重连优化
背景 1. 部分时候,反向代理因为路由重启,或者其他断网原因,等网络恢复后,无法对隧道重连。 2. 增加了心跳机制 在DEBUG调试过程中,发现禁用网卡后,在反向代理重连时候,服务器没有释放掉占用的…...
NLP中的“触发器”形式
在自然语言处理(NLP)中,触发器的设计更加依赖于文本特征,而非视觉特征。以下是NLP中常见的触发器类型及其实现方式: 1. 特定词汇或短语 定义:在文本中插入特定的单词、短语或符号。示例: 罕见…...
OJ 基础 | 输入处理
目录 一行输入一个整数: 一行输入2个整数 第一行有一个整数 m。接下来 m 行,每行两个整数 u,v : 一行输入一个整数: Nint(input()) #int类型 numinput() #字符串,一般用于需要去切片/遍历或者处理输入的数据 一行…...
array和list在sql中的foreach写法
在MyBatis中,<foreach>标签用于处理集合或数组类型的参数,以便在SQL语句中动态生成IN子句或其他需要遍历集合的场景。以下是array和list在SQL中的<foreach>写法总结。 <if test"taskIds ! null and taskIds.length > 0">…...
SDP(一)
SDP(Session Description Protocol)会话描述协议相关参数 Session Description Protocol Version (v): 0 --说明:SDP当前版本号 Owner/Creator, Session Id (o): - 20045 20045 IN IP4 192.168.0.0 --说明:发起者/创建者 会话ID,那么该I…...
STM32 模块化开发指南 · 第 2 篇 如何编写高复用的外设驱动模块(以 UART 为例)
本文是《STM32 模块化开发实战指南》的第 2 篇,聚焦于“串口驱动模块的设计与封装”。我们将从一个最基础的裸机 UART 初始化开始,逐步实现:中断支持、环形缓冲收发、模块接口抽象与测试策略,构建一个可移植、可扩展、可复用的 UART 驱动模块。 一、模块化 UART 的设计目标…...
【基于 Vue3 的原子化时间线组件实现与应用】
基于 Vue3 的原子化时间线组件实现与应用 在前端开发中,我们经常需要使用时间线组件来展示一系列按时间顺序排列的事件。许多项目常常重复开发类似功能,导致代码冗余且维护成本高。为解决这一问题,我们设计了一个高度可定制的原子化时间线组…...
小推桌面tv-小推电视桌面好用吗
想知道小推电视桌面是否好用?来一探究竟!小推电视桌面安全稳定,且支持自由定制。它有影视、壁纸、酒店等多种主题,适配不同场景。内置小推语音助手,还支持第三方语音助手,操作便捷。自带正版影视搜索功能&a…...
深入解析嵌入式Linux系统架构:从Bootloader到用户空间 - 结合B站视频教学
B站视频链接,请多多关注本人B站: 📌 Yocto项目实战教程:第二章 视频讲解 目录 第2章 Linux系统架构 2.1 GNU/Linux2.2 Bootloader2.3 内核空间2.4 用户空间 总结 第2章 Linux系统架构 {#linux系统架构} 嵌入式Linux系统是Linux内核的精简版…...
Asp.NET Core WebApi 配置文件
在 ASP.NET Core Web API 中,配置文件(如 appsettings.json)是管理应用程序设置的核心部分。ASP.NET Core 提供了一套灵活的配置系统,允许开发者从多种来源加载配置数据,并根据需要使用这些配置。 以下是关于如何在 A…...
pipe匿名管道实操(Linux)
管道相关函数 1 pipe 是 Unix/Linux 系统中的一个系统调用,用于创建一个匿名管道 #include <unistd.h> int pipe(int pipefd[2]); 参数说明: pipefd[2]:一个包含两个整数的数组,用于存储管道的文件描述符: pi…...
2025.04.10-拼多多春招笔试第三题
📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 03. 数字重排最大化问题 问题描述 LYA是一位专业的数字设计师。她手中有两个数字序列 s 1 s_1...
Vue.js组件安全开发实战:从架构设计到攻防对抗
目录 开篇总述:安全视角下的Vue组件开发新范式 一、Vue.js组件开发现状全景扫描 二、安全驱动的Vue组件创新架构 三、工程化组件体系构建指南 四、深度攻防对抗实战解析 五、安全性能平衡策略 结语:安全基因注入前端开发的未来展望 下期预告&…...
质因数之和-蓝桥20249
题目: 代码:无脑直接根据题目,一步步操作就行 #include <iostream> using namespace std;int gcd(int a,int b){if(b0) return a;return gcd(b,a%b); }bool exist_gcd(int a,int b){if(gcd(a,b)1) return false;return true; }bool is…...
《栈区、堆区和静态区:内存管理的三大支柱》
🚀个人主页:BabyZZの秘密日记 📖收入专栏:C语言 🌍文章目入 一、栈区(Stack)(一)栈区的定义(二)栈区的特点(三)栈区的使用…...
Rust Command无法执行*拓展解决办法
async fn run_cmd_async_out<I, S>(cmd: &str, args: I, timeout_s: u64, with_http_proxy: bool) -> Result<String> whereI: IntoIterator<Item S>,S: AsRef<OsStr>, {let mut cmd tokio::process::Command::new(cmd);// 让 sh 来运行命令&…...
AI 笔记 - 开源轻量级人脸检测项目
开源轻量级人脸检测项目 引言项目解析[libfacedetection 于仕琪](https://github.com/ShiqiYu/libfacedetection)[Ultra-Light-Fast-Generic-Face-Detector-1MB Linzaer](https://github.com/Linzaer/Ultra-Light-Fast-Generic-Face-Detector-1MB)[A-Light-and-Fast-Face-Detec…...
AI Agent vs 大模型
一句话概述 大模型是“超级学霸”,负责理解、思考和生成内容; AI Agent是“行动派秘书”,会调用工具和知识库,自主完成任务。 角色定位对比 大模型 智能体 核心 任务 回答、创作、推理、分析 规划、决策、执行、协调多工具 …...
go游戏后端开发32:自摸杠处理逻辑
当我们在自摸杠时,实际上在杠完之后,我们还需要进行一个删除操作。因此,我们需要在上面拷贝一个删除操作。由于这是自摸杠,所以这个地方需要删除四次。在这里,我们需要注意的是,自摸杠时,传过来…...
今日行情明日机会——20250411
今天缩量,上方压力依然在,外围还在升级,企稳还需要时日。 2025年4月11日A股涨停主要行业方向分析 一、核心主线方向 芯片(半导体) • 涨停家数:24家(当日最强方向)。 • 驱动逻辑&…...
【Linux】TCP_Wrappers+iptables实现堡垒机功能
规划 显示jumpserver的简单功能,大致的网络拓扑图如下 功能规划 & 拓扑结构 JumpServer(堡垒机)主要功能: 对访问目标服务器进行统一入口控制(例如 nginx、mysql、redis)。使用 iptables 做 NAT 转…...
git仓库中.git文件夹过大的问题
由于git仓库中存放了较大的文件,之后即使在gitignore中添加,也不会导致.git文件夹变小。 参考1 2 通过 du -d 1 -h查看文件大小 使用 git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail…...
ssh 登录报错集合(FQA)
1、使用root登录失败(远程主机不允许root登录) 问题:通过 ssh 连接远程主机( ubuntu )时报错,Permission denied 如下: 解决方法:确认root的登录密码没错,且可以正常与远…...
NO.89十六届蓝桥杯备战|动态规划-分组背包-混合背包-多维费用背包|通天之分组背包|排兵布阵|樱花|L国的战斗间谍(C++)
P1757 通天之分组背包 - 洛谷 因为⼀个组⾥⾯最多只能挑⼀个元素,所以我们就以⼀个组为单位。 状态表⽰: dp[i][j]表⽰从前i 组中挑选物品,总重量不超过j 的情况下,最⼤的价值。 那么dp[n][m]就是最终结果。状态转移⽅程&#x…...
NVIDIA H100 vs A100:新一代GPU架构性能对比分析
一、核心架构演进对比 Ampere架构(A100)采用台积电7nm工艺,集成540亿晶体管,配备6,912个CUDA核心和432个第三代Tensor Core,支持FP16、TF32和INT8精度计算。其显存子系统采用HBM2e技术,80GB版本带宽可…...
使用Mybatis时在XML中SQL高亮显示的方法
如图所示,上方的SQL代码很像是一个字符串,那么如何把上方的SQL改成和下方一样的SQL,使得IDEA可以识别SQL方言呢? 1.选中SQL中的一部分代码,此时左侧会出现一个黄色的灯泡图案,点击2.选择这个注入语言或者引用...
机场跑道异物检测数据集VOC+YOLO格式33793张31类别
数据集分辨率都是300x300,都是贴近地面拍摄,具体看图片 据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):33793 标注数量(xml文件…...
掌握C语言文件操作:从理论到实战指南
文件操作是C语言编程中不可或缺的一部分,它使得程序能够持久化存储数据,并在需要时高效读写。本文将从基础概念到实战技巧,系统讲解C语言文件操作的核心知识点,并结合代码示例帮助读者深入理解。 一. 为什么需要文件操作…...
