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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ系列学习笔记(三)--工作队列模式

文章目录 一、工作队列模式原理二、工作队列模式实战1、抽取工具类2、消费者代码3、生产者代码4、查看运行结果 本文参考 尚硅谷RabbitMQ教程丨快速掌握MQ消息中间件rabbitmq RabbitMQ 详解 Centos7环境安装Erlang、RabbitMQ详细过程(配图) 一、工作队列模式原理 与简单模式相…

MySQL中查询语句的执行流程

文章目录 前言流程图概述最后 前言 你好&#xff0c;我是醉墨居士&#xff0c;今天我们一起探讨一下执行一条查询的SQL语句在MySQL内部都发生了什么&#xff0c;让你对MySQL内部的架构具备一个宏观上的了解 流程图 概述 对于查询语句的SQL的执行流程&#xff0c;主要可以分为…

架构师备考-背诵精华(系统架构评估)

系统架构评估是在对架构分析、评估的基础上&#xff0c;对架构策略的选取进行决策。它利用数学或逻辑分析技术&#xff0c;针对系统的一致性、正确性、质量属性、规划结果等不同方面&#xff0c;提供描述性、预测性和指令性的分析结果。 重要概念 敏感点&#xff1a;敏感点是…

信息学奥赛复赛复习18-CSP-J2022-01解密-二分答案、二分找边界、二分时间复杂度、二分求最小

PDF文档回复:20241017 1 P8814 [CSP-J 2022] 解密 [题目描述] 给定一个正整数 k&#xff0c;有 k 次询问&#xff0c;每次给定三个正整数 ni,ei,di&#xff0c;求两个正整数 pi,qi&#xff0c;使 nipiqi、eidi(pi−1)(qi−1)1 [输入格式] 第一行一个正整数 k&#xff0c;表…

单神经元建模:基于电导的模型[神经元结构、静息电位和等效电路]

文章目录 神经元结构、静息电位和等效电路神经元结构静息电位能斯特方程1. **描述浓度比的非线性关系**&#xff1a;2. **化学势与电势的关系**&#xff1a;3. **对称性**&#xff1a;4. **热力学与平衡**&#xff1a;总结&#xff1a; GHK方程Nernst方程和GHK方程的对比 等效电…

自动化检查网页的TDK,python+selenium自动化测试web的网页源代码中的title,Description,Keywords

首先&#xff0c;TDK是什么&#xff1f;对于新手小白来说&#xff0c;可能是懵逼的&#xff0c;所以这里给出一个官方的解说‌网页的TDK是指标题&#xff08;Title&#xff09;、描述&#xff08;Description&#xff09;和关键词&#xff08;Keywords&#xff09;的集合‌。这…

vue3播放m3u8格式hls监控流

1. 摄像头的hls监控流不同于普通m3u8的视频&#xff0c;video标签&#xff0c;iframe&#xff0c;videojs&#xff0c;vue-video-player无法解析 2. 解决办法 更换LivePlayer插件 官网https://www.liveqing.com/docs/manuals/LivePlayer.html#%E5%B1%9E%E6%80%A7-property 3…

Java项目-基于Springboot的招生管理系统项目(源码+说明).zip

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 开发运行环境 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、Vue、Mybaits Plus、ELementUI工具&#xff1a;IDEA/…

Tkinter -- python GUI学习与使用

前言 python GUI 目前pythonGUI有很多&#xff0c;哪一个最好&#xff1f; 先说说我选择的思路&#xff0c;我的目的是开发一个易用的软件&#xff0c;最重要的是稳定&#xff0c;并且碰到问题能够解决&#xff0c;因此&#xff0c;我的目标很明确&#xff0c;有比较大的用户群…

cefsharp79.1.360(Chromium 79.0.3945.130)支持H264视频播放-PDF预览 老版本回顾系列体验

一、关于此版本 版本:Cef 79.1.36/CefSharp 79.1.360/Chromium 79.0.3945.130/支持H264/支持PDF预览 支持PDF预览和H264推荐版本 63/79/84/88/100/111/125 运行环境需要 visual c++ 2015不支持xp/vista/2003/2008默认不支持h264(版权问题)支持打印预览 print preview已知问题…

【计算机网络原理】GBN,SR,TCP区别以及案例介绍

概念介绍 GBN、SR和TCP协议的主要区别在于它们的重传机制、确认方式以及缓存机制的不同。‌ GBN&#xff08;Go-Back-N&#xff09;协议在数据传输中&#xff0c;如果某个报文段没有被正确接收&#xff0c;那么从这个报文段到后面的所有报文段都需要重新发送。GBN采用累计应答…

UI自动化测试 —— web端元素获取元素等待实践!

前言 Web UI自动化测试是一种软件测试方法&#xff0c;通过模拟用户行为&#xff0c;自动执行Web界面的各种操作&#xff0c;并验证操作结果是否符合预期&#xff0c;从而提高测试效率和准确性。 目的&#xff1a; 确保Web应用程序的界面在不同环境(如不同浏览器、操作系统)下…

每日OJ题_牛客_[NOIP2001]装箱问题_01背包_C++_Java

目录 牛客_[NOIP2001]装箱问题_01背包 题目解析 C代码 Java代码 牛客_[NOIP2001]装箱问题_01背包 [NOIP2001]装箱问题 (nowcoder.com) 描述&#xff1a; 有一个箱子容量为V&#xff08;正整数&#xff0c;0 ≤ V ≤ 20000&#xff09;&#xff0c;同时有n个物品&…

面向对象进阶(上)(JAVA笔记第二十二期)

p.s.这是萌新自己自学总结的笔记&#xff0c;如果想学习得更透彻的话还是请去看大佬的讲解 目录 static修饰符静态变量静态方法 工具类工具类的使用例子第一题第二题 static注意事项继承关系建立继承关系的格式继承的好处及使用场景继承的特点继承体系的设计继承中类的三大要素…

redis集群介绍

Redis集群是一种分布式存储系统&#xff0c;它通过将数据分散存储在多个Redis节点上来实现可扩展性和高可用性。每个节点都是一个独立的Redis服务器实例&#xff0c;它们通过网络相互连接&#xff0c;共同协作以提供数据服务。 在Redis集群中&#xff0c;数据被划分为多个槽&am…

巧用这4款免费视频剪辑软件,帮你释放无限的创意。

可以免费使用的视频剪辑软件对于普通创作者而言还是比较重要的。因为越来越多的人渴望通过视频来表达自己的创意、分享生活点滴以及传达各种信息。专业的软件价格贵&#xff0c;操作复杂。简单免费的工具才是大多数人的选择&#xff0c;所以我要给大家介绍几个好用且免费的剪辑…

3D Slicer 教程三 ---- 坐标系

上篇提到3D Slicer 教程二 ---- 数据集-CSDN博客 3d slicer的坐标系与大多数医学影像软件使用LPS&#xff08;左、后、上&#xff09;坐标系统不太一样, 今天就仔细介绍一下坐标系的区别,复盘一下在影像处理中遇到的坐标问题(集中在坐标处理相关的,图像插值,图像处理, 定位线,翻…

服务器软件之Tomcat

服务器软件之Tomcat 服务器软件之Tomcat 服务器软件之Tomcat一、什么是Tomcat二、安装Tomcat1、前提&#xff1a;2、下载3、解压下载的tomcat4、tomcat启动常见错误4.1、tomcat8.0 startup报错java.util.logging.ErrorManager: 44.2、java.lang.UnsatisfiedLinkError 三、Tomca…

Ansible概述

目录 一、ansible简介 二、absible的特点 三、ansible的工作原理以及流程 四、ansible环境安装部署 五、ansible命令行模块 六、inventory 主机清单 一、ansible简介 Ansible是一个基于Python开发的配置管理和应用部署工具&#xff0c;现在也在自动化管理领域大放异彩。…

应用层——电子邮件、MIME、简单网络管理协议SNMP

电子邮件 电子邮件系统采用三个主要构件组成&#xff1a;用户代理、邮件服务器、电子邮件所需的协议 我们可以简单的认为邮件服务器中有很多邮箱&#xff0c;还有用来缓存再转发邮件的缓存&#xff0c;发送方使用用户代理通过邮件发送协议。例如SMTP将邮件发送给发送方。 邮件服…