NUE-PSK3.1型调制解调器的键盘输入接口采用一片MC68HC908单片机实现。MC68HC908是Motorola公司推出的以Flash作为存储器的8位单片机,该处理器的最大特点是提供了多种外围接口模块,其中之一就是键盘中断模块(KBI)。MC68HC908提供的键盘接口采用标准的PS/2接口,该接口多用于键盘和鼠标等外设的连接。PS/2接口的电气图形符号如图7-4所示。
图7-4 PS/2标准接口的电气图形符号
PS/2标准接口的引脚定义见表7-2。
表7-2 PS/2标准接口的引脚定义
PS/2协议是一种双向同步串行通信协议。通信双方通过时钟引脚同步,并通过数据引脚交换数据。任何一方如果想终止另外一方通信时,只需要把时钟引脚拉到低电平即可。通常主机可以终止通信而PS/2设备不会终止主机的数据发送。PS/2接口的设备间传输数据的最大时钟频率是33kHz,推荐值在15kHz左右。传输数据格式遵循11位串行协议,每个比特占用一个时钟周期,其波形如图7-5所示。
图7-5 PS/2标准接口数据传输波形
其中第一个比特为起始位,总为低电平;后面跟着8位数据,低位在前,高位在后;之后是一个比特的校验位,这里采用奇校验;最后一个比特是停止位,总为高电平。当用户按下或者释放键盘按键时,键盘都会通过PS/2标准接口发送数据,这个数据通过“扫描码”的格式发送到主机中。扫描码有两种类型:“通码”和“断码”,当一个键被按下时发送“通码”;当一个键被释放时发送“断码”。每个按键都被分配了唯一的“通码”和“断码”,这样主机通过查找唯一的扫描码就可以判断是哪个按键。每个键一整套的“通断码”组成了扫描码集,目前有三套扫描码集,常用键盘采用第二套扫描码集。(www.xing528.com)
MC68HC908单片机将PS/2键盘上的串行扫描码转换成并行数据,通过中断方式通知dsPIC33FJ128MC706。dsPIC33FJ128MC706使用了PORTB的高8位(RB8~RB15)作为键盘扫描码的输入端,使用PORTD的第8位(RD8)作为中断引脚,当MC68HC908接收到键盘数据后,通过RD8向dsPIC33FJ128MC706发送中断请求,dsPIC33FJ128MC706响应此中断,在中断处理程序中读取RB8~RB15上的数据,获得键盘输入的扫描码。
在源文件NUE_PSK_main_1.c中,程序调用init_Key_isr()函数进行键盘输入中断的初始化,该函数在NUE_PSK_Keyboard.c文件中定义为
其中,Key_Strobe_I为中断输入信号,程序中将其定义为
键盘输入的中断服务例程为函数key_isr(void),该函数将输入的扫描码转换成其他程序使用的ASCII码。
图7-6 NUE-PSK3.1的键盘接口设计
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。