PS2键盘接口程序设计总结
PS2通信协议说明与接口定义(键盘和鼠标)

PS2键盘与鼠标的接口定义针脚定义:原理PS/2鼠标接口采用一种双向同步串行协议。即每在时钟线上发一个脉冲,就在数据线上发送一位数据。在相互传输中,主机拥有总线控制权,即它可以在任何时候抑制鼠标的发送。方法是把时钟线一直拉低,鼠标就不能产生时钟信号和发送数据。在两个方向的传输中,时钟信号都是由鼠标产生,即主机不产生通信时钟信号。如果主机要发送数据,它必须控制鼠标产生时钟信号。方法如下:主机首先下拉时钟线至少100μs 抑制通信,然后再下拉数据线,最后释放时钟线。通过这一时序控制鼠标产生时钟信号。当鼠标检测到这个时序状态,会在10ms内产生时钟信号。如图3中A 时序段。主机和鼠标之间,传输数据帧的时序如图2、图3所示。2.2 数据包结构在主机程序中,利用每个数据位的时钟脉冲触发中断,在中断例程中实现数据位的判断和接收。在实验过程中,通过合适的编程,能够正确控制并接收鼠标数据。但该方案有一点不足,由于每个CLOCK都要产生一次中断,中断频繁,需要耗用大量的主机资源。PS/2鼠标的四种工作模式是:Reset模式,当鼠标上电或主机发复位命令0xFF给它时进入这种模式;Stream模式鼠标的默认模式,当鼠标上电或复位完成后,自动进入此模式,鼠标基本上以此模式工作;Remote模式,只有在主机发送了模式设置命令0xF0后,鼠标才进入这种模式;Wrap模式,这种模式只用于测试鼠标与主机连接是否正确。PS/2鼠标在工作过程中,会及时把它的状态数据发送给主机。发送的数据包格式如表1所示。Byte1中的Bit0、Bit1、Bit2分别表示左、右、中键的状态,状态值0表示释放,1表示按下。Byte2和Byte3分别表示X轴和Y轴方向的移动计量值,是二进制补码值。Byte4的低四位表示滚轮的移动计量值,也是二进制补码值,高四位作为扩展符号位。这种数据包由带滚轮的三键三维鼠标产生。若是不带滚轮的三键鼠标,产生的数据包没有Byte4 其余的相同。一.PS/2 鼠标键盘协议PC 键盘可以有6 脚的mini-DIN 或5 脚的DIN 连接器如果你的键盘是6 脚的mini-DIN 而你的计算机是5 脚的DIN 或者相反这两类连接器可以用上面提到的适配器来兼容具有6 脚mini-DIN 的键盘通常被叫做PS/2 键盘而那些有5 脚DIN 叫做AT 设备XT 键盘也使用5 脚DIN 但它们非常古老并且多年前就不生产了所有现代的为PC 建造的键盘不是PS/2,AT 就是USB 的这篇文章不适用于USB 设备它们使用了一种完全不同的接口。
ps2键盘程序

//=================================================
unsigned int minglingjzhi[30]; int shifti=0; unsigned char makecode[47]=
{0x1c,0x32,0x21,0x23,0x24,0x2b,0x34,0x33,0x43,0x3b,0x42,0x4b,0x3a,0x31,0x4
minglingjzhi[minglingi]=minglingj;minglingi++;minglingj=0; } } } } } else if(keydata==0x00e1){//判断是否是e1 for(m=0;m<7;m++){ while(1){ if(P1_2==0){data[weishu]=P0_0; weishu++; while(P1_2==0) ; if(weishu==11)break; } *P_Watchdog_Clear=0x0001; } weishu=0; } } else if(keydata==0x00f0){//判断是否是f0 while(1){ if(P1_2==0){data[weishu]=P0_0; weishu++; while(P1_2==0) ;
if(weishu==11)break; } *P_Watchdog_Clear=0x0001; } weishu=0; } else{//以上都不符合,则是通码 if(busy==1){ if(keydata==0x0076) zongwancheng=1; else if(keydata=0x0007) zanting=1; } else{ switch(keydata){ case 0x005a://enter if((minglingj==0)&minglingi) startflag=1; else if(minglingj) {minglingjzhi[minglingi]=minglingj;minglingj=0;minglingi++;} break; case 0x0005://f1 startflag=1;fflag=1; break; case 0x0006://f2 startflag=1;fflag=2; break; case 0x0004://f3 startflag=1;fflag=3;
PS2通信协议说明与接口定义(键盘和鼠标)

PS2键盘与鼠标的接口定义针脚定义:原理PS/2鼠标接口采用一种双向同步串行协议。即每在时钟线上发一个脉冲,就在数据线上发送一位数据。在相互传输中,主机拥有总线控制权,即它可以在任何时候抑制鼠标的发送。方法是把时钟线一直拉低,鼠标就不能产生时钟信号和发送数据。在两个方向的传输中,时钟信号都是由鼠标产生,即主机不产生通信时钟信号。如果主机要发送数据,它必须控制鼠标产生时钟信号。方法如下:主机首先下拉时钟线至少100μs 抑制通信,然后再下拉数据线,最后释放时钟线。通过这一时序控制鼠标产生时钟信号。当鼠标检测到这个时序状态,会在10ms内产生时钟信号。如图3中A 时序段。主机和鼠标之间,传输数据帧的时序如图2、图3所示。2.2 数据包结构在主机程序中,利用每个数据位的时钟脉冲触发中断,在中断例程中实现数据位的判断和接收。在实验过程中,通过合适的编程,能够正确控制并接收鼠标数据。但该方案有一点不足,由于每个CLOCK都要产生一次中断,中断频繁,需要耗用大量的主机资源。PS/2鼠标的四种工作模式是:Reset模式,当鼠标上电或主机发复位命令0xFF给它时进入这种模式;Stream模式鼠标的默认模式,当鼠标上电或复位完成后,自动进入此模式,鼠标基本上以此模式工作;Remote模式,只有在主机发送了模式设置命令0xF0后,鼠标才进入这种模式;Wrap模式,这种模式只用于测试鼠标与主机连接是否正确。PS/2鼠标在工作过程中,会及时把它的状态数据发送给主机。发送的数据包格式如表1所示。Byte1中的Bit0、Bit1、Bit2分别表示左、右、中键的状态,状态值0表示释放,1表示按下。Byte2和Byte3分别表示X轴和Y轴方向的移动计量值,是二进制补码值。Byte4的低四位表示滚轮的移动计量值,也是二进制补码值,高四位作为扩展符号位。这种数据包由带滚轮的三键三维鼠标产生。若是不带滚轮的三键鼠标,产生的数据包没有Byte4 其余的相同。一.PS/2 鼠标键盘协议PC 键盘可以有6 脚的mini-DIN 或5 脚的DIN 连接器如果你的键盘是6 脚的mini-DIN 而你的计算机是5 脚的DIN 或者相反这两类连接器可以用上面提到的适配器来兼容具有6 脚mini-DIN 的键盘通常被叫做PS/2 键盘而那些有5 脚DIN 叫做AT 设备XT 键盘也使用5 脚DIN 但它们非常古老并且多年前就不生产了所有现代的为PC 建造的键盘不是PS/2,AT 就是USB 的这篇文章不适用于USB 设备它们使用了一种完全不同的接口。
ps2键盘接口原理

5 章
(1)ASCII字符的扫描码即ASCII码+键码。
键
( 2 ) 扩 充 的 ASCII 字 符 的 扫 描 码 即 00+ 扩 充
盘 与
ASCII码。
鼠 标
(3)袖珍键盘即ASCII码+键码或ASCII码+E0。
接 口
(4)增加键即E0+键码,若与袖珍键重复的键
则为00+键码。
第十七页,编辑于星期三:四点 十九分。
地线
电源
CLOCK OUT
第
P21 Vcc
5 章
双向时钟
Vdd
REQ IN
EA
P10 Vss
电容
五芯插头
INT
键
1
3
X2
盘
X1
电阻
与
2
DATA OUT
P22 DB6
鼠
4
5
8048
键盘
标
双向数据
接
口
DATA IN
DB0 P11 T1
RESET
扫描 KEYDEP
复位线
图5.8 8048和键盘接口的连接图
键
状 态 寄 存 器 064H
总
盘
线
与 鼠 标
数据 总线 输出缓冲寄存器
060H
P14 微 机 系 统 板 RAM
输
P15 跨 接 器 安 装
入
P16 显 示 器 类 型
端
P17 键 盘 锁 定
接
口
口
ROM
RAM
图5.11 键盘接口功能框图
第三十一页,编辑于星期三:四点 十九分。
第
表5.2 8042寄存器端口分配及读写控制表
PS2通信协议说明与接口定义(键盘和鼠标)

PS2键盘与鼠标的接口定义针脚定义:原理PS/2鼠标接口采用一种双向同步串行协议。即每在时钟线上发一个脉冲,就在数据线上发送一位数据。在相互传输中,主机拥有总线控制权,即它可以在任何时候抑制鼠标的发送。方法是把时钟线一直拉低,鼠标就不能产生时钟信号和发送数据。在两个方向的传输中,时钟信号都是由鼠标产生,即主机不产生通信时钟信号。如果主机要发送数据,它必须控制鼠标产生时钟信号。方法如下:主机首先下拉时钟线至少100μs抑制通信,然后再下拉数据线,最后释放时钟线。通过这一时序控制鼠标产生时钟信号。当鼠标检测到这个时序状态,会在10ms内产生时钟信号。如图3中 A 时序段。主机和鼠标之间,传输数据帧的时序如图2、图3所示。2.2 数据包结构在主机程序中,利用每个数据位的时钟脉冲触发中断,在中断例程中实现数据位的判断和接收。在实验过程中,通过合适的编程,能够正确控制并接收鼠标数据。但该方案有一点不足,由于每个CLOCK都要产生一次中断,中断频繁,需要耗用大量的主机资源。PS/2鼠标的四种工作模式是:Reset模式,当鼠标上电或主机发复位命令 0xFF给它时进入这种模式;Stream模式鼠标的默认模式,当鼠标上电或复位完成后,自动进入此模式,鼠标基本上以此模式工作;Remote模式,只有在主机发送了模式设置命令 0xF0后,鼠标才进入这种模式;Wrap模式,这种模式只用于测试鼠标与主机连接是否正确。PS/2鼠标在工作过程中,会及时把它的状态数据发送给主机。发送的数据包格式如表1所示。Byte1中的Bit0、Bit1、Bit2分别表示左、右、中键的状态,状态值0表示释放,1表示按下。Byte2和Byte3分别表示X轴和Y轴方向的移动计量值,是二进制补码值。Byte4的低四位表示滚轮的移动计量值,也是二进制补码值,高四位作为扩展符号位。这种数据包由带滚轮的三键三维鼠标产生。若是不带滚轮的三键鼠标,产生的数据包没有Byte4 其余的相同。一.PS/2 鼠标键盘协议PC 键盘可以有6 脚的mini-DIN 或5 脚的DIN 连接器如果你的键盘是6 脚的mini-DIN 而你的计算机是5 脚的DIN 或者相反这两类连接器可以用上面提到的适配器来兼容具有6 脚mini-DIN 的键盘通常被叫做PS/2 键盘而那些有5 脚DIN 叫做AT 设备XT 键盘也使用5 脚DIN 但它们非常古老并且多年前就不生产了所有现代的为PC 建造的键盘不是PS/2,AT 就是USB 的这篇文章不适用于USB 设备它们使用了一种完全不同的接口。
基于FPGA的PS2键盘控制设计及仿真实现

本科毕业论文(设计)论文题目:基于FPGA的PS2键盘控制设计及仿真实现作者声明本毕业论文(设计)是在导师的指导下由本人独立撰写完成的,没有剽窃、抄袭、造假等违反道德、学术规范和其他侵权行为。
对本论文(设计)的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。
因本毕业论文(设计)引起的法律结果完全由本人承担。
特此声明作者专业:通信工程作者学号:作者签名:年月日基于FPGA的PS2键盘控制设计及仿真实现The Design and Simulation Implementation of the PS2 Keyboard Control based on FPGA2013年5月10日摘要本文简述了PS2键盘的特点和工作原理,重点介绍了在FPGA 上实现PS2键盘的结构设计和VHDL代码设计。
PS2键盘具有价格低、通用可靠,且连接线少(仅使用2根信号线)的特点。
并可满足多种系统的要求。
FPGA(Field Programmable Gate Array)是一类高集成度的可编程逻辑器件,它结合EDA技术以硬件描述语言、电路原理图、状机等形式输入设计逻辑;并提供功能模拟、时序仿真等模拟手段,再经过一系列的变换,将输入逻辑转换成FPGA器件所需的编程文件,以实现专用集成电路ASIC。
应用FPGA设计PS2键盘控制器,不仅有硬件电路简单,更具灵活性,集成度高更容易移植等特点,更重要的是现代EDA(电子设计自动化)技术提供了一种很好的途径,利用VHDL硬件描述语言和FPGA器件可以很方便地构建键盘扫描模块。
设计使得使用VHDL语言基于FPGA芯片实现PS2键盘成为研究的方向。
本文对基于VHDL的PS2键盘实现进行了研究,并设计了PS2键盘。
所做的主要工作为:(1)以PS2键盘控制的基本理论为依据,对其进行了详细的讨论。
(2)本设计中采用了自上而下的层次化、模块化的设计思想,将整个接口划分为多个模块,同时利用VHDL语言的描述方法对各个功能模块进行了设计,最终完成了PS2键盘的系统设计。
基于单片机的PS2键盘设计
PS2键盘在单片机上的应用摘要:在嵌入式PC应用系统中,作为人机交互设备的键盘,往往采用结构简单按键少的矩阵键盘。
标准键盘虽然能直接与嵌入式PC机的PS/2接口相连,但是体积大,按键多,不能满足需求,本文提出用一种AT89C52单片机实现具有标准PS/2接口的矩阵键盘,具有便捷,实用的特点。
关键词:PS/2接口,PS/2键盘,拨号键,AT89C52,LCD1602Abstract:PS/2 interface is one of the most useful mouse interface.It was IBM’s patent named osulum before. It is the dedicate interface of mouse and keyboard. This text implied a plan using PS/2 to make a system. PS/2 tansmit the data which was pressed, and AT89C52 receive it ,disposed it and transmit it to Lcd1602. Lcd1602 discover it to make us know which key has been pressed. PS/2 simulate a phone’s dial keyboard. This system’s feature is the circuit is sample and useful.Keywords:PS/2 keyboard, AT89C52, LCD1602,PS/2 interface,dial keyboard目录1、前言 (1)2、整体方案设计 (2)2.1方案论证 (2)2.2方案比较 (3)3、单元模块设计 (4)3.1PS2键盘模块 (4)3.2单片机模块 (6)3.3LCD显示模块 (7)4、软件设计 (9)5、系统技术指标及精度和误差分析 (10)6、结论 (11)7、设计小结 (12)8、致谢 (14)9、参考文献 (14)附录1:电路总图 (15)附录2:仿真图 (16)附录3:软件代码 (17)1、前言单片机因其性价比高, 处理能力强, 且抗干扰能力好, 在医疗器械、机电液控制、数据传输等各类工控系统和设备仪器中得到广泛应用。
嵌入式系统中的PS2接口设计
4.2 设备到主机的通信
ATmega8 接受鼠标键盘发送来的数据是通过外部中断的方式(将 PS/2 的时钟脚接在外 部中断引脚 INT0 或 INT1 上) , 要使中断程序能够工作, 必须先开全局中断使能: asm("sei"); 然后设置外部中断 INT0 和 INT1 在时钟下降沿发生中断。下面是 ATmega8 接受鼠标发送的 数据包时的中断服务程序,键盘的时钟线接 INT0 上,数据线接 PB7。鼠标时钟下降沿时进 入中断服务程序 int0_isr: #pragma interrupt_handler int0_isr:2 void int0_isr(void) { if(11>bitcount&&bitcount>2) { data = (data >> 1); if(PINB & 0x80) data = data | 0x80; else data&=0x7f; } if(--bitcount == 0) { bitcount=11; buffcnt++; } }
1. 引言:
随着嵌入式微处理器的发展,嵌入式系统的功能越来越强大,并逐步融入了操作系统, 外部接口的种类也越来越丰富。 ps/2 接口也逐步应用到了嵌入式系统中, PS/2 接口虽已经成 为 PC 上的键盘、鼠标标准,但很少有嵌入式处理器集成了 PS/2 接口,但是因为 PS/2 接口 的键盘、鼠标等设备在 PC 上的广泛应用,使得 PS/2 的输入设备相当廉价,如今已在 ps/2 协议上开发出各式各样的键盘能满足各种嵌入式设备的不同需求。 在嵌入式平台上扩展 PS/2 接口可以使嵌入式设备的功能更加丰富,操作更简便。
The Design of PS/2 Interface in Embedded System
PS2鼠标接口程序设计总结
第一章PS2鼠标接口程序设计总结1.1 PS/2鼠标接口简介标准的PS/2鼠标,支持下面的输入X(左右)位移、Y(上下)位移、左键、中键和右键鼠标以一个固定的频率读取这些输入,并更新不同的计数器,然后标记出反映的移动和按键状态。
标准的鼠标有两个计数器,保持位移的跟踪,X位移计数器和Y位移计数器。
可存放9位的2进制补码,并且每个计数器都有相关的溢出标志,它们的内容连同三个鼠标按钮的状态一起以三字节移动数据包的形式发送给主机。
位移计数器表示从最后一次位移数据包被送往主机后,有位移量发生。
当鼠标读取它的输入的时候,它记录按键的当前状态,然后检查位移,如果位移发生它就增加(对正位移)或减少(对负位移)X和/或Y位移计数器的值。
如果有一个计数器溢出了就设置相应的溢出标志。
1.1.1 输入分辨率和缩入比例决定位移计数器增减数量的参数叫分辨率,缺省的分辨率为4个计数单位/毫米,主机可以用设置分辨率0xE8命令改变这个值。
有一个参数不影响位移计数器的值,但是影响这些计数器报告的值。
这个参数就是缩放比例,缺省情况下鼠标使用1:1比例。
因此对报告的鼠标位移没有影响,但是主机可以用设置比例2:1(0xE7)命令选择2:1比例。
如果启用了2:1比例,鼠标在发数据给主机前采用如表1.1的算法运算计数器内容。
1.1.2 位移数据包标准的PS/2鼠标,发送位移和按键信息给主机采用如表1.2的3字节数据包格式。
一个字节里,这些计数器在鼠标读取输入发现有位移时被更新。
这些值是自从最后一次发送位移数据包给主机后位移的累计量(即最后一次数据包发给主机后位移计数器被复位)。
位移计数器可表示的值的范围是-255 到+255。
如果超过了范围,相应的溢出位就被设置,并且在复位前计数器不会增减。
一旦位移数据包成功地发送给主机,位移计数器就会复位,同样鼠标在收到主机不是“Resend” 0xFE命令外的其他命令计数器也会复位。
1.1.3 Intelimouse的扩展对标准的PS/2 鼠标的一个流行的扩展是微软的Intellimouse。
FPGA控制的PS2接口电路设计
FPGA控制的PS/2接口电路设计摘要:作为计算机常用的输入设备键盘,其接口通常是PS/2接口,现在也出现了USB接口的键盘。
本文是根据PS/2接口原理,使用FPGA接收键盘发送的数据,将扫描码转换成ASCII码,最后将扫描码和ASCII码显示出来。
关键词:键盘PS/2FPGA转换显示一、引言PS/2协议和接口最初是有IBM公司开发并推广使用的一种应于键盘/鼠标的协议和接口,直到现在仍被广泛使用。
PS/2键盘接口是6芯的插头与PC机连接,该接口在封装上小巧,并且使用双向串行通信协议,并且提供有可选择的第三套扫描码集,同时支持17个主机到键盘的命令。
利用FPGA和EDA技术可以根据PS/2接口的传输协议,编写VHDL程序来接收键盘发送的扫描码。
本文就是根据此方法来设计电路,将键盘发送的数据转换为ASCII码,并用7段数码管显示键盘的16进制扫描码和其所对应的16进制ASCII码,并且将扫描码和ASCII码显示在1602液晶上。
二、PS/2接口原理1、接口特性在PS/2的的6个引脚中只有4个有实际意义,它们分别是clock 时钟脚,data数据脚,+5V电源脚和Ground电源地。
如图所示:PS/2通讯协议是一种双向同步串行通讯协议。
通讯的两端通过Clock同步,并通过Data交换数据。
2、设备到主机的通信过程键盘接口的数据线和时钟线大多采用集电极开路结构,平常处于高电平。
当键盘像主机发送数据时,首先检查时钟线是否为高。
如果为低,则是主机抑制饿通讯,此时数据必须将数据缓存,直到重新获得总线的控制权(一般PS/2键盘有16个字节的缓冲区)。
如果Clock 为高电平,键盘开始将数据发送到主机。
一般都是有PS/2设备产生时钟信号,发送时按照数据帧格式顺序发送。
其中数据位在Clock 为高时准备好,在Clock的下降沿被PC读入。
下图为数据发送时序图和数据帧格式。
数据发送时序图1个起始位总是逻辑08个数据位(LSB)低位在前1个奇偶校验位奇校验1个停止位总是逻辑11个应答位仅用在主机对设备的通讯中数据帧格式三、硬件电路由于是使用FPGA控制的PS/2接口电路,因此应有一对PS/2接口分别与FPGA和键盘相接,以实现数据的发送和接收。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第二章 PS2键盘接口程序设计总结 2.1 PS/2键盘接口简介 键盘上包含了一个大型的按键矩阵,它们是由安装在电路板上的处理器(叫做“键盘编码器”)来监视的。具体的处理器在键盘与键盘之间是多样化的,但是它们基本上都做着同样的事情:监视哪些按键被按下或释放了,并传送适当的数据到主机。如果有必要,处理器处理所有的去抖动并在它的16 字节缓冲区里缓冲数据。你的主板包含了一个“键盘控制器”,负责解码所有来自键盘的数据,并告诉你的软件什么事件发生了。在主机和键盘之间的通讯使用IBM 的协议。
2.1.1 扫描码 键盘的处理器花费很多的时间来扫描或监视按键矩阵。如果它发现有键被按下、释放或按住,键盘将发送“扫描码”的信息包到计算机。扫描码有两种不同的类型:“通码”和“断码”当一个键被按下或按住就发送通码;当一个键被释放就发送断码。每个按键被分配了唯一的通码和断码,这样主机通过查找唯一的扫描码就可以测定是哪个按键。每个键一整套的通断码组成了“扫描码集”。有三套标准的扫描码集分别是第一套、第二套和第三套。所有现代的键盘默认使用第二套扫描码。
2.1.2 通码、断码和机打重复率 只要一个键被按下,这个键的通码就被发送到计算机。记住通码只表示键盘上的一个按键,它不表示印刷在按键上的那个字符。这就意味着在通码和ASCII 码之间没有已定义的关联。直到主机把扫描码翻译成一个字符或命令。 虽然多数第二套通码都只有一个字节宽,但也有少数扩展按键的通码是两字节或四字节宽。这类的通码第一个字节总是为“E0h”。 正如键按下通码就被发往计算机一样,只要键一释放断码就会被发送。每个键都有它自己唯一的通码,它们也都有唯一的断码。幸运的是你不用总是通过查表来找出按键的断码。在通码和断码之间存在着必然的联系,多数第二套断码有两字节长它们的第一个字节是“F0h”, 第二个字节是这个键的通码。扩展按键的断码通常有三个字节,它们前两个字节是“E0h”,“F0h” ,最后一个字节是这个按键通码的最后一个字节。 例如:通码和断码是以什么样的序列发送到你的计算机,从而使得字符“G”出现在你的字处 理软件里的呢?因为这是一个大写字母,需要发生这样的事件,次序按下“Shift”键,按下“G” 键,释放“G”键,释放“Shift”键,与这些时间相关的扫描码如下:“Shift”键的通码12h, “G”键的通码“34h”,“G”键的断码“F0h,34h”,“Shift”键的断码“F0h,12h”。因此发送到你的计算机的数据应该是“12h ,34h, F0h ,34h, F0h,12h”。 如果你按了一个键,这个键的通码被发送到计算机,当你按下并按住这个键,则这个键就变成了机打着,就意味着键盘将一直发送这个键的通码直到它被释放或者其他键被按下。要想证实这点只要打开一个文本编辑器,并按下A 键当你首先按下这个键字符a 立刻出现在你的屏幕上在一个短暂的延迟后,接着出现一整串的a 直到你释放A 键。这里有两个重要的参数:机打延时是第一个和第二个a 之间的延迟,机打速率是在机打延时后每秒有多少字符出现你的屏幕。上机打延时的范围可以从0.25 秒到1.00 秒,机打速率的范围可以从2.0cps(字符每秒)到30.0cps。你可以用Set Typematic Rate/Delay “0xF3”命令来改变机打速率和延时。
2.1.3、复位 在上电或软件复位(见Reset 命令)后,键盘执行诊断自检,叫做BAT(基本保证测试)并载入如下的缺省值: ● 机打延迟为500ms。 ● 机打速率为10.9cps。 ●* 第二套扫描码集。 ●* 置所有按键为机打/通码/断码。 * 所指的项在某些键盘上时可变的,而在其他键盘上时硬件编码的不可变。 当进入BAT,键盘点亮它的三个LED指示器,并在完成BAT 后关闭它们。此时,BAT完成代码要么“0xAA” BAT成功或“0xFC”有错误被发送到主机。 多数键盘忽略它们的时钟和数据线直到BAT完成代码发送后。所以“抑制”条件时钟线拉低可能不能防止键盘发送它们的BAT完成代码。
2.1.4、命令集 每个发送到键盘的字节都从键盘获得一个0xFA(应答)的回应,唯一例外的是键盘对Resend和Echo命令的回应。在发送下一个字节给键盘之前,主机要等待“应答”。键盘应答任何命令后清除自己的输出缓冲区。下面列出了所有可能被发给键盘的命令:
● 0xFF (Reset)——引起键盘进入Reset 模式(见复位部分)。 ● 0xFE (Resend)——用于只是在接收中出现的错误。键盘的响应就是重发送最后的扫描码或者命令回应给主机。但是0xFE绝不会作为Resend命令的回应而被发送。 ● *0xFD (Set Key Type Make)——允许主机指定一个按键只发送通码。这个按键不发送断码或进行机打重复。指定的按键采用它的第三套扫描码。 ● *0xFC (Set Key Type Make/Break)——类似于Set Key Type Make,只有通码和断码是使能的(机打被禁止了)。 ● *0xFB (Set Key Type Typematic)——类似于前两条命令通码和机打是使能的,而断码被禁止。 ● *0xFA (Set All Keys Typematic/Make/Break)——缺省设置所有键的通码、断码和机打重复都使能(除了Print Screen 键,它在第一套和第二套中没有断码)。 ● *0xF9 (Set All Keys Make)——所有键都只发送通码;断码和机打重复被禁止。 ● *0xF8 (Set All Keys Make/Break)——类似于前两条命令,除了机打重复被禁止外。 ● *0xF7 (Set All Keys Typematic)——类似于前三条命令仅断码被禁止,通码和机打重复是使能的。 ● 0xF6 (Set Default)——载入缺省的机打速率/延时(10.9cps/500ms),按键类型(所有按键都使能机打/通码/断码),以及第二套扫描码集。 ● 0xF5 (Disable)——键盘停止扫描,载入缺省值键Set Default 命令,等待进一步指令。 ● 0xF4 (Enable)——在用上一条命令禁止键盘后,重新使能键盘。 ● 0xF3 (Set Typematic Rate/Delay)——主机在这条命令后会发送一个字节的参数来定义机打速率和延时,具体含义如表2.1、2.2所示。 表2.1 Repeat Rate Bits0-4 Rate(cps) Bits0-4 Rate(cps) Bits0-4 Rate(cps) Bits0-4 Rate(cps) 00h 2.0 08h 4.0 10h 8.0 18h 16.0 01h 2.1 09h 4.3 11h 8.6 19h 17.1 02h 2.3 0Ah 4.6 12h 9.2 1Ah 18.5 03h 2.5 0Bh 5.0 13h 10.0 1Bh 20.0 04h 2.7 0Ch 5.5 14h 10.9 1Ch 21.8 05h 3.0 0Dh 6.0 15h 12.0 1Dh 24.0 06h 3.3 0Eh 6.7 16h 13.3 1Eh 26.7 07h 3.7 0Fh 7.5 17h 15.0 1Fh 30.0
表2.2 Delay Bits5-6 Delay(seconds) 00b 0.25 01b 0.50 10b 0.75 11b 1.00 ● *0xF2 (Read ID)——键盘回应两个字节的设备ID,0xAB、0x83。 ● *0xF0 (Set Scan Code Set)——主机在这个命令后发送一个字节的参数,是定键盘使用哪套扫描码集。参数字节可以是0x01、0x02或0x03分别选择扫描码集第一套、第二套或第三套。如果要获得当前正在使用的扫描码集,只要发送带0x00参数的本命令即可。 ● 0xEE (Echo)——键盘用“Echo”0xEE 回应。 ● 0xED (Set/Reset LEDs)——主机在本命令后跟随一个参数字节,用于指示键盘上Num Lock, Caps Lock,and Scroll Lock LED的状态这个参数字节的定义如下: MSB LSB Always0 Always0 Always0 Always0 Always0 Caps Lock Num Lock Scroll Lock
○"Scroll Lock" - Scroll Lock LED off(0)/on(1) ○"Num Lock" - Num Lock LED off(0)/on(1) ○"Caps Lock" - Caps Lock LED off(0)/on(1)
*只是最初可用于PS/2 键盘。 2.1.4、初使化 如下的通讯过程发生在计算机和键盘之间,当计算机启动后,前三个命令是初始化键盘控制器,后一条命令(使能Numlock LED),是由BIOS发送的,剩下来的命令是由OS Win98SE发送的。记住在计算机上这个结果是明确的,但是它只是一个一般性的概念,告诉我们启动时发生了什么。
Keyboard: AA 自检通过;键盘控制器初使化 Host: ED 设置/复位状态指示器 Keyboard: FA 键盘应答 Host: 00 关闭所有指示灯 Keyboard: FA 键盘应答 Host: F2 读ID Keyboard: FA 键盘应答 Keyboard: AB ID的第一个字节
Host: ED 设置/复位状态指示器;BIOS初使化 Keyboard: FA 键盘应答 Host: 02 点亮 Num Lock指示灯 Keyboard: FA 键盘应答
Host: F3 设置机打速率和延时;Windows初使化 Keyboard: FA 键盘应答 Host: 20 500 ms / 30.0 reports/sec Keyboard: FA 键盘应答 Host: F4 使能键盘 Keyboard: FA 键盘应答 Host: F3 设置机打速率和延时 Keyboard: FA 键盘应答 Host: 00 250 ms / 30.0 reports/sec Keyboard: FA 键盘应答