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