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