邬法磊,李晓阳,尘 源
(青岛理工大学,山东 青岛266033)
专用键盘常用作单片机系统中的输入设备,因为要单独设计,不免存在设计制作成本高,通用性差,可靠性不高等诸多不足。在一些按键要求较多的应用系统中使用专用键盘显得更不合时宜。由于PS/2键盘应用较为广泛,且满足多系统要求,所以本文考虑将PS/2标准键盘应用到单片机系统中,既节约了制造成本,又可以满足按键要求多的诸多场合,具有一定的实际意义。
与单片机相连的是CLOCK和DATA引脚,单片机通过这两个引脚实现了与PS/2键盘的通信,接口物理特性见图1。
图1 接口物理特性
ps/2通讯协议是一种双向同步串行通讯协议。通讯的两端通过CLOCK同步,时钟信号总是由键盘发出,并通过DATA交换数据。键盘向主机发送数据时,首先检查CLOCK是否为高电平。如果不是,那么主机抑制了通讯。具体时序如图2所示,其中主机一直为高电平。
每一帧数据中开始位总是为0,数据校验采用奇校验方式,停止位始终为1。从设备到主设备通信时,从设备总是在时钟线为高时改变数据线状态,主设备在时钟下降沿读入数据线状态。
图2 单片机接收时序
目前,PC机使用的PS/2键盘都默认采用第二套扫描码。扫描码有两种不同的类型:“通码(make code)”和“断码(break code)”。当一个键被按下或持续按住时,键盘会将该键的通码发送给主机。而当一个键被释放时,键盘会将该键的断码发送给主机。例如,按下A键,通码为0x1c,松开按键时,断码为0xF0 0x1c.
根据键盘按键扫描码的不同,可将按键分为3类:
第1类按键通码为一个字节,断码为0xF0+通码形式。如A键,其通码为0x1C;断码为0xF0 0x1C。
第2类按键通码为两字节0xE0+0xXX形式,断码为0xE0+0xF0+0xXX形式。如Right Ctrl键,其通码为0xE0 0x14;断码为0xE0 0xF0 0x14。
第3类特殊按键有两个,Print Screen键,其通码为0xE0 0x12 0xE0 0x7C;断码为0xE0 0xF0 0x7C0xE0 0xF0 0x12.Pause键,其通码为0xE1 0x14 0x77 0xE1 0xF0 0xl4 0xF0 0x77;断码为空。
组合按键扫描码的发送是按照按键发生的次序,如按下面顺序按左Shift+A键:按下左Shift键;按下A键;释放A键;释放左Shift键,那么计算机上接收到的一串数据为0×12 0×1C0×F0 0×1C0×F0 0×12.在文中的驱动程序设计中,就是根据按键的分类对其分别进行处理。
PS/2键盘与单片机的连接方式如图3所示。P3.0接 PS/2数据线;P3.2(INT0)接 PS/2时钟线。因为单片机的P3口内部是带上拉电阻的,所以PS/2的时钟线和数据线可以直接与单片机的P3相连接。单片机接收键盘数据时,数据线上的信号在时钟为低时已经稳定,所以可以采用中断方式实现接收数据(图3)。
图3 硬件设计
软件流程如图4。
本文程序通过中断的方式接收按键值,转换代码后送给LCD1602显示,中断程序如下:
void Keyboard_out(void)interrupt 0
{
if((IntNum >0)&&(IntNum <9))
{
KeyV=KeyV>>1;//因键盘数据是低>>高,结合上一句所以右移一位
图4 软件流程
if(Key_Data)
KeyV= KeyV|0x80;//当键盘数据线为1时到最高位
}
IntNum++;
while(!Key_CLK);//等待PS/2CLK拉高
if(IntNum >10)
{
IntNum=0;//当中断11次后表示一帧数据收完,清变量准备下一次接收
BF=1;//标识有字符输入完了
EA=0;//关中断等显示完后再开中断
}
本文着重介绍了PS/2通信协议,并将其应用到单片机系统中,可以应用到按键要求多的一些场合,而且对于设计专用键盘也有一定的指导意义。
[1]胡汗才.单片机原理及系统设计[M].北京:清华大学出版社,2002.
[2]孙德文.微型计算机技术[M].北京:高等教育出版社,2002.
[3]宁 飞,王维华,孔 宇.微型计算机原理与接口实践[M].北京:清华大学出版社,2006.