新闻中心

EEPW首页>嵌入式系统>设计应用> 51单片机系统与标准PC键盘的接口模块设计

51单片机系统与标准PC键盘的接口模块设计

作者: 时间:2011-11-07 来源:网络 收藏
在主程序中检测到blnDataValid标志后,即说明在键盘接收缓冲区中已接收到一个新的位置扫描码序列,程序根据这个序列的不同特点做不同的处理,最后再根据硬件跳线的设置得到相应按键的Windows虚拟键代码或ASCII码与OEM扫描码,图4中的跳线接至“W”位时,编码为Windows虚拟键代码。虚拟键代码是Windows系统中引入的一组按键编码常量,每一个按键都有惟一的码值与之对应。ASCII码与OEM扫描码则是在DOS系统定义的,但在Windows系统中沿用的按键码值定义,每一个按键都有两个码值与之对应,对于功能键,例如F1、HOME、UP等,只存在OEM扫描码,其ASCII码为0,参见表1。

栈是程序中设置的发送缓冲区,它是按“先进先出”原则建立的32字节循环队列,有一个队列头指针和一个队列尾指针。进队列时,编码数据进入由队列尾指针所指单元,同时队列尾指针增量,指向下一个单元,当数据不断进入队列,使尾指针指向队列末端时,尾指针循环重新绕回队列始端;出队列时,编码数据从队列头指针所指的单元取出,同时队列头指针增量,指向下一个单元,在头指针指向队列末端时,也要重新绕回队列始端,但头指针始终不能“超过”尾指针。如果按键速度快于上位单片机接收码值的速度,有可能尾指针绕回后与头指针再次相等,这时表明队列已满,不能再存入数据,如果此时再有键按下,那么栈溢出指示灯将点亮。

在系统中设立了三个标志分别对应于CAPS LOCK键、NUM LOCK键及SCROLL LOCK键的状态,每次有这三个键按下时,程序都要翻转相应标志,然后向键盘发送EDH命令,命令键盘对其上的三个LED指示灯做相应激励。
在向上位单片机发送栈首的码值之前要先检测ACK信号状态以确定上位单片机是否已取走上次码值。若ACK信号有效,则将码值锁存在P1口上,然后由P3.7产生模拟的时钟脉冲信号,一方面将8位并行码值置入串-并转换芯片(74LS165)中,另一方面将触发器(74LS74)置为1,使端变为0,为上位单片机提供码值准备好(PS_READY#)的状态信号,并点亮指示灯。在上位单片机中,可查询此状态信号也可利用此状态信号申请中断。上位单片机若采用并行接口方法,则发出读缓冲器信号(P_RD#)和片选信号(P_CS#),便可通过三态缓冲器(74LS244)取得键值;若采用串行接口方法,则需发出串行时钟(S_CLK),从74LS165的串行数据端(S_DAT)读回8位码值。在上位单片机读取完当前的键值后,ACK信号将由握手逻辑自动置为有效,系统可通过检测ACK信号的状态以发送下一个码值。

51单片机系统与标准PC键盘的接口模块设计

图4 主程序流程图

结语
实践证明应用该模块不但可大大地简化键盘电路及程序设计,而且在使用高级语言书写程序时更加方便。该模块可识别标准上的所有按键,并能自动考虑SHIFT、NUMLOCK及CAPLOCK键对编码的影响。对于DOS系统中CRTL+按键、ALT+按键等组合键,该模块并未考虑,但相对上位的而言,目前所提供的按键数量已足够用了。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭