1.最近在看圈圈的键盘,可是好像没有办法做到一直按下某个键的效果,按下的频率很高也行,但是貌似换了晶振键盘按下的频率还是不够高,怎么做才能有上述效果?
2.同时发送两个按键会出问题,慢了许多的样子,不知道是否我在其中加了个MPU6050读数据造成的。
单片机是STC12C5A60S2,晶振是27M。
主程序是跟圈圈的书差不多的
- while(1) //死循环
- {
- if(D12GetIntPin()==0) //如果有中断发生
- {
- D12WriteCommand(READ_INTERRUPT_REGISTER); //写读中断寄存器的命令
- InterruptSource=D12ReadByte(); //读回第一字节的中断寄存器
- if(InterruptSource&0x80)UsbBusSuspend(); //总线挂起中断处理
- if(InterruptSource&0x40)UsbBusReset(); //总线复位中断处理
- if(InterruptSource&0x01)UsbEp0Out(); //端点0输出中断处理
- if(InterruptSource&0x02)UsbEp0In(); //端点0输入中断处理
- if(InterruptSource&0x04)UsbEp1Out(); //端点1输出中断处理
- if(InterruptSource&0x08)UsbEp1In(); //端点1输入中断处理
- if(InterruptSource&0x10)UsbEp2Out(); //端点2输出中断处理
- if(InterruptSource&0x20)UsbEp2In(); //端点2输入中断处理
- }
- if(ConfigValue!=0) //如果已经设置为非0的配置,则可以返回报告数据
- {
- if(!Ep1InIsBusy) //如果端点1输入没有处于忙状态,则可以发送数据
- {
- SendReport(); //则返回报告
- }
- }
- }
复制代码SendReport(); 发送按键的内容,按下一个按键的程序,思路是,先获取MPU6050陀螺仪的Y轴角速度,然后数据处理判断下,再发送按键,另一个读取X轴的角速度,类似这个。
- Value_Of_Y_Gyro=GetData(GYRO_YOUT_H);
- temp=abs(Value_Of_Y_Gyro);
- if(temp>10)
- {
- if(Value_Of_Y_Gyro<0)
- {
- Last_Y_Key=DOWN_KEY;
- Buf[i]=DOWN_KEY;
- }
- else
- {
- Last_Y_Key=UP_KEY;
- Buf[i]=UP_KEY; //
- }
- }
- else
- {
- Buf[i]=Last_Y_Key;
- }
复制代码
下位机只需在"按下"和"弹起"时发送一次即刻
那么怎么才能控制他的弹起呢?哪些是相关的?
谢谢,数字1键按下是发送00 00 59 00 00 00 00 00,如果发送完这个我没有发送其他的话,就是一直在按下?这样子好像不对啊?还是我上面的程序有问题,上面的Buf=DOWN_KEY; 就是8个字节后面6个其中一个。我做了实验,现象不是这样子的。大神能否再解释清楚一点?我也在做你的那个游戏,有时想一直按着up键才能加速,频率很快按下但是经常松开的话有时候是加不了速的
我的是一直按下的,你试试看像我这样填充发送数据的缓存区行不行,即按键值分配在固定的位置放置
QQ截图20140523180214.png (19.66 KB, 下载次数: 0)
下载附件
2014-5-23 18:04 上传
一周热门 更多>