基于51单片机模拟键盘---超级简单

首先,我来bb一下原理啥的,想直接操作的可以跳过这里哈!

  HID是Human Interface Device的缩写,由其名称可以了解HID设备是直接与人交互的设备,例如键盘、鼠标等。不过HID设备并不一定要有人机接口,只要符合HID类别规范的设备都是HID设备。

所以我们就要模拟HID的通信,市场上有很多芯片可以做到我们想要的功能,例如CH372啥的,不过这个有点复杂,代码很多,需要配置描述符,配置符啥的。然后我就想,有没有直接串口转HID的芯片,这样子岂不是美哉,然后就去找呀找,找呀找,总算找到了它------CH9328。

官网介绍:http://www.wch.cn/product/ch9328.html

基于51单片机模拟键盘---超级简单_第1张图片

看完图就是知道很简单啦,完全不用其他什么枚举啥的,直接串口发送键盘的键值就行了。

说完这个然后就说一下怎么发送键值了

首先肯定要知道HID协议了

键盘发送给PC的数据每次8个字节
BYTE1 BYTE2 BYTE3 BYTE4 BYTE5 BYTE6 BYTE7 BYTE8
定义分别是:
BYTE1 --
       |--bit0:   Left Control  是否按下,按下为1 
       |--bit1:   Left Shift  是否按下,按下为1 
       |--bit2:   Left Alt    是否按下,按下为1 
       |--bit3:   Left GUI    是否按下,按下为1 
       |--bit4:   Right Control是否按下,按下为1  
       |--bit5:   Right Shift   是否按下,按下为1 
       |--bit6:   Right Alt   是否按下,按下为1 
       |--bit7:   Right GUI   是否按下,按下为1 
BYTE2 -- 暂不清楚,有的地方说是保留位
BYTE3--BYTE8 -- 这六个为普通按键
键盘经过测试。
例如:键盘发送一帧数据   02 00 0x04 0x05 00 00 00 00
表示同时按下了Left Shift + ‘a’+‘b’三个键

也就是说如果我想用单片机模拟同时按下了Left Shift + ‘a’+‘b’三个键就向串口发送02 00 0x04 0x05 00 00 00 00就可以了。

好了,BB结束了,开始操作:

(个人建议最好买一个开发板,方便自己做其他的实验什么的,如果你在学校实验室有开发板,我觉得你最好买一个属于你自己的开发板,我自己就是买了一个普中148块的那个,不打广告,是真的好用)

材料清单:

  1. 单片机最小系统*1或者开发板;(家中常备)
  2. CH9328功能板一块*1;M宝购买网址:https://dwz.cn/Mv8xG9wW
  3. 杜邦线-母--母*4;(家中必备)
  4. 安卓数据线*1;(家中必备)

有关CH9328的详细资料:链接:https://pan.baidu.com/s/1nNE9b0NN67NCPXGHrukXag 
提取码:0sgt

1、开始敲代码:

#include "reg52.h"

sbit k1=P1^0;

void sendbyte(unsigned char b)
{
    SBUF=b;
    while(!TI);
    TI=0;
}
void init()
{
    SCON=0X50; 
    TMOD=0X20;    
    PCON=0X80;   
    TH1=0Xf4;        //通信波特率设置,根据你自己的晶振来修改,我这个是22.1174M的晶振的
    TL1=TH1;    //晶振不同必须要修改,不然就没办法和CH9328通信啦
    TR1=1;      
}

void delay(int x)
{
    unsigned char a,b;
    for(x;x>0;x--)
        for(b=80;b>0;b--)
            for(a=10;a>0;a--);
}

void main(void)//程序功能,短接一下P1^0口,单片机就会发送一次回车
{
    unsigned char key[8],i;
    init();
    while(1)
    {
        for(i=0;i<8;i++) key[i]=0x00;
        if(k1==0)
        {
            delay(1);
            if(k1==0)
            {
                key[2]=0x58;//发送回车键按下指令,想发送其他键值,根据键值对照表修改这里哈
                for(i=0;i<8;i++) sendbyte(key[i]);
                key[2]=0x00;//发送回车键松开指令
                for(i=0;i<8;i++) sendbyte(key[i]);
                while(!k1);
            }
        }     
    }
}

程序就这么一点啦,把程序下载进单片机之后,就开始硬件接线了

键值对照表:链接:https://pan.baidu.com/s/16oMgyVqT7IzNyE1QhP_UVQ 
提取码:2soz

2.接线

基于51单片机模拟键盘---超级简单_第2张图片

额,画的不是特别的美观,将就看着吧!这个CH9328可以直接给单片机最小系统供电的了,所以就不用额外的电源了,直接用USB的电源就够了。

3.测试

把USB插上电脑接口之后可以打开设备管理器里面的人体输入设备看到多了一个设备啦。

基于51单片机模拟键盘---超级简单_第3张图片

然后就是打开一个WORD文档,再短接一个P1^0口就可以看到产生了一个回车了。

大功告成,哈哈

 

你可能感兴趣的:(基于51单片机模拟键盘---超级简单)