在51单片机上使用PC机ps2键盘

2022-04-23 22:50:04   文档大全网     [ 字体: ] [ 阅读: ]

#文档大全网# 导语】以下是®文档大全网的小编为您整理的《在51单片机上使用PC机ps2键盘》,欢迎阅读!
单片,机上,键盘,使用,ps2
51单片机上使用PCps/2键盘(附源码)



本人弄了几天,终于在今天晚上,也就是刚才实验成功,心情特佳,特写出来以享大家。单片机上应用非编码键盘,各书上均有介绍。作为实验用,我想到了用PC机的ps/2键盘。 PC机键盘内部有单片机电路来完成编码和去抖动,它按照ps/2协议来发送扫描码。因此在应用中,我们需要做的只是将扫描码与字符对应起来,大部分事情都由键盘自己完成了。

首先介绍一下键盘的接口,典型的几种接口如下图:

其中第一种用于老式键盘(我原来的键盘就是),第二种便是现在的PS/2键盘,第三个不用去管它。我的实验是按照最常用的PS/2(即第二种)来做的。

再略微介绍一下PS/2协议的相关内容。PS/2的一个数据帧为11位,时序如下:

PS/2帧的第一位是起始位,为0,然后是8位数据位,发送键盘扫描码的一个字节(扫描码为1-4个字节),然后是奇偶校验位,最后是停止位,为1。这些是在数据线(即1引脚线)上发送的。无键按下时,数据线和始终线都保持为1当有键按下时,时钟线CLOCK送出脉冲,同时数据线送出数据。主机(此处是89c51 MCU)在始终脉冲的下降沿对数据线采样获得数据。键盘扫描码包括通码和断码,当键按下时发送通码,抬起时发送断码。更详细的内容可参考所附的《PS/2技术参考》 根据上述原理,我这样设计了实验:将键盘的脉冲线接至89c51的外部中断输入口INT0INT1,当键按下和抬起时有脉冲产生,此脉冲引发MCU中断。将键盘的DATA线连至89c51的输入口(如P1.0。在中断处理程序中,从输入口读入数据,然后通过循环移位对读进的数据位进行处理,1(起始位)10(奇偶校验)11(停止位)可抛弃,如不嫌麻烦也可将奇偶校验位加以应用。当一个数据帧收完后,将处理后剩下的2-9位(即扫描码)通过串口发至PC机,通过PC机的串口监视软件(如串口调试助手)来查看。硬件连线和源码如下:

源码:

ORG 0000H

AJMP MAIN;转入主程序

ORG 0003H ;外部中断P3.2INT0入口地址 AJMP INT ;转入外部中断服务子程序 ;以下为主程序进行CPU中断方式设置

MAIN:MOV SCON,#50H;设置成串口1方式

MOV TMOD,#20H;波特率发生器T1工作在模式2 MOV PCON,#80H;波特率翻倍为2400x2=4800BPS

MOV TH1,#0F3H;预置初值(按照波特率2400BPS预置初值) MOV TL1,#0F3H;预置初值(按照波特率2400BPS预置初值) SETB EA ;打开CPU总中断请求

SETB IT0 ;设定INT0的触发方式为脉冲负边沿触发 SETB EX0 ;打开INT0中断请求 SJMP $

INT: CLR EA ;暂时关闭CPU的所有中断请求


CJNE R0,#0,L1 L3: INC R0 SJMP L5

L1: CJNE R0,#9,L2 SJMP L3

L2: CJNE R0,#10,L4

SETB TR1;启动定时器T1 MOV SBUF,A MOV R0,#0

L5: SETB EA ;允许中断 RETI ;退出子程序 L4: MOV C,P1.0 RRC A SJMP L3

END

搞定后,当按下和释放键时,会在PC机上显示其扫描码。

忘了说明一点,通电时键盘会自检,此时键盘上三个灯全亮,自检完成后熄灭,并向主机发送十六进制字符AA.




本文来源:https://www.wddqxz.cn/c8df8bf06c1aff00bed5b9f3f90f76c661374ca8.html

相关推荐