社区导航

 
查看: 1779|回复: 19

[求助] 还是矩阵键盘,想自己做个标准键盘~~

[复制链接]

66

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2015-4-22 20:33:57 | 显示全部楼层 |阅读模式
买的键盘矩阵部分,想自己用AVR单片机写扫描软件,HID做usb发送,让这个键盘能做到和标准键盘使用起来一样,主要是能够实现 短按、长按、组合键,  现在卡在这个部分了 。 有没有大神做过这样的工作,能有键盘scan部分的源码最好了,或者给思路也行,谢谢!
此帖出自Atmel MCU论坛

回复

使用道具 举报

2908

TA的帖子

0

TA的资源

纯净的硅(高级)

Rank: 6Rank: 6

发表于 2015-4-30 00:35:52 | 显示全部楼层
楼主可以搜索一下GH60键盘项目
是一群玩机械键盘的geek整的,有些也是开源的
好像也是用AVR的片子
就是DIY一个完整的键盘了
注意前方烧钱示警......
So what......

回复 支持 1 反对 0

使用道具 举报

27

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2015-4-22 20:36:33 | 显示全部楼层
使用状态转移法写程序
最近研究STM32,会对库函数的源代码进行解读,会陆续更新

回复 支持 反对

使用道具 举报

66

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2015-4-22 21:07:28 | 显示全部楼层
盛夏之蝉 发表于 2015-4-22 20:36
使用状态转移法写程序

能给具体思路吗?主要是按键扫描部分    hid已经实现

回复 支持 反对

使用道具 举报

66

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2015-4-22 21:26:00 | 显示全部楼层
盛夏之蝉 发表于 2015-4-22 20:36
使用状态转移法写程序

有8*16 个按键    这么多的按键的组合键要怎么样写

回复 支持 反对

使用道具 举报

27

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2015-4-23 10:43:23 | 显示全部楼层
哦,小法 发表于 2015-4-22 21:26
有8*16 个按键    这么多的按键的组合键要怎么样写

可以每个按键占用一个bit位,那么组合按键就很容易确定
最近研究STM32,会对库函数的源代码进行解读,会陆续更新

回复 支持 反对

使用道具 举报

66

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2015-4-29 08:53:35 | 显示全部楼层
盛夏之蝉 发表于 2015-4-23 10:43
可以每个按键占用一个bit位,那么组合按键就很容易确定

16字节?128位      然后循环128次读到1就存下位数 ?



是这个思路吗

点评

嗯,使每一个按键都对应一个bit位,比如有键按下就置1,用完清零。组合键的那就同时查询对应位就可以了。  详情 回复 发表于 2015-4-29 12:23

回复 支持 反对

使用道具 举报

2779

TA的帖子

0

TA的资源

版主

Rank: 6Rank: 6

发表于 2015-4-29 09:44:19 | 显示全部楼层
8+16=24,整个状态占24位,再加上按下,抬起,长按状态32位的数据类型肯定够了.

回复 支持 反对

使用道具 举报

27

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2015-4-29 12:23:06 | 显示全部楼层
哦,小法 发表于 2015-4-29 08:53
16字节?128位      然后循环128次读到1就存下位数 ?



是这个思路吗

嗯,使每一个按键都对应一个bit位,比如有键按下就置1,用完清零。组合键的那就同时查询对应位就可以了。
最近研究STM32,会对库函数的源代码进行解读,会陆续更新

回复 支持 反对

使用道具 举报

2779

TA的帖子

0

TA的资源

版主

Rank: 6Rank: 6

发表于 2015-4-29 23:54:24 | 显示全部楼层
不需要循环,每个按键一个io状态对应一个键盘扫描的结果,定义一下哪个数对应哪个按键就行了.组合键是两个按键的逻辑与

回复 支持 反对

使用道具 举报

66

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2015-4-30 08:38:33 | 显示全部楼层
ljj3166 发表于 2015-4-30 00:35
楼主可以搜索一下GH60键盘项目
是一群玩机械键盘的geek整的,有些也是开源的
好像也是用AVR的片子
就是DIY一个完整的键盘了
注意前方烧钱示警......

哈哈  谢啦  钱不是问题啊   现在是单位想做这个事情   在标准键盘的矩阵上还加自己的功能键   


但是现在用的是很不正规的扫描机制   神奇的地方是所有想要的功能都能用。。


回复 支持 反对

使用道具 举报

66

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2015-4-30 10:21:03 | 显示全部楼层
ljj3166 发表于 2015-4-30 00:35
楼主可以搜索一下GH60键盘项目
是一群玩机械键盘的geek整的,有些也是开源的
好像也是用AVR的片子
就是DIY一个完整的键盘了
注意前方烧钱示警......

我大致看了一遍    玩这个键盘的烧钱之处在于 买机械键盘的东西  跟我写代码搭电路关系不大哦

回复 支持 反对

使用道具 举报

2779

TA的帖子

0

TA的资源

版主

Rank: 6Rank: 6

发表于 2015-4-30 11:18:46 | 显示全部楼层
标准键盘的键码是固定的,扩展功能键是有预留的.
怀疑你走错路了.

点评

我介绍下这个小项目 1.购买了一个笔记本的小键盘 , 出来是排线, 这个小键盘是没有mcu的 只是交出来它的矩阵的row0-7 和 col0-15 2.所以在8*16的矩阵中的键位是固定的 ,128个位置中 笔记本的键  详情 回复 发表于 2015-4-30 13:32

回复 支持 反对

使用道具 举报

66

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2015-4-30 13:32:56 | 显示全部楼层
huo_hu 发表于 2015-4-30 11:18
标准键盘的键码是固定的,扩展功能键是有预留的.
怀疑你走错路了.

我介绍下这个小项目   



1.购买了一个笔记本的小键盘 , 出来是排线, 这个小键盘是没有mcu的  只是交出来它的矩阵的row0-7 和 col0-15



2.所以在8*16的矩阵中的键位是固定的 ,128个位置中 笔记本的键盘只占用了其中的80+个, 剩下的做成设备上需要添加的的专门的功能键 ,也在键盘扫描里一起扫



3.标准键盘键码保持固定,也还是用usb发,   添加的按键用串口协议与上位机通信

点评

标准键盘能够同时检测到多按键,不知道怎么实现的。 我曾写过一个3*2的矩阵键盘,其实就6个按键,检测的时候最多能检测出按下特定的3个键,某些情况下分辨不出是按下了3个键还是4个键。 所以关于矩阵键盘,估  详情 回复 发表于 2015-5-9 16:18

回复 支持 反对

使用道具 举报

24

TA的帖子

0

TA的资源

宇宙尘埃

发表于 2015-5-9 13:53:00 | 显示全部楼层
做完后能分享吗~~~~~~~~~~~~

回复 支持 反对

使用道具 举报

1072

TA的帖子

0

TA的资源

版主

Rank: 6Rank: 6

发表于 2015-5-9 16:18:00 | 显示全部楼层
哦,小法 发表于 2015-4-30 13:32
我介绍下这个小项目   



1.购买了一个笔记本的小键盘 , 出来是排线, 这个小键盘是没有mcu的  只是交出来它的矩阵的row0-7 和 col0-15



2.所以在8*16的矩阵中的键位是固定的 ,128个位置中 笔记本的键盘只占用了其中的80+个, 剩下的做成设备上需要添加的的专门的功能键 ,也在键盘扫描里一起扫



3.标准键盘键码保持固定,也还是用usb发,   添加的按键用串口协议与上位机通信

标准键盘能够同时检测到多按键,不知道怎么实现的。
我曾写过一个3*2的矩阵键盘,其实就6个按键,检测的时候最多能检测出按下特定的3个键,某些情况下分辨不出是按下了3个键还是4个键。


所以关于矩阵键盘,估计最多也是只能检测出三个键来,还是特定的三个键。同时按下4个键恐怕很多时候都无法检测出来。

点评

调试过程中出现了一种情况 如果按下的三个键组成一个直角三角形,那么能与这三个键构成矩形的那个键也会被识别为低电平 我以为这就是四个按键被舍弃的原因吧  详情 回复 发表于 2015-5-11 08:26

回复 支持 反对

使用道具 举报

1072

TA的帖子

0

TA的资源

版主

Rank: 6Rank: 6

发表于 2015-5-10 19:06:59 | 显示全部楼层
http://bbs.eeworld.com.cn/thread-461639-1-1.html
昨天刚刚发的帖子,关于矩阵键盘的一些思路。

回复 支持 反对

使用道具 举报

66

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2015-5-11 08:26:23 | 显示全部楼层
qiushenghua 发表于 2015-5-9 16:18
标准键盘能够同时检测到多按键,不知道怎么实现的。
我曾写过一个3*2的矩阵键盘,其实就6个按键,检测的时候最多能检测出按下特定的3个键,某些情况下分辨不出是按下了3个键还是4个键。


所以关于矩阵键盘,估计最多也是只能检测出三个键来,还是特定的三个键。同时按下4个键恐怕很多时候都无法检测出来。

调试过程中出现了一种情况


  如果按下的三个键组成一个直角三角形,那么能与这三个键构成矩形的那个键也会被识别为低电平  



我以为这就是四个按键被舍弃的原因吧

点评

算法问题吧。我做的2*3键盘在很多时候能够分辨出按下了哪3个键。所以你的标准键盘应该能分辨出更多按键吧 估计为了保证特定组合键的识别率,它们在矩阵的排布上有特殊的设计,可以参考我上一条回复链接中的帖子,  详情 回复 发表于 2015-5-11 10:43

回复 支持 反对

使用道具 举报

1072

TA的帖子

0

TA的资源

版主

Rank: 6Rank: 6

发表于 2015-5-11 10:43:05 | 显示全部楼层
哦,小法 发表于 2015-5-11 08:26
调试过程中出现了一种情况


  如果按下的三个键组成一个直角三角形,那么能与这三个键构成矩形的那个键也会被识别为低电平  



我以为这就是四个按键被舍弃的原因吧

算法问题吧。我做的2*3键盘在很多时候能够分辨出按下了哪3个键。所以你的标准键盘应该能分辨出更多按键吧

估计为了保证特定组合键的识别率,它们在矩阵的排布上有特殊的设计,可以参考我上一条回复链接中的帖子,不过我这个是2*3的按键,你要识别多按键,势必需要更为复杂的逻辑。

点评

我这个设计没有去指定特定的组合键 只是舍弃了四个按键 若按下第四个键我是直接舍弃的  详情 回复 发表于 2015-5-11 14:09

回复 支持 反对

使用道具 举报

66

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2015-5-11 14:09:18 | 显示全部楼层
qiushenghua 发表于 2015-5-11 10:43
算法问题吧。我做的2*3键盘在很多时候能够分辨出按下了哪3个键。所以你的标准键盘应该能分辨出更多按键吧

估计为了保证特定组合键的识别率,它们在矩阵的排布上有特殊的设计,可以参考我上一条回复链接中的帖子,不过我这个是2*3的按键,你要识别多按键,势必需要更为复杂的逻辑。

我这个设计没有去指定特定的组合键     只是舍弃了四个按键  若按下第四个键我是直接舍弃的

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2017-7-28 10:41 , Processed in 0.623900 second(s), 26 queries , Redis On.

快速回复 返回顶部 返回列表