电竞

一種PC鍵盤的革命性設計消費電子

2019-11-08 22:18:00来源:励志吧0次阅读

一种PC键盘的革命性设计 - 消费电子 - 电子工程

当电脑上别的配件都跟着摩尔定律越来越时髦的时候,键盘总是显得比较落寞,而“掌心键”的问世则将传统PC键盘的设计引领至一个全新的领域掌心键,是放在单手掌中使用,对应于五个手指各有一个多功能按键,并通过五指同时组合操作,从而实现字符的输入;自带有点阵显示屏,通过其指示各种操作状态,考虑到用户使用习惯和人体特征,掌心键的外形设计大小适中,适合大众人群的手形,不论男女,皆可轻松的一手掌握,独特的按键凹槽设计将使手指的放位倍感舒适,而且降低了对坐姿的要求,同时支持左右手互换使用,且保证长时间使用也不易感到疲劳

2 系统结构及工作原理

掌心键是通过五指组合方式进行输入,共有25=32种组合,其中包括一种无任何键按下的组合,实际可用组合则为31种为了设计中描述、编程方便,将五指对应一个5位二进制数的5个位,D4D3D2D1D0,母指对应D4位,食指对应D3位,中指对应D2位,无名指对应D1位,小指对应D0位,按下手指的位值为1,不按的位值为0,这样每次组合按键时产生了一个按键值n,将32种组合定义为Km(m=0…31)

为了单手能方便输入PC键盘的所有按键,首先要将PC按键分集,分为数字集、小写字母集、大写字母集、标点符集、键集、功能键集等,表列出了部分键集详细说明;输入时先选键集,再输入字符在任何状态下都将K31定义为集切换,然后按Kn(n=1…30)可选30种键集,再按键集下相应字符对应的Kn即可完成一个字符的输入如果接下来的字符是同一个键集的,就不必再切换键集,直接输入即可,这样可提高输入速度输入任一个字符最多按3次键,即先按集转换,再选子集,然后输入指定字符,大部分时间都只需一次按键即可

子集中以字母集用键值KN最多,从K1到K26,所有子集中的K27、K28、K29、K30很少用到,当前统一定义成最常用的全局通用功能键,就如集切换K31;分别定义为K27:空格,K28:回删,K29:后移,K30:回车为了方便使用,用户可以自己配置,重新定义以上键值的功能

对于PC键上多个键组合操作的情况,这里设置一个本地KeepLock状态,有三个键处理该状态,KeepStart是进入KeepLock,KeepRep是保持此前按的所有键不松开,称为重复键组KeepGroup,其后每按一次键与KeepGroup组合一起发给PC,直到KeepEnd结束KeepLock状态比如在文本时,要选择光标后的两个字符,在PC上应按两次Shift+ArrowR,操作过程是:KeepStart、ShiftL、KeepRep、ArrowR、ArrowR、KeepEnd;如果要输入两次Ctrl+Alt+Del,过程是:KeepStart、CtrlL、AltL、KeepRep、Del、Del、KeepEnd

3 硬件设计

掌心键系统硬件结构如图所示硬件以PHILIPS公司含ARM7核的LPC2114单片机为中心,具有背光、黑白128X64点阵LCD屏,五个独立式多功能按键,配有PS2接口

图系统硬件结构图

电源来自PS2键盘接口,或电池,5V电源经过LM.3和LM.8稳压后供给各部分电路显示部分选用COG的128X64点阵黑白LCD液晶,以I/O方式接入LPC2114单片机,LCD用来提示各种状态,以及输入的信息,亦用于脱机录入的信息显示MAX3232构成RS-232串行通信接口,实现掌心键与PC机之间资料相互传送五个独立按键都以外部电平中断方式输入,没有按键时,系统进入节电状态,只有按键时系统才短时工作,在脱机状态下工作时,电池供电的节电问题显得非常重要设置蜂鸣器是为了协助提示按键操作而JTAG接口是保留给软件开发和升级时使用

正确检测掌心键的按键操作是硬件设计的重点普通按键检测时,可以用软件方法处理按键机械抖动问题,程序过滤按键前后20ms时间即可解决抖动而掌心键是多个键组合按下实现单PC键,不但要对每个按键去抖动,还要解决多键同时按下的时间差问题刚开始使用掌心键时,操作速度较慢,随着使用时间的延长,按键速度越来越快,这样就有一个熟练的过程为此,将去抖动的时间设成可配置的,设为JitterTime,当有操作时,保持JitterTime时间键Kn没有变化,即认为是Kn,从一个Kn变为Km,也是用JitterTime时间去抖动,当Km=0时就表明没有任按键操作JitterTime的范围从20ms到2000ms

4 软件设计

软件以uCos实时嵌入式操作为核心,按功能分为多个任务,软件采用C语言编写,主要完成两部分功能,其一是本地按键和显示,其二是将按键变为PC键扫描码通过PS2接口送给PC机软件结构如图所示

图 系统软件结构

算法的关键是对按键值的处理由于PC键盘中的每个键都具有通码(接下)和断码(松开),产生的键盘扫描码由多个字节组成,而掌心键是多次操作才能构成PC键盘的单次操作,所以在算法中要设置很多状态变量来记忆操作过程,在完成一个PC键操作后才通过PS2接口输出通码或断码下面给出了详细的原码程序和注释

首先说明以下重要的全局变量:

char KeySet; //存入子键集号,因为不同子集的Kn值代表不同的键

char KeyStatus; //记忆处理状态,在不同阶段Kn有不同的意义

char …….

函数KeyMessage( )将按键原始值分集处理,分集后的值调用函数KeySend( )保存或发送,函数KeySendOn( )发送通码的扫描码,而函数KeySendOff( )发送断码的扫描码

void KeySend( unsigned char OnCode ) //发送通码

{ if( KeepLock==1){ //保存组合通码KeepGroup

KeepGroup[KeepPtr++] = OnCode;

return; //只保存,不发送

}

If(KeepLock==2)……..

KeySendOn( OnCode ); //发送通码的扫描码

}

void KeySendOn( unsigned char OnCode )

{ KeyOnCodeOff = 0; //设标志,要求发断码

KeyOnCode = OnCode;

//记忆通码,以便发相应断码

switch( KeyOnCode ){ //根据KeyOnCode发送通码

OnCode_A: Ps2Out(0x1C); break;

OnCode_ArrowR: Ps2Out(0xE0); Ps2Out(0x74); break;

……..}}

void KeySendOff( void ) //发送断码的扫描码

{ if( KeyOnCodeOff ) return; //没发过通码,所有没有断码

KeyOnCodeOff = 1; //防止连续发断码

switch( KeyOnCode){ //根据最后发送的通码KeyOnCode补发断码

OnCode_A: Ps2Out(0xF0); Ps2Out(0x1C);

………}}

void KeyMessage( unsigned char Kn) //Kn是原始按键值

{ if( Kn==31){ KeyStatus= 1 return; }

if( KeyStatus==1){ if(Kn != 0 ){ KeySet= Kn KeyStatus= 2 } return; }

if( KeyStatus==2){

if( Kn==0){ KeySendOff(); return; }

if( KeySet==1){

switch( Kn ){

1: CapsLock =! CapsLock; KeySend(OnCapsLock); break;

2: NumLock=! NumLock; KeySend(OnNumLock); break;

3: ScrollLock=!ScrollLock; KeySend(OnScrollLock); break;

………… //其它情况处理同上

}

return;

}

if(KeySet==2){ //处理数字 }

if(KeySet==3){ //处理字母 }

…………}}

5 结束语

以目前PC键盘设计中比较突出的布局设计,反手操作,坐姿,坐高等问题为中心,以模拟试验的方法获得掌心键设计的基本原则,它非常适用于现代的青少年人群,在部分学生用户中实际测试,结果一周左右的时间,他们就能熟练操作掌心键,实现单手快速输入此外,该方案还可以用到大部分的掌上移动设备中,比如PDA和掌心键的进一步完善,是增加按键的上推下拨功能,这样将一个键变为三个键,具有45=1024种组合值,选择其中部分容易操作的组合,即可实现更快的输入速度;配合拇指的轨迹球使用,单手即可实现鼠标和键盘双操作

本文作者的创新点:掌心键设计充分体现了后PC时代“功能主导型”这一特质,它不仅具备传统键盘的所有功能,且可将其置于手掌中,单手五键组合操作,并具有脱机输入文本文件,联机拷贝文件的功能,该设计具有良好的市场前景和推广应用价值掌心键不再受到传统PC键盘置放位置的约束,而成为真正的可随意移动的掌中键盘,相信在不久的将来,掌心键必将成为PC用户的“掌中乾坤”

慢性心力衰竭的常见诱因
要止咳先祛痰该怎么做
什么咳嗽药不含麻黄
分享到: