请教在设计USB键盘的时候怎么才能达到一直按下的效果

2020-01-23 14:39发布

1.最近在看圈圈的键盘,可是好像没有办法做到一直按下某个键的效果,按下的频率很高也行,但是貌似换了晶振键盘按下的频率还是不够高,怎么做才能有上述效果?
2.同时发送两个按键会出问题,慢了许多的样子,不知道是否我在其中加了个MPU6050读数据造成的。
单片机是STC12C5A60S2,晶振是27M。
主程序是跟圈圈的书差不多的
  1. while(1)  //死循环
  2. {
  3.                 if(D12GetIntPin()==0) //如果有中断发生
  4.                 {
  5.                  D12WriteCommand(READ_INTERRUPT_REGISTER);  //写读中断寄存器的命令
  6.                  InterruptSource=D12ReadByte(); //读回第一字节的中断寄存器
  7.                  if(InterruptSource&0x80)UsbBusSuspend(); //总线挂起中断处理
  8.                  if(InterruptSource&0x40)UsbBusReset();   //总线复位中断处理
  9.                  if(InterruptSource&0x01)UsbEp0Out();     //端点0输出中断处理
  10.                  if(InterruptSource&0x02)UsbEp0In();      //端点0输入中断处理
  11.                  if(InterruptSource&0x04)UsbEp1Out();     //端点1输出中断处理
  12.                  if(InterruptSource&0x08)UsbEp1In();      //端点1输入中断处理
  13.                  if(InterruptSource&0x10)UsbEp2Out();     //端点2输出中断处理
  14.                  if(InterruptSource&0x20)UsbEp2In();      //端点2输入中断处理
  15.                 }
  16.                  if(ConfigValue!=0) //如果已经设置为非0的配置,则可以返回报告数据
  17.                 {
  18.                  if(!Ep1InIsBusy)  //如果端点1输入没有处于忙状态,则可以发送数据
  19.                  {
  20.                          SendReport();  //则返回报告
  21.                  }
  22.                 }
  23. }
复制代码SendReport(); 发送按键的内容,按下一个按键的程序,思路是,先获取MPU6050陀螺仪的Y轴角速度,然后数据处理判断下,再发送按键,另一个读取X轴的角速度,类似这个。
  1.   Value_Of_Y_Gyro=GetData(GYRO_YOUT_H);
  2.                 temp=abs(Value_Of_Y_Gyro);
  3.                 if(temp>10)
  4.                 {
  5.                         if(Value_Of_Y_Gyro<0)
  6.                         {
  7.                                 Last_Y_Key=DOWN_KEY;
  8.                                 Buf[i]=DOWN_KEY;  
  9.                         }
  10.                         else
  11.                         {
  12.                                 Last_Y_Key=UP_KEY;
  13.                                 Buf[i]=UP_KEY;  //
  14.                         }
  15.                 }
  16.                 else
  17.                 {
  18.                         Buf[i]=Last_Y_Key;
  19.                 }
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
25条回答
cumtgao
1楼-- · 2020-01-24 23:41
10xjzheng 发表于 2014-5-24 08:42
释放码是什么样子的?能否告知我一下?

我反正做USB键盘时,释放时就8个字节全发0就可以了
10xjzheng
2楼-- · 2020-01-25 01:15
 精彩回答 2  元偷偷看……
10xjzheng
3楼-- · 2020-01-25 03:33
cumtgao 发表于 2014-5-24 10:21
我反正做USB键盘时,释放时就8个字节全发0就可以了

对的,试验过,果然是这样
tianheiGE
4楼-- · 2020-01-25 04:39
10xjzheng 发表于 2014-5-24 11:35
试了下,是可以的,原来按下就是我们之前那样子发送,若要松开,就是发送0x00就好,但是发现按下多个键好 ...

你一个按键行了,其它应该是可以的才是,
10xjzheng
5楼-- · 2020-01-25 08:12
tianheiGE 发表于 2014-5-24 11:52
你一个按键行了,其它应该是可以的才是,

谢啦,我先把姿态融合那部分搞好再试下,不然用原始数据来玩飞车真的是很坑爹,不像pitch,row
passage110
6楼-- · 2020-01-25 09:09
楼主查看下USB键盘发送的数据码就知道了!!

一周热门 更多>