电脑键盘怎么做到先按下的键先发,后按下的后发

[复制链接]
1521|15
手机看帖
扫描二维码
随时随地手机跟帖
瓜木|  楼主 | 2018-7-31 11:35 | 显示全部楼层 |阅读模式
本帖最后由 瓜木 于 2018-7-31 11:45 编辑

如题,不知道各位能不能看懂,现在不知道怎么程序处理按键的先按先发,以及同时按几个键,然后有一个键放开后,后面的键怎么替补上

比如按下A,就发'A',0X00,0X00,0X00,0X00,0X00,0X00,0X00
继续再按下B,X,N,M键就发,'A','B','X','N','M',0X00,0X00,0X00
这时松开B键就发'A','X','N','M',0X00,0X00,0X00,0X00,
这个程序要怎么编啊

相关帖子

ayb_ice| | 2018-7-31 13:16 | 显示全部楼层
每个键逻辑上完全独立就可以

使用特权

评论回复
瓜木|  楼主 | 2018-7-31 13:44 | 显示全部楼层
ayb_ice 发表于 2018-7-31 13:16
每个键逻辑上完全独立就可以

是每个键单独IO口的

使用特权

评论回复
ayb_ice| | 2018-7-31 13:47 | 显示全部楼层
瓜木 发表于 2018-7-31 13:44
是每个键单独IO口的

每个按键单独去抖就可以了

使用特权

评论回复
瓜木|  楼主 | 2018-7-31 13:59 | 显示全部楼层
ayb_ice 发表于 2018-7-31 13:47
每个按键单独去抖就可以了

MCU把按键已经读到了,但是要按照按下的顺序发给电脑,这个按顺序怎么处理呢

使用特权

评论回复
dirtwillfly| | 2018-7-31 14:03 | 显示全部楼层
楼主是要键盘支持多个按键同时按下?,可以用变量记录按键按下的顺序

使用特权

评论回复
瓜木|  楼主 | 2018-7-31 14:04 | 显示全部楼层
dirtwillfly 发表于 2018-7-31 14:03
楼主是要键盘支持多个按键同时按下?,可以用变量记录按键按下的顺序

是的,可以给多点提示吗

使用特权

评论回复
ayb_ice| | 2018-7-31 14:20 | 显示全部楼层
瓜木 发表于 2018-7-31 13:59
MCU把按键已经读到了,但是要按照按下的顺序发给电脑,这个按顺序怎么处理呢 ...

扫描是比较快的,看起来是同时按的,但实际也是有时间差的,检测到有效键就发就可以了

当然理论上也是有可能同时按下,这时随先发取决于软件处理了

使用特权

评论回复
瓜木|  楼主 | 2018-7-31 14:27 | 显示全部楼层
ayb_ice 发表于 2018-7-31 14:20
扫描是比较快的,看起来是同时按的,但实际也是有时间差的,检测到有效键就发就可以了

当然理论上也是有 ...

现在就是卡在这个软件处理上了,无从下手啊

使用特权

评论回复
宇容创行| | 2018-7-31 15:34 | 显示全部楼层
就是个链表

使用特权

评论回复
瓜木|  楼主 | 2018-7-31 16:14 | 显示全部楼层

能不能多给点提示呀,谢谢

使用特权

评论回复
宇容创行| | 2018-7-31 16:18 | 显示全部楼层
按下键,加到链尾,抬起键,从链表删除

使用特权

评论回复
diy1997| | 2018-8-1 20:26 | 显示全部楼层
读到指令直接发送不就行了?

要处理其它任务不能实时发送?

可以用缓存啊。

在内存开辟一块区域专门存储键盘指令。

按先进先出后进后出不就行了。

使用特权

评论回复
tianxj01| | 2018-8-2 23:02 | 显示全部楼层
Pc采用的是矩阵键盘+动态扫描。
设计的原理,可以保证每一个键盘按下,都可以读到对应的键值,矩阵键盘资料很多,自己度娘。
键值处理过程是这样的:
按照纵横原则,8X8可以设置64键盘,每一个纵电平变化,横线可以扫描检测8个键,并得到对应的读数,经过变换可以直接转换为键值。
纵线电平轮流变化,可以有3bit数据,加上检测读取的3bit,经过位与运算再拼接,就是一个扫描周期的综合键值。
键值读到了,该咋办咋办。。。。。。。。。。。。

使用特权

评论回复
神奇号| | 2018-8-3 07:32 | 显示全部楼层
tianxj01 发表于 2018-8-2 23:02
Pc采用的是矩阵键盘+动态扫描。
设计的原理,可以保证每一个键盘按下,都可以读到对应的键值,矩阵键盘资料 ...

正点原子有个支持连续按的程序

//按键处理函数
//返回按键值
//mode:0,不支持连续按;1,支持连续按;
//返回值:
//0,没有任何按键按下
//KEY0_PRES,KEY0按下
//KEY1_PRES,KEY1按下
//WKUP_PRES,WK_UP按下
//注意此函数有响应优先级,KEY0>KEY1>WK_UP!!
u8 KEY_Scan(u8 mode)
{         
        static u8 key_up=1;//按键按松开标志
        if(mode)key_up=1;  //支持连按                  
        if(key_up&&(KEY0==0||KEY1==0||WK_UP==1))
        {
                delay_ms(10);//去抖动
                key_up=0;
                if(KEY0==0)return KEY0_PRES;
                else if(KEY1==0)return KEY1_PRES;
                else if(WK_UP==1)return WKUP_PRES;
        }else if(KEY0==1&&KEY1==1&&WK_UP==0)key_up=1;              
        return 0;// 无按键按下
}

使用特权

评论回复
瓜木|  楼主 | 2018-8-7 19:41 | 显示全部楼层
神奇号 发表于 2018-8-3 07:32
正点原子有个支持连续按的程序

//按键处理函数

我不是要问怎么读按键是啊,我是要问怎么把读到的按键按照按下的顺序发送给PC

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

51

帖子

0

粉丝