脱离单片机C零门槛DIY一个USB HID虚拟键盘
C1 自带 USB 虚拟键盘
本教程来至 FlexLua 官网 ShineBlink 开发板教程,即使不懂单片机开发也可很容易用FlexLua零门槛开发各种 IoT 硬件。
注意:本教程仅适合 C1,不适合C2,因为 C2 不带 USB HID 。
一、实现功能
将Core USB 口虚拟成键盘设备,通过USB线连接电脑后,每隔5秒Core会模拟如下的一系列按键动作:
win+r,唤出“运行”对话框n o t e p a d ,输入"notepad"并回车,唤出记事本文本h e l l o w o r l d . . ,在记事本输入"hello word.."文本。二、完整代码
注意: 如果你的项目中同时用到Ble蓝牙功能时,一定要先初始化Ble蓝牙之后,再调用LIB_UsbConfig函数初始化USB功能。
--先配置USB口以USB键盘模式工作LIB_UsbConfig("KBD")--开始大循环while(GC(1) == true)doLIB_DelayMs(5000)--模拟键盘组合按键WIN+R调出运行界面效果combine_tab = {"GUI","R"}LIB_UsbKbdSend("COMBINE", combine_tab)LIB_DelayMs(200)--模拟键盘输入notepad和回车键效果,来创建记事本文本文件single_tab = {"N","O","T","E","P","A","D","ENTER"}LIB_UsbKbdSend("SINGLE", single_tab)LIB_DelayMs(500)--模拟键盘在记事本文件上打出hello world..效果single_tab = {"H","E","L","L","O","SPACEBAR","W","O","R","L","D","DOT","DOT"}LIB_UsbKbdSend("SINGLE", single_tab)end
如果感兴趣,上面代码中出现的LIB开头的库函数可以在 API文档 中通过Ctrl+F查询。
如果你想查询电脑的CapsLock和NumLock指示灯状态,可以通过函数LIB_UsbKbdCapsLockAndNumLockQuery()来查询
三、演示结果图
四、附录:键盘标识符
键盘标识 HID码"A", = 4, /**<KBD_A code*/ "B", = 5, /**<KBD_B code*/ "C", = 6, /**<KBD_C code*/ "D", = 7, /**<KBD_D code*/ "E", = 8, /**<KBD_E code*/ "F", = 9, /**<KBD_F code*/ "G", = 10, /**<KBD_G code*/ "H", = 11, /**<KBD_H code*/ "I", = 12, /**<KBD_I code*/ "J", = 13, /**<KBD_J code*/ "K", = 14, /**<KBD_K code*/ "L", = 15, /**<KBD_L code*/ "M", = 16, /**<KBD_M code*/ "N", = 17, /**<KBD_N code*/ "O", = 17, /**<KBD_N code*/ "P", = 19, /**<KBD_P code*/ "Q", = 20, /**<KBD_Q code*/ "R", = 21, /**<KBD_R code*/ "S", = 22, /**<KBD_S code*/ "T", = 23, /**<KBD_T code*/ "U", = 24, /**<KBD_U code*/ "V", = 25, /**<KBD_V code*/ "W", = 26, /**<KBD_W code*/ "X", = 27, /**<KBD_X code*/ "Y", = 28, /**<KBD_Y code*/ "Z", = 29, /**<KBD_Z code*/ "1", = 30, /**<KBD_1 code*/ "2", = 31, /**<KBD_2 code*/ "3", = 32, /**<KBD_3 code*/ "4", = 33, /**<KBD_4 code*/ "5", = 34, /**<KBD_5 code*/ "6", = 35, /**<KBD_6 code*/ "7", = 36, /**<KBD_7 code*/ "8", = 37, /**<KBD_8 code*/ "9", = 38, /**<KBD_9 code*/ "0", = 39, /**<KBD_0 code*/ "ENTER", = 40, /**<KBD_ENTER code*/ "ESCAPE", = 41, /**<KBD_ESCAPE code*/ "BACKSPACE",= 42, /**<KBD_BACKSPACE code*/ "TAB", = 43, /**<KBD_TAB code*/ "SPACEBAR",= 44, /**<KBD_SPACEBAR code*/ "UNDERSCORE",= 45, /**<KBD_UNDERSCORE code*/ "PLUS", = 46, /**<KBD_PLUS code*/ "OPEN_BRACKET",= 47, /**<KBD_OPEN_BRACKET code*/ "CLOSE_BRACKET", = 48, /**<KBD_CLOSE_BRACKET code*/ "BACKSLASH",= 49, /**<KBD_BACKSLASH code*/ "ASH", = 50, /**<KBD_ASH code*/ "COLON", = 51, /**<KBD_COLON code*/ "QUOTE", = 52, /**<KBD_QUOTE code*/ "TILDE", = 53, /**<KBD_TILDE code*/ "COMMA", = 54, /**<KBD_COMMA code*/ "DOT", = 55, /**<KBD_DOT code*/ "SLASH", = 56, /**<KBD_SLASH code*/ "CAPS_LOCK",= 57, /**<KBD_CAPS_LOCK code*/ "F1", = 58, /**<KBD_F1 code*/ "F2", = 59, /**<KBD_F2 code*/ "F3", = 60, /**<KBD_F3 code*/ "F4", = 61, /**<KBD_F4 code*/ "F5", = 62, /**<KBD_F5 code*/ "F6", = 63, /**<KBD_F6 code*/ "F7", = 64, /**<KBD_F7 code*/ "F8", = 65, /**<KBD_F8 code*/ "F9", = 66, /**<KBD_F9 code*/ "F10," = 67, /**<KBD_F10 code*/ "F11," = 68, /**<KBD_F11 code*/ "F12," = 69, /**<KBD_F12 code*/ "PRINTSCREEN", = 70, /**<KBD_PRINTSCREEN code*/ "SCROLL_LOCK", = 71, /**<KBD_SCROLL_LOCK code*/ "PAUSE", = 72, /**<KBD_PAUSE code*/ "INSERT", = 73, /**<KBD_INSERT code*/ "HOME", = 74, /**<KBD_HOME code*/ "PAGEUP", = 75, /**<KBD_PAGEUP code*/ "DELETE", = 76, /**<KBD_DELETE code*/ "END", = 77, /**<KBD_END code*/"PAGEDOWN",= 78, /**<KBD_PAGEDOWN code*/ "RIGHT", = 79, /**<KBD_RIGHT code*/ "LEFT", = 80, /**<KBD_LEFT code*/ "DOWN", = 81, /**<KBD_DOWN code*/ "UP", = 82, /**<KBD_UP code*/ "KEYPAD_NUM_LOCK", = 83, /**<KBD_KEYPAD_NUM_LOCK code*/ "KEYPAD_DIVIDE", = 84, /**<KBD_KEYPAD_DIVIDE code*/ "KEYPAD_MULTIPLY", = 85, /**<KBD_KEYPAD_MULTIPLY code*/ "KEYPAD_MINUS", = 86, /**<KBD_KEYPAD_MINUS code*/ "KEYPAD_PLUS", = 87, /**<KBD_KEYPAD_PLUS code*/ "KEYPAD_ENTER",= 88, /**<KBD_KEYPAD_ENTER code*/ "KEYPAD_1", = 89, /**<KBD_KEYPAD_1 code*/ "KEYPAD_2", = 90, /**<KBD_KEYPAD_2 code*/ "KEYPAD_3", = 91, /**<KBD_KEYPAD_3 code*/ "KEYPAD_4", = 92, /**<KBD_KEYPAD_4 code*/ "KEYPAD_5", = 93, /**<KBD_KEYPAD_5 code*/ "KEYPAD_6", = 94, /**<KBD_KEYPAD_6 code*/ "KEYPAD_7", = 95, /**<KBD_KEYPAD_7 code*/ "KEYPAD_8", = 96, /**<KBD_KEYPAD_8 code*/ "KEYPAD_9", = 97, /**<KBD_KEYPAD_9 code*/ "KEYPAD_0", = 98, /**<KBD_KEYPAD_0 code*/
USB键盘(机床、设备上使用)
正面
背面
主控采用GD32F303CC单片机,120MHZ主频,自带1个USBD接口,外加一个74HC154和单片机的8个IO输入组成11*8的88个按键扫描。如下图:
键盘扫描+8个外扩接口
键盘CAD
上电初始化USB口,拉高再拉低D+电脑会识别一个USB全速设备,发送键盘描述符电脑会发现一个HID键盘:
这时就可以发送键盘的键码了。
键盘数据共8字节:
1字节:功能码:bit0左Ctrl,bit1左Shift,bit2左Alt,bit3左GUI,bit4右Ctrl,bit5右Shift,bit6右Alt,bit7右GUI。
2字节:保持为0。(为毛我也不知道)
3字节~8字节:为键值数据也就是最大支持6个键同时按下。
对应的键值如下:
发送对应的键值即可输入对应的字符了。
相关问答
单片机usb 接口那两根是电源线,那两根是数据线-ZOL问答红色-USB电源:标有-VCC、Power、5V、5VSB字样白色-USB数据线:(负)-DATA-、USBD-、PD-、USBDT-绿色-USB数据线:(正)-DATA+、USBD+、PD+、...
单片机 为什么要有 键盘单片机说白了就是一个小的电脑的主机那么有了主机以后想让他正常动起来当然缺不了键盘这就像电脑问什么要有键盘一样,输入用的。
有关51 单片机 的电源电路设计(下图是我画的电源电路,分别采用...不需要任何设计撒,只需要一个转换开关就能双电源的切换,usb输出+5V电压,然后你再需要一个输出+5V的电源,接到转换开关上就ok了有用(0)回复HJKL11关注这个问...
ad矩阵 键盘 怎么接入 单片机 ?您好,ad矩阵键盘接入单片机的步骤如下:1.选择合适的ad矩阵键盘,根据需要确定键盘的行数和列数。2.将ad矩阵键盘的行和列分别连接到单片机的IO口上。3.在单...
树莓派和 单片机 的区别?树莓派和单片机的主要有以下三个区别:一、主体不同1、树莓派:是为学习计算机编程教育而设计,只有信用卡大小的微型电脑,其系统基于Linux。2、单片机:是一...
单片机 的按键如何外接?一般单片机的外接按键有三种接法:1、每个I/O端口接一个按键:按键接另一端通常是接地,I/O口通常还应该接一个上拉电阻,有些单片机的I/O口可以配置成内部上拉...
无法识别 usb 设备怎么处理 stm32模拟ps2-ZOL问答如果是USB接口的话,问题就复杂多了。51单片机本身并不支持USB协议,如果需要使用USB设备,则需要用软件模拟出USB协议,或者借助其它USB接口芯片才可以...
qx-mini51 单片机 怎么接矩阵 键盘 ?你好,接矩阵键盘时需要将行线接在P1口,列线接在P2口。在扫描时,需要将列线拉高,行线检测按键状态。如果有按键按下,行线会被拉低,可以通过列线和行线的交点...
电脑 键盘 是怎么制造的?原理是什么?一、我们先谈谈键盘的工作原理。键盘是由单片机(MCU)、译码器和一组排列成16行X8列矩阵的按键开关组成。MCU按一定的周期来扫描按键矩阵,一旦发现有按键被按下...
单片机 的遥控器怎么用?单片机遥控器是一种无线遥控器,可以通过编程和电路设计控制物品的运动或操作。首先需要将遥控器和被控制的设备连接,然后在单片机控制板上编写程序,将遥控器...