101/102键盘信号分析与键盘接口的设计实现
|
摘要:阐述了两种不同的101/102键盘信号的主要区别;介绍兼容两类键盘的键盘接口的设计方法和软件设计方法。 关键字:键盘、键盘接口、扫描码
前言 目前微机上使用的各种101/102键盘在外特性上是一致的,即不同键盘的相应按键其定义是一样的,但不同的键盘所输出的串行扫描码信号却存在着很大的差别。笔者在某项开发工作中发现了这个问题,通过对多种键盘信号的分析,归纳出101/102键盘主要有两类:典型产品是AST键盘(类型1)和方正键盘(类型2)。 鉴于键盘信号的多样性,在考虑键盘接口时必然要兼顾它的适用性。为扩大键盘接口的应用面,笔者设计了一种兼容以上两类键盘的键盘接口。
一、键盘信号的主要区别 键盘上的每个按键在敲击后所发出的扫描码实际上含两部分内容,一是按键扫描码,二是放键扫描码。若按住键不放,则不断发出按键扫描码,直到松开键后才发出放键扫描码。 两类键盘的区别主要体现于扫描码的格式和扫描码的长度两个方面。 1、扫描码的长度 类型1键盘扫描码长度是20位,去掉格式位外含2个字节的数据;类型2键盘扫描码长度是33位,去掉格式位外含3个字节的数据。 表1是两类键盘扫描码长度详细比较情况。
2、扫描码的格式 扫描码的格式如表2所示。
如表1所列,类型1键盘不论是按键扫描码还是放键扫描码都是以“1”作为起始位,并分别以“0”和“1”作为终止位,中间含8位数据位,两者数据值相差80H。无校验位。类型2键盘的扫描码以“0”作为起始位,“1”作为终止位,1位奇校验位,中间含8位数据位,按键扫描码和放键扫描码的数值相差F000H。 这两类键盘扫描码的起始位不同,通过判别该位的值,就可以准确区分当前所用键盘的类型,这一点是设计完备键盘接口的关键所在。
二、键盘接口硬件电路 键盘接口采用1片Intel8052单片机,以中断方式接收数据。8052的P1.0接键盘数据线;P3.2(INT0)接键盘时钟线,原理图如图1所示。 键盘插头有2种:大插头(5芯)和小插头(6芯)。图2是2种键盘插头信号引脚图。
三、键盘接口软件设计 软件设计要考虑以下3部分内容:键盘缓冲区的设置;初始化程序;中断服务程序。 1、键盘缓冲区 键盘缓冲区地址为:30H-4FH,共32个字节。使用R1作为缓冲区放数指针,R7为取数指针。缓冲区为环形。放满后将R1置为30H,再从头放数;当放数指针追上取数指针时,停止放数。当取数指针追上放数指针时,停止取数。 2、初始化程序 包括8052的初始化和键盘的初始化。程序清单如下: MOV IE,#0H ;关中断 CLR F0 ;F0=0为类型1键盘;F0=1为类型2键盘 MOV R0,#0H MOV R1,#30H ;置缓冲区放数指针起始值 MOV R2,#0H MOV R3,#0H MOV R4,#0H MOV R5,#0H MOV R6,#0H MOV R7,#2FH ;置缓冲区取数指针起始值 MOV B,#0H MOV TCON,#0H ;置INT0为电平触发方式 KEYINT: ;主中断服务程序 MOV IE,#0H ;关中断 MOV A,R7 ;取数指针放到A XRL A,R1 ;与放数指针比较 JZ KL4 ;放数指针=取数指针则退出 INC R0 ;脉冲计数 KL1: JNB P3.2,KL1 ;等待时钟脉冲为“1” CJNE R0,#01H,K12 ;首次收到脉冲则判断键盘类型 MOV C,P1.0 KL2:JB F0,KL3 ;根据F0的值转不同服务程序 MOV F0,C ;保存键盘类型 MOV C,P1.0 ;采用数据 LCALL INTB ;类型2键盘中断服务程序 MOV IE,#81H ;开中断 RETI KL3: MOV C,P1.0 ;采样数据 LCALL INTA ;类型1键盘中断服务程序 KL4: MOV IE,#81H ;开中断 RETI 限于篇幅,以下公列出类型1键盘中断服务子程序的处理程序,类型2键盘中断服务子程序除需要进行奇校验及计数脉冲个数不同外,流程基本一致。 类型1键盘中断服务子程序: INTA: MOV A,R2 ;数据位移入R2和R3中 RRC A MOV R2,A MOV A,R3 RRC A MOV R3,A CJNE R0,#0AH,INTA1 ;计数脉冲不为10退出,否则转换 CLR C MOV A,R3 RLC A MOV A,R2 RLC A MOV R5,A ;数据存入R5 ANL A,#80H JNZ INTA3 ;是否为放键码,是则退出 MOV A,R5 MOV DPTR,#1000H ;1000H为码表转换区起址 MOVC A,@A+DPTR ;扫描码转换为ASCII码 MOV @R1,A ;ASCII码存入键盘缓冲区 INC R1 CJNE R1,#50H,INTA3 MOV R1,#30H ;缓冲区满则R1=30H INTA3: CJNE R7,#2FH,INT4 MOV R7,#30H INTA4: MOV R0,#0H ;脉冲计数清零 MOV R5,#0H INTA2: MOV R2,#0H MOV R3,#0H INTA1: RET ORG 1000H ;码表转换区 ORG 1002H ;这里仅列出0-9的转换表 DB 31H,32H,33H,34H,35H,36H,37H,38H,39H,30H
结束语 该键盘接口电路已应用于开发单位的超市用收款机系统中。经过连接多种101/102键盘和近半年多的实际使用,其稳定性和兼容性都是令人满意的。
参考文献 1、张毅刚等.MCS-51 单片机应用设计.哈尔滨:哈尔滨工业大学出版社。 2、朱传乃等.80286微型计算机系统原理分析与维修.北京:科学出版社。 |
|||||||||||||||||||||||||||||