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