设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客

构建一个属于软件开发者的键盘

2015-2-5 21:49| 发布者: joejoe0332| 查看: 6767| 评论: 0|原作者: 陈明|来自: DZone

摘要: 作为软件开发者,键盘可以说是我们最亲密的“朋友”之一。频繁的敲击键盘让定制键盘成为急需品,而软件工程师LÁSZLÓ MONDA为我们详细介绍了其制作“终极黑客键盘”的具体过程。 ...


第三步:一个键盘两个部分

  到目前为止,我们已经构建了一个普通键盘的开端。但是我们的目标是先进的人体工程学,鉴于人都有两只手,我们最好添加另一半键盘。


  另一半的键盘将具有另一个键盘矩阵,重复之前的步骤。而其中令人兴奋的是两部分键盘之间的通信,这里有三个最受欢迎的电子设备互连协议:SPI、I2C和UART。在实际当中,我们会在这种情况下用到UART:


  UART需要同行使用相同的波特率、数据位和停止位。现在左键盘通过UART将一个字节的信息发送到右键盘,以此代表按下键或释放键,右键盘对这些信息进行半加工并在相应的内存中对这些全键盘矩阵数组的状态进行操作。


  左键盘发送信息示例:

  1. USART_SendByte(IsKeyPressed<<7 | Row*COLS_NUM + Col);  


  右键盘接受信息如下:

  1. void KeyboardRxCallback(void)  
  2. {  
  3.     uint8_t Event = USART_ReceiveByte();  
  4.     if (!MessageBuffer_IsFull(&KeyStateBuffer)) {  
  5.         MessageBuffer_Insert(&KeyStateBuffer, Event);  
  6.     }  
  7. }  


  KeyboardRxCallback()中断处理程序会在一个字节通过UART被接收时触发,考虑到中断处理程序应该尽快执行,所以收到的信息会放到一个环形的缓冲区留待后面处理。环形缓冲区最终会被主循环处理,键盘矩阵也会基于信息而被更新。


  上面所说的是实现该点的最简单的方法,但是最终的协议要更加复杂。你需要考虑多字节信息的处理,而且个人信息也要通过CRC-CCITT校验来检查其完整性。


  在这一点上,我们的实验板模型或许会让你印象深刻:


第四步:满足LED显示屏

  这是为了让用户能够定义多个特定于应用的键映射来提高生产效率。用户需要意识到一些正被用于键映射的方式,一个集成的LED显示屏被构建于键盘内,下图展示了这种模型:


  LED显示是由一个8x6矩阵实现的:


  每两行红色LED符号代表14-segment LED显示的分段,白色LED符号则代表了额外的三个状态指标。


  通过LED驱动电流并使其亮起来,相应的列设为高电压,相应的行设为低电压。该系统一个有趣的结果是,在任何给定的时刻,只有一列是可以被启用的,而其他列是被禁用的。有人可能会认为这套系统不能工作于整个LED,但是在现实中,列和行更新的太快以至于凭人的肉眼无法看到明显的闪烁。



酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部