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

 私信有时候没看到,新建了一个QQ交流群,有想咨询的朋友可以在群里问哈

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

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

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

官网介绍:串口转USB键盘芯片CH9328 - 南京沁恒微电子股份有限公司

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

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

首先肯定要知道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宝购买网址:百度短网址
  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.接线

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

3.测试

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

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

大功告成,哈哈

  • 24
    点赞
  • 170
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
### 回答1: 51单片机是一款由英特尔公司设计并制造的微控制器芯片。它具有强大的计算能力和丰富的外设接口,适用于各种嵌入式系统和计算机控制应用。 Proteus是一款著名的虚拟电子设计自动化软件,可以进行电路设计、仿真和PCB布局。在这个软件中,我们可以使用51单片机模型并进行仿真测试。 对于51单片机计算器的仿真,我们可以通过Proteus来验证和优化其功能。首先,我们需要在Proteus中创建一个适当的电路图,包含需要的外设,如键盘、显示屏和运算电路等。 接下来,我们可以使用Proteus提供的仿真功能,通过输入不同的测试数据,观察计算器的输出是否与预期相符。在仿真过程中,我们可以通过引入不同的测试用例,测试计算器在不同的情况下的性能和稳定性。 通过Proteus仿真,我们可以验证51单片机计算器的正确性,并发现潜在的问题和缺陷。如果出现问题,我们可以在Proteus中进行调试和修改,以确保计算器的正确运行。 总之,51单片机计算器的Proteus仿真是一种有效的验证和优化设计的方法。它可以帮助我们验证计算器的功能和稳定性,并帮助我们在设计阶段发现和解决问题,从而提高计算器的性能和可靠性。 ### 回答2: 51单片机计算器是一种使用51单片机芯片制作的计算器设备。Proteus是一款流行的电子电路设计软件。在仿真过程中,可以使用Proteus来模拟51单片机计算器的运行。 首先,在Proteus中添加一个51单片机芯片,然后将计算器的电路连接到芯片的相应引脚。这些引脚包括计算器的输入按键、显示屏、LED灯和电源等。根据计算器的功能设计,可以将按键输入通过引脚连接到单片机的GPIO口,通过程序控制按键输入的检测和计算。 在Proteus中,可以使用51单片机的IDE来编写计算器的控制程序,该程序可以在单片机上进行仿真和调试。仿真过程中,可以通过模拟按键按下,电路输入和输出等,来测试计算器的各种功能。 通过仿真和调试,可以验证计算器的正确性和可靠性。根据测试结果,可以对计算器的电路和程序进行优化和修复,以实现更好的性能和稳定性。 综上所述,在Proteus中进行51单片机计算器的仿真是一种方便有效的方法,可以帮助工程师测试和优化计算器的功能和性能。这样可以减少实际硬件搭建的成本和时间,同时也方便了对计算器的开发和调试。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Knight-20

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值