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

图4-1 系统软件结构
算法的关键是对按键值的处理。由于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;