keyboard.Key有哪些值
时间: 2024-04-16 16:25:26 浏览: 171
keyboard.Key 是一个枚举类,它定义了一些常用的键盘按键的值。以下是一些常见的键盘按键值:
- Key.esc: ESC键
- Key.space: 空格键
- Key.enter: 回车键
- Key.backspace: 退格键
- Key.tab: Tab键
- Key.shift: Shift键
- Key.ctrl: Ctrl键
- Key.alt: Alt键
- Key.caps_lock: 大写锁定键
- Key.num_lock: 数字锁定键
- Key.scroll_lock: 滚动锁定键
- Key.page_up: 页面向上键
- Key.page_down: 页面向下键
- Key.home: Home键
- Key.end: End键
- Key.left: 左箭头键
- Key.right: 右箭头键
- Key.up: 上箭头键
- Key.down: 下箭头键
这只是一部分常见的按键值,还有其他的按键值可以在使用时进行查阅。
相关问题
void key_change_proc(void) {u8 key0 = kb_event.keycode[0]; u8 key_buf[8] = {0,0,0,0,0,0,0,0}; key_not_released = 1; if (kb_event.cnt == 2) //two key press, do not process { } else if(kb_event.cnt == 1) { if(key0 >= CR_VOL_UP ) //volume up/down { key_type = CONSUMER_KEY; u16 consumer_key; if(key0 == CR_VOL_UP){ //volume up consumer_key = MKEY_VOL_UP; } else if(key0 == CR_VOL_DN){ //volume down consumer_key = MKEY_VOL_DN; } blc_gatt_pushHandleValueNotify (BLS_CONN_HANDLE,HID_CONSUME_REPORT_INPUT_DP_H, (u8 *)&consumer_key, 2); } else { key_type = KEYBOARD_KEY; key_buf[2] = key0; blc_gatt_pushHandleValueNotify (BLS_CONN_HANDLE,HID_NORMAL_KB_REPORT_INPUT_DP_H, key_buf, 8); } } else //kb_event.cnt == 0, key release { key_not_released = 0; if(key_type == CONSUMER_KEY) { u16 consumer_key = 0; blc_gatt_pushHandleValueNotify ( BLS_CONN_HANDLE,HID_CONSUME_REPORT_INPUT_DP_H, (u8 *)&consumer_key, 2); } else if(key_type == KEYBOARD_KEY) { key_buf[2] = 0; blc_gatt_pushHandleValueNotify (BLS_CONN_HANDLE,HID_NORMAL_KB_REPORT_INPUT_DP_H, key_buf, 8); //release } } }按条分析各语句的作用
这段代码是一个函数,功能是根据键盘事件发送 HID 报文给 BLE 连接的主机。下面是各语句的作用:
1. `void key_change_proc(void)`:函数定义,返回值类型为 `void`,函数名为 `key_change_proc`,没有输入参数。
2. `u8 key0 = kb_event.keycode[0];`:从 `kb_event` 结构体中取出按下的第一个键的键码并存储在 `key0` 变量中。
3. `u8 key_buf[8] = {0,0,0,0,0,0,0,0};`:初始化一个长度为 8 的数组 `key_buf`,每个元素的值都为 0。
4. `key_not_released = 1;`:将 `key_not_released` 的值设为 1,表示键还没有松开。
5. `if (kb_event.cnt == 2)`:如果按下了两个键,则不处理。
6. `else if(kb_event.cnt == 1)`:如果只按下了一个键,则执行下面的代码块。
7. `if(key0 >= CR_VOL_UP )`:如果按下的键码大于或等于 `CR_VOL_UP`,则说明按下了音量加或音量减键。
8. `key_type = CONSUMER_KEY;`:将 `key_type` 变量的值设为 `CONSUMER_KEY`,表示这是一个消费者键。
9. `u16 consumer_key;`:定义一个 `u16` 类型的变量 `consumer_key`。
10. `if(key0 == CR_VOL_UP){ consumer_key = MKEY_VOL_UP; }`:如果按下的是音量加键,则将 `consumer_key` 的值设为 `MKEY_VOL_UP`。
11. `else if(key0 == CR_VOL_DN){ consumer_key = MKEY_VOL_DN; }`:如果按下的是音量减键,则将 `consumer_key` 的值设为 `MKEY_VOL_DN`。
12. `blc_gatt_pushHandleValueNotify (BLS_CONN_HANDLE,HID_CONSUME_REPORT_INPUT_DP_H, (u8 *)&consumer_key, 2);`:调用 Beken BLE Stack 提供的函数 `blc_gatt_pushHandleValueNotify`,将消费者键报文发送给 BLE 连接的主机。
13. `else`:如果按下的不是音量加或音量减键,则执行下面的代码块。
14. `key_type = KEYBOARD_KEY;`:将 `key_type` 变量的值设为 `KEYBOARD_KEY`,表示这是一个普通键。
15. `key_buf[2] = key0;`:将按下的键码存储在 `key_buf` 数组的第 3 个元素中,因为 HID 报文的前两个字节是保留位。
16. `blc_gatt_pushHandleValueNotify (BLS_CONN_HANDLE,HID_NORMAL_KB_REPORT_INPUT_DP_H, key_buf, 8);`:调用 Beken BLE Stack 提供的函数 `blc_gatt_pushHandleValueNotify`,将普通键报文发送给 BLE 连接的主机。
17. `else`:如果没有按键事件,则执行下面的代码块。
18. `key_not_released = 0;`:将 `key_not_released` 的值设为 0,表示键已经松开。
19. `if(key_type == CONSUMER_KEY)`:如果前一个按键是消费者键,则执行下面的代码块。
20. `u16 consumer_key = 0;`:将 `consumer_key` 的值设为 0。
21. `blc_gatt_pushHandleValueNotify (BLS_CONN_HANDLE,HID_CONSUME_REPORT_INPUT_DP_H, (u8 *)&consumer_key, 2);`:调用 Beken BLE Stack 提供的函数 `blc_gatt_pushHandleValueNotify`,发送一个空的消费者键报文。
22. `else if(key_type == KEYBOARD_KEY)`:如果前一个按键是普通键,则执行下面的代码块。
23. `key_buf[2] = 0;`:将 `key_buf` 数组的第 3 个元素设为 0,表示键已经松开。
24. `blc_gatt_pushHandleValueNotify (BLS_CONN_HANDLE,HID_NORMAL_KB_REPORT_INPUT_DP_H, key_buf, 8);`:调用 Beken BLE Stack 提供的函数 `blc_gatt_pushHandleValueNotify`,发送一个空的普通键报文。
uchar ScanKey() { uchar ret = 0; uchar key; uchar line, row; do { DDRB=0X0F; KEYBOARD = 0xf0; //扫描列 key =PINB&0XF0; if(key == 0xf0) break; //没有键按下 //有键按下 delay_nms(1); //延时消除抖动 key = PINB&0XF0; //再次读端口值 if(key == 0xf0) break; //没有键按下 switch(key) //有键按下,记录行值 { case 0x70: line = 3; break; case 0xb0: line = 2; break; case 0xd0: line = 1; break; case 0xe0: line = 0; break; } DDRB=0XF0; KEYBOARD = 0x0f; //扫描行 key = PINB&0X0F; if(key == 0x0f) break; //没有键按下 delay_nms(1); //延时消除抖动 key = PINB&0X0F; //再次读端口值 if(key == 0x0f) break; //没有键按下 switch(key) //有键按下,记录列值 { case 0x07: row = 3; break; case 0x0b: row = 2; break; case 0x0d: row = 1; break; case 0x0e: row = 0; break; } //查找对应的键值 ret = key_map[row][line]; // 行列 } while(0); return ret; }给这个代码画一个流程图
抱歉,我作为语言模型无法绘制流程图,但我能够为您描述一下这段代码的流程:
1. 初始化变量 ret、key、line 和 row 为 0
2. 进入 do-while 循环
3. 将 DDRB 设为输出模式,将 KEYBOARD 的值设为 0xf0(11110000),用于扫描列
4. 读取 PINB 的值,并将其与 0xf0 进行按位与操作,保存在 key 变量中
5. 如果 key 的值等于 0xf0,说明没有键按下,跳出循环
6. 如果 key 的值不等于 0xf0,说明有键按下,进行消抖处理,再次读取 PINB 的值,保存在 key 变量中
7. 如果 key 的值仍然等于 0xf0,说明没有键按下,跳出循环
8. 根据 key 的值,记录下当前按下键的所在行数,保存在 line 变量中
9. 将 DDRB 设为输出模式,将 KEYBOARD 的值设为 0x0f(00001111),用于扫描行
10. 读取 PINB 的值,并将其与 0x0f 进行按位与操作,保存在 key 变量中
11. 如果 key 的值等于 0x0f,说明没有键按下,跳出循环
12. 如果 key 的值不等于 0x0f,说明有键按下,进行消抖处理,再次读取 PINB 的值,保存在 key 变量中
13. 如果 key 的值仍然等于 0x0f,说明没有键按下,跳出循环
14. 根据 key 的值,记录下当前按下键的所在列数,保存在 row 变量中
15. 在 key_map 数组中查找出对应键值,保存在 ret 变量中
16. 循环结束,返回 ret 变量的值
阅读全文
相关推荐
![txt](https://img-home.csdnimg.cn/images/20241231045021.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)