Linux 外设驱动 应用 2 KEY 按键实验

2 按键

2.1 按键介绍

按键是指轻触式按键开关,也称之为轻触开关。按键开关是一种电子开关,属于电子元器件类,最早出现在日本,称之为:敏感型开关,使用时以满足操作力的条件向开关操作方向施压开关功能闭合接通,当撤销压力时开关即断开,其内部结构是靠金属弹片受力变化来实现通断的。

2.2 硬件接口

平台有 4 个按键,每个按键接一个 IO 引脚,通过外部 IO 的高低来获取按键。

在这里插入图片描述

2.3 应用代码

int main(int argc,char *argv[])
{int keys_fd;char ret[2];struct input_event t;keys_fd = open(argv[1], O_RDONLY);//打开按键设备,由终端输入if(keys_fd<=0)//打开失败处理{printf("open %s device error!\n",argv[1]);return 0;}while(1){if(read(keys_fd,&t,sizeof(t))==sizeof(t)){//读取输入设备if(t.type==EV_KEY) //其中为按键if(t.value==0 || t.value==1) //按下或者抬起printf("key %d %s\n",t.code,(t.value)?"Pressed":"Released");//打印}}
close(keys_fd);
return 0;
}

2.4 运行代码

在Linux系统中,input_event结构体用于描述输入事件,其中包括时间、事件类型、事件码和事件值。‌ input_event结构体的定义如下:

struct input_event {struct timeval time;__u16 type;__u16 code;__s32 value;
};

time:记录事件发生的时间。
type:事件的类型,如EV_KEY表示键盘事件。
code:事件的代码,对于键盘事件,这代表按键的键值。
value:事件的数值,对于按键事件,通常0表示键释放,1表示键按下,2表示自动重复。

‌键盘键值与input_event结构体中的code字段对应。‌ 例如,ESC键、F1-F12键、方向键等都有对应的键值。这些键值在内核源码的input.h文件中定义。以下是一些常见的键盘键值:

ESC键:0x01
F1键:0x70
F2键:0x71
F3键:0x72
F4键:0x73
方向上键:0x26
方向下键:0x28
方向左键:0x25
方向右键:0x27

全部键值的值:

键名 值(十进制)
ESC 1
F1 59
F2 60
F3 61
F4 62
F5 63
F6 64
F7 65
F8 66
F9 67
F10 68
F11 87
F12 88
` ~ 41
1 ! 2
2 @ 3
3 # 4
4 $ 5
5 % 6
6 ^ 7
7 & 8
8 * 9
9 ( 10
0 ) 11

  • _ 12
  • = 13
    Backspace(退格键) 14
    Tab 15
    q Q 16
    w W 17
    e E 18
    r R 19
    t T 20
    Y y 21
    u U 22
    i I 23
    o O 24
    p P 25
    [ { 26
    ] } 27
    Enter(回车键) 28
    CapsLock 58
    a A 30
    s S 31
    d D 32
    f F 33
    g G 34
    h H 35
    j J 36
    k K 37
    l L 38
    ; : 39
    ’ " 40
    \ | 43
    Left_shift(左上档键) 42
    z Z 44
    x X 45
    c C 46
    v V 47
    b B 48
    n N 49
    m M 50
    , < 51
    . > 52
    / ? 53
    Right_shift(右上档键) 54
    Left_ctrl(左Ctrl键) 29
    左Super键(windows键) 125
    Left_alt(左alt键) 56
    space(空格键) 57
    Right_alt(右alt键) 100
    右Super键(windows键) 126
    菜单键 127
    Right_ctrl(右Ctrl键) 97
    Print Screen键 99
    ScrollLock键 70
    PauseBreak键 119
    Insert 110
    Home 102
    PageUp 104
    Delete 111
    End 107
    PageDown 109
    方向键上 103
    方向键下 108
    方向键左 105
    方向键右 106
    NumLock 69
    / (小键盘) 98
    * (小键盘) 55
    - (小键盘) 74
    + (小键盘) 78
    Enter(小键盘) 96
    . (小键盘) 83
    0 (小键盘) 82
    1 (小键盘) 79
    2 (小键盘) 80
    3 (小键盘) 81
    4 (小键盘) 75
    5 (小键盘)

76
6 (小键盘) 77
7 (小键盘) 71
8(小键盘) 72
9(小键盘) 73

2.4.1 查看 key 为第几个输入设备,找到 Name="gpio-keys"这一栏,可以看到 Handlers 为 event4

root@imx8mmevk:/mnt/SRC/exp/04_module/02_keys# cat /proc/bus/input/devices
I: Bus=0019 Vendor=0001 Product=0001 Version=0100
N: Name="gpio-keys"
P: Phys=gpio-keys/input0
S: Sysfs=/devices/platform/gpio-keys/input/input6
U: Uniq=
H: Handlers=kbd event4
B: PROP=0
B: EV=3
B: KEY=108000000000 10000002

2,4,2 运行程序./key /dev/input/event4

root@imx8mmevk:/mnt/SRC/exp/04_module/02_keys# ./key /dev/input/event4
key 103 Pressed
key 103 Released
key 108 Pressed
key 108 Released
key 1 Pressed
key 1 Released
key 28 Pressed
key 28 Released

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/56517.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

东方通 TongWebV7 Docker 部署与 Spring Boot 集成指南

东方通 TongWebV7 Docker 部署与 Spring Boot 集成指南 文章目录 东方通 TongWebV7 Docker 部署与 Spring Boot 集成指南一 TongWeb V7二 Spring Boot JAR 配置文件三 修改 maven 依赖四 docker compose 启动项目五 查看 docker 信息 本文详细讲解了如何在 Docker 环境中将东方…

【笔记】Day2.5.1查询运费模板列表(未完

&#xff08;一&#xff09;代码编写 1.阅读需求&#xff0c;确保理解其中的每一个要素&#xff1a; 获取全部运费模板&#xff1a;这意味着我需要从数据库中查询所有运费模板数据。按创建时间倒序排序&#xff1a;这意味着查询结果需要根据模板的创建时间进行排序&#xff0…

嵌入式学习-IO进程-Day02

嵌入式学习-IO进程-Day02 标准IO函数接口 fread&#xff0c;fwrite 文件指针偏移函数 文件IO 概念 文件IO的特点 文件描述符 文件IO的函数接口 open 打开文件 close 关闭文件 read 读函数 write 写函数 lseek 移动文件指针 标准IO和文件IO对比 目录操作函数 opendir 打开目录 c…

套接字Socket

套接字 在网络中通过 IP 地址来表示和区别不同的主机&#xff0c;通过端口号来标识和区分一台主机中的不同应用进程&#xff0c;端口号拼接到 IP 地址即构成套接字 Socket。在网络中采用发送方和接收方的套接字来识别端点。套接字&#xff0c;实际上是一个通信端点&#xff0c…

C语言初阶小练习2(三子棋小游戏的实现代码)

这是C语言小游戏三子棋的代码实现 test.c文件是用来测试的部分 game.h文件是用来声明我们说写出的函数 game.c文件是用来编写我们的功能实现函数部分 1.test.c #define _CRT_SECURE_NO_WARNINGS 1 #include"game.h" void menu() {printf("***************…

使用 cmake 在 x86 系统中为 arm 系统交叉编译程序

原理&#xff1a; 在 x86 系统里使用交叉编译工具链&#xff08;arm 版 gcc/g&#xff09;编译程序&#xff0c;然后放在 arm 系统里运行。 arm 版本 使用 lscpu 查看 cpu 架构 版本说明armv732 bitarmv8/arrch6464 bit 安装交叉编译工具链 # 针对 armv7 sudo apt install…

库卡ForceTorqueControl(一)

1. 功能说明 ForceTorqueControl 是一个可后载入的备选软件包&#xff0c;具有下列功能&#xff1a; 执行取决于测得的过程力和力矩的运动 遵守过程力和力矩&#xff0c;不取决于工件的位置和尺寸 遵守加工工件期间复杂的过程力变化 沿着根据测得的过程力编程的轨迹调整速度 通…

MySQL上新:MySQL 9.1.0发布

MySQL 9.1.0 已经于 2024 年 10 月 15 日正式发布。这是一个创新版本&#xff0c;增加了一些新功能、修复了一些问题并且弃用了一些旧功能。 同时发布的还有 MySQL 8.4.3 以及 MySQL 8.0.40。 以下是该版本包含的部分更新。 原子DDL 在该版本之前&#xff0c;虽然 CREATE DAT…

【高分论文密码】AI赋能大尺度空间模拟与不确定性分析及数字制图

随着AI大语言模型的广泛应用&#xff0c;大尺度空间模拟预测与数字制图技术在不确定性分析中的重要性日益凸显。这些技术已经成为撰写高分SCI论文的关键工具&#xff0c;被誉为“高分论文密码”。大尺度模拟技术能够从不同的时空尺度揭示农业生态环境领域的内在机理和时空变化规…

JAVA开源项目 课程智能组卷系统 计算机毕业设计

本文项目编号 T 009 &#xff0c;文末自助获取源码 \color{red}{T009&#xff0c;文末自助获取源码} T009&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 老…

【JAVA毕业设计】基于Vue和SpringBoot的医院电子病历管理系统

本文项目编号 T 008 &#xff0c;文末自助获取源码 \color{red}{T008&#xff0c;文末自助获取源码} T008&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 医…

Focal Loss

Focal Loss Kullback-Leibler Divergence&#xff08;相对熵&#xff09;NLL LossCross Entropy LossBalanced Cross Entropy LossFocal Loss应用场景&#xff1a;1、车道检测与分类 Kullback-Leibler Divergence&#xff08;相对熵&#xff09; KL散度&#xff08;Kullback-L…

python自动化办公实例(使用openpyxl、os处理统计Excel表中的数据并将其合并)

源数据格式 以其中一个表格为例 可以看到表中数据比较杂乱且并没有我们想要的数据、指标&#xff08;如一等奖、二等奖的数量&#xff09;不利于下一步数据的分析。所以我们需要手动对数据进行一些处理&#xff0c;大致格式如下&#xff1a; 数据处理格式 这里的手动处理可以…

图像的空域处理实验作业

# 在绘图中显示中文字体&#xff0c;而非乱码 from pylab import mpl mpl.rcParams["font.sans-serif"] ["SimHei"]import cv2 import matplotlib.pyplot as plt import numpy as np1 绘制伽马变换的函数图像&#xff0c;并导入一张图像&#xff0c;对其进…

基础算法(6)——模拟

1. 替换所有的问号 题目描述&#xff1a; 算法思路&#xff1a; 从前往后遍历整个字符串&#xff0c;找到问号之后&#xff0c;尝试用 a ~ z 的每一个字符替换即可 注意点&#xff1a;需考虑数组开头和结尾是问号的边界情况 代码实现&#xff1a; class Solution {public …

《深度学习》OpenCV FisherFaces算法人脸识别 原理及案例解析

目录 一、FisherFaces算法 1、什么是FisherFaces算法 2、原理 3、特点 4、算法步骤 1&#xff09;数据预处理 2&#xff09;特征提取 3&#xff09;LDA降维 4&#xff09;特征投影 5&#xff09;人脸识别 二、案例解析 1、完整代码 运行结果&#xff1a; 一、Fish…

Java 深度优先搜索

深度优先搜索&#xff08;Depth-First Search, DFS&#xff09;是一种用于遍历或搜索树或图的算法。在Java中&#xff0c;可以使用递归或迭代的方法来实现DFS。下面我将分别介绍这两种实现方式。 递归实现 递归实现通常更为直观和简洁。在递归方法中&#xff0c;我们会使用一…

[Java基础] 流程控制

[Java基础] 运算符 [Java基础] 基本数据类型 [Java基础] Java HashMap 的数据结构和底层原理 目录 基本语法 条件语句 if 语句 if-else 语句 switch 语句 循环语句 for 循环 while 循环 do-while 循环 跳转语句 break 语句 continue 语句 return 语句 最佳实践…

嵌入式基础 -- SDIO协议

SDIO 硬件、协议与 Linux 驱动技术文档 1. SDIO 简介 SDIO&#xff08;Secure Digital Input Output&#xff09;协议是SD存储卡的物理接口扩展&#xff0c;允许通过SD总线连接和控制各种I/O设备&#xff0c;如Wi-Fi、蓝牙、GPS模块等。SDIO协议在标准的SD协议基础上扩展&…

【题解】【记忆化递归】——Function

【题解】【记忆化递归】——Function Function题目描述输入格式输出格式输入输出样例输入 #1输出 #1 提示数据规模与约定 1.思路解析2.AC代码 Function 通往洛谷的传送门 题目描述 对于一个递归函数 w ( a , b , c ) w(a,b,c) w(a,b,c) 如果 a ≤ 0 a \le 0 a≤0 或 b ≤…