101/102键盘信号分析与键盘接口的设计实现

 

 

 

摘要:阐述了两种不同的101/102键盘信号的主要区别;介绍兼容两类键盘的键盘接口的设计方法和软件设计方法。

    关键字:键盘、键盘接口、扫描码

 

前言

    目前微机上使用的各种101/102键盘在外特性上是一致的,即不同键盘的相应按键其定义是一样的,但不同的键盘所输出的串行扫描码信号却存在着很大的差别。笔者在某项开发工作中发现了这个问题,通过对多种键盘信号的分析,归纳出101/102键盘主要有两类:典型产品是AST键盘(类型1)和方正键盘(类型2)。

鉴于键盘信号的多样性,在考虑键盘接口时必然要兼顾它的适用性。为扩大键盘接口的应用面,笔者设计了一种兼容以上两类键盘的键盘接口。

 

一、键盘信号的主要区别

    键盘上的每个按键在敲击后所发出的扫描码实际上含两部分内容,一是按键扫描码,二是放键扫描码。若按住键不放,则不断发出按键扫描码,直到松开键后才发出放键扫描码。

    两类键盘的区别主要体现于扫描码的格式和扫描码的长度两个方面。

    1、扫描码的长度

    类型1键盘扫描码长度是20位,去掉格式位外含2个字节的数据;类型2键盘扫描码长度是33位,去掉格式位外含3个字节的数据。

    表1是两类键盘扫描码长度详细比较情况。

 

表1  扫描码长度比较表

 

按键扫描码长度/位

放键扫描码长度/位

类型1键盘

10

10

类型2键盘

11

22

  

    2、扫描码的格式

    扫描码的格式如表2所示。

 

表2  扫描码格式比较表

类型1键盘

按键扫描码

10XXXXXXX0

放键扫描码

11XXXXXXX1

类型2键盘

按键扫描码

0XXXXXXXXC1

放键扫描码

011110000110XXXXXXXXC1

注:“X”=数据位;“C”=奇校验位

 

    如表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种键盘插头信号引脚图。

图1

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微型计算机系统原理分析与维修.北京:科学出版社。

返回首页