产品选型

单片机usb键盘 脱离单片机C零门槛DIY一个USB HID虚拟键盘

小编 2024-10-25 产品选型 23 0

脱离单片机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个键同时按下。

对应的键值如下:

发送对应的键值即可输入对应的字符了。

相关问答

51 单片机 怎么与电脑 键盘 相接, USB 的-ZOL问答

如果是USB接口的话,问题就复杂多了。51单片机本身并不支持USB协议,如果需要使用USB设备,则需要用软件模拟出USB协议,或者借助其它USB接口芯片才可以实现。与P...

怎么用labview编写 单片机 烧写程序-ZOL问答

在单片机开发过程中,从硬件设计到软件设计几乎是开发者针对本系统特点亲自完成的。这样虽然可以降低系统成本,提高系统的适应性,但是每个系统的调试占去了总开...

单片机 为什么要有 键盘

单片机说白了就是一个小的电脑的主机那么有了主机以后想让他正常动起来当然缺不了键盘这就像电脑问什么要有键盘一样,输入用的。

矩阵 键盘 单片机 怎么连接?

矩阵键盘是行x列,需要看你矩阵的多少而定,接单片机IO口P0、P1都可以矩阵键盘就是个按键阵列,不需要电源和地,电源和地是接单片机的矩阵键盘是行x列,需要看你...

qx-mini51 单片机 怎么接矩阵 键盘 ?

你好,接矩阵键盘时需要将行线接在P1口,列线接在P2口。在扫描时,需要将列线拉高,行线检测按键状态。如果有按键按下,行线会被拉低,可以通过列线和行线的交点...

单片机 的遥控器怎么用?

单片机遥控器是一种无线遥控器,可以通过编程和电路设计控制物品的运动或操作。首先需要将遥控器和被控制的设备连接,然后在单片机控制板上编写程序,将遥控器...

笔记本 键盘 可不可以改排线联接为 usb 接口形式-ZOL问答

亚马逊USB连接线讨论回答(5)我不是神仙,但我会一点单片机,可以连接PS/2接口。其实键盘都是按键板加芯片的,只不过笔记本电脑的芯片在主板上。如果你不计较...

微处理器 微型计算机 微型计算机系统和 单片机 有什么不同? - ...

3以微型计算机为核心组成的应用控制系统叫做微型计算机系统,包括系统软件和硬件两个组成部分。4单片机是面向工业控制的微处理器,是工业CPU,它是...

单片机 怎么跟电脑实现无线传输数据-ZOL问答

如果买不到,也可以自己做,但这就需要较高的电路水平才可以做到,涉及到调制解调,无线电的发射和接收电路,发射频率的选择,再加上单片机和电脑的通信程序编写,一个...

单片机 矩阵 键盘 最后一列没有反应?

关机以后重启试试,或者没有相应的操作关机以后重启试试,或者没有相应的操作

猜你喜欢