CH9329控制键盘的正确食用方式

CH9329控制键盘的正确食用方式

一、CH9329控制键盘介绍

1.推送的数据结构
帧头地址码命令码后续数据长度后续数据累加和
HEADADDRCMDLENDATASUM
0x57,0xAB0x000x020x088位0x??

对于键盘控制来说,帧头、地址码、命令码、后续数据长度都是固定的。我们只需要填入后续数据跟累加和值即可。

2.累加和的计算

SUM = (HEAD + ADDR + CMD + LEN + DATA) % 256

需要注意的是,累加和计算时,需要将累加和计算结果取模。相当于16进制只取两位数

二、控制逻辑

1.python
  • 单独的按键按下弹起
2.CH9329
  • 按下

只发送8+6的组合键

  • 弹起

在测试的过程中发现,如果我先推送按下AB键在不推送全部弹起的情况下,再推送A键。那么B键就会弹起。


通过按键监听,过程大概就是这样

send(['a', 'b'])    # 监听到AB键按下
send(['a'])         # 监听到B键弹起
send([])            # 监听到A键弹起
send(['a'])         # 监听到A键按下
send(['b'])         # 监听到A键弹起和B键按下
send([])            # 监听到B键弹起

你想要同时按下多个键,你需要发送8+6的组合键。而不是给CH9329推两次数据。推两次数据他只会按后面推送的按键。


假如你的需求是同时按下AB键,并且单独弹起B,那么你推送的数据应该是这个样子

send(['a', 'b', '0', '0', '0', '0', '0', '0'])
send(['a', '0', '0', '0', '0', '0', '0', '0']) # 将B键对应的数据置0

在8个数据位中将你想弹起的键对应的数据置0即可。

三、简单推送代码实现

import serial
import time

a = 0x04 # CH9329的A键对应的键码
b = 0x05 # CH9329的B键对应的键码
head = [0x57, 0xAB] # 帧头
addr = [0x00]       # 地址码
cmd = [0x02]        # 命令码
length = [0x08]     # 后续数据长度

# 请根据实际情况修改串口号和波特率
ser = serial.Serial('COM6', 9600, timeout=1)


def send(key_code):
    data = []           # 后续数据
    # 填充数据部分,始终保持8个字节
    for i in range(8):
        if len(key_code) > i:
            data.append(key_code[i])
            continue
        data.append(0x00)

    # 计算累加和
    footer = [(sum(head) + sum(addr) + sum(cmd) + sum(length) + sum(data)) % 256]
    # 结合所有部分构造完整的命令包
    command_packet = head + addr + cmd + length + data + footer
    ser.write(bytes(command_packet))  # 发送数据
    ser.flush()  # 确保数据被发送

    
send([a, b])    # 按下"AB"
time.sleep(1)
send([a])       # 弹起"B"
time.sleep(1)
send([])        # 弹起"A"

附常用键码

键名键码键名键码键名键码
Q0x14H0x0BRIGHT0x4F
W0x1AJ0x0DF10x3A
E0x08K0x0EF20x3B
R0x15L0x0FF30x3C
T0x17Z0x1DF40x3D
Y0x1CX0x1BF50x3E
U0x18C0x06F60x3F
I0x0CV0x19F70x40
O0x12B0x05F80x41
P0x13N0x11F90x42
A0x04M0x10F100x43
S0x16UP0x52F110x44
D0x07DOWN0x51F120x45
F0x09LEFT0x50ESC0x29
G0x0A
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值