键盘计算机编程,键盘接口与编程

键盘接口与编程

键盘是由若干按键组成的开关矩阵,它是微型计算机最常用的输入设备,用户可以通过键盘向计算机输入指令、地址和数据。一般单片机系统中采和非编码键盘,非编码键盘是由软件来识别键盘上的闭合键,它具有结构简单,使用灵活等特点,因此被广泛应用于单片机系统。

1.按键开关的抖动问题

组成键盘的按键有触点式和非触点式两种,单片机中应用的一般是由机械触点构成的。在下图中,当开7473a3ac38da5f7d8c9ecbcfe2611547.gif

图1cb2cbde6a7599d581950eccd115fbd87.gif

图2

关S未被按下时,P1。0输入为高电平,S闭合后,P1。0输入为低电平。由于按键是机械触点,当机械触点断开、闭合时,会有抖动动,P1。0输入端的波形如图2所示。这种抖动对于人来说是感觉不到的,但对计算机来说,则是完全可以感应到的,因为计算机处理的速度是在微秒级,而机械抖动的时间至少是毫秒级,对计算机而言,这已是一个“漫长”的时间了。前面我们讲到中断时曾有个问题,就是说按键有时灵,有时不灵,其实就是这个原因,你只按了一次按键,可是计算机却已执行了多次中断的过程,如果执行的次数正好是奇数次,那么结果正如你所料,如果执行的次数是偶数次,那就不对了。

为使CPU能正确地读出P1口的状态,对每一次按键只作一次响应,就必须考虑如何去除抖动,常用的去抖动的方法有两种:硬件方法和软件方法。单片机中常用软件法,因此,对于硬件方法我们不介绍。软件法其实很简单,就是在单片机获得P1。0口为低的信息后,不是立即认定S1已被按下,而是延时10毫秒或更长一些时间后再次检测P1。0口,如果仍为低,说明S1的确按下了,这实际上是避开了按键按下时的抖动时间。而在检测到按键释放后(P1。0为高)再延时5-10个毫秒,消除后沿的抖动,然后再对键值处理。不过一般情况下,我们通常不对按键释放的后沿进行处理,实践证明,也能满足一定的要求。当然,实际应用中,对按键的要求也是千差万别,要根据不同的需要来编制处理程序,但以上是消除键抖动的原则。

2.键盘与单片机的连接23d7c34afc2cb59551c37fe02a0acdda.gif

图35501091345282f212e33784372468734.gif

图4

1、通过1/0口连接。将每个按键的一端接到单片机的I/O口,另一端接地,这是最简单的方法,如图3所示是实验板上按键的接法,四个按键分别接到P3.2、P3.3、P3.4和P3.5。对于这种键各程序可以采用不断查询的方法,功能就是:检测是否有键闭合,如有键闭合,则去除键抖动,判断键号并转入相应的键处理。下面给出一个例程。其功能很简单,四个键定义如下:

P3.2:开始,按此键则灯开始流动(由上而下)

P3.3:停止,按此键则停止流动,所有灯为暗

P3.4:上,按此键则灯由上向下流动

P3.5:下,按此键则灯由下向上流动

UpDownEQU00H;上下行标志

StartEndEQU 01H;起动及停止标志

LAMPCODEEQU21H;存放流动的数据代码

ORG0000H

AJMPMAIN

ORG30H

MAIN:

MOVSP,#5FH

MOVP1,#0FFH

CLRUpDown;启动时处于向上的状态

CLRStartEnd;启动时处于停止状态

MOVLAMPCODE,#0FEH;单灯流动的代码

LOOP:

ACALLKEY;调用键盘程序

JNBF0,LNEXT;如果无键按下,则继续

ACALLKEYPROC;否则调用键盘处理程序

LNEXT:

ACALLLAMP;调用灯显示程序

AJMPLOOP;反复循环,主程序到此结束

;---------------------------------------

DELAY:

MOVR7,#100

D1:MOVR6,#100

DJNZR6,$

DJNZR7,D1

RET

;----------------------------------------延时程序,键盘处理中调用

KEYPROC:

MOVA,B;从B寄存器中获取键值

JBACC.2,KeyStart;分析键的代码,某位被按下,则该位为1(因为在键盘程序中已取反)

JBACC.3,KeyOver

JBACC.4,KeyUp

JBACC.5,KeyDown

AJMPKEY_RET

KeyStart:

SETBStartEnd;第一个键按下后的处理

AJMPKEY_RET

KeyOver:

CLRStartEnd;第二个键按下后的处理

AJMPKEY_RET

KeyUp:SETBUpDown;第三个键按下后的处理

AJMPKEY_RET

KeyDown:

CLRUpDown;第四个键按下后的处理

KEY_RET:RET

KEY:

CLRF0;清F0,表示无键按下。

ORLP3,#00111100B;将P3口的接有键的四位置1

MOVA,P3;取P3的值

ORLA,#11000011B;将其余4位置1

CPLA;取反

JZK_RET;如果为0则一定无键按下

ACALLDELAY;否则延时去键抖

ORLP3,#00111100B

MOVA,P3

ORLA,#11000011B

CPLA

JZK_RET

MOVB,A;确实有键按下,将键值存入B中

SETBF0;设置有键按下的标志

K_RET:

ORLP3,#00111100B;此处循环等待键的释放

MOVA,P3

ORLA,#11000011B

CPLA

JZK_RET1;直到读取的数据取反后为0说明键释放了,才从键盘处理程序中返回

AJMPK_RET

K_RET1:

RET

;-----------------------------------

D500MS:;流水灯的延迟时间

PUSHPSW

SETBRS0

MOVR7,#200

D51:MOVR6,#250

D52:NOP

NOP

NOP

NOP

DJNZR6,D52

DJNZR7,D51

POPPSW

RET

;-----------------------------------

LAMP:

JBStartEnd,LampStart;如果StartEnd=1,则启动

MOVP1,#0FFH

AJMPLAMPRET;否则关闭所有显示,返回

LampStart:

JBUpDown,LAMPUP;如果UpDown=1,则向上流动

MOVA,LAMPCODE

RLA;实际就是左移位而已

MOVLAMPCODE,A

MOVP1,A

LCALLD500MS

AJMPLAMPRET

LAMPUP:

MOVA,LAMPCODE

RRA;向下流动实际就是右移

MOVLAMPCODE,A

MOVP1,A

LCALLD500MS

LAMPRET:

RET

END

以上程序功能很简单,但它演示了一个键盘处理程序的基本思路,程序本身很简单,也不很实用,实际工作中还会有好多要考虑的因素,比如主循环每次都调用灯的循环程序,会造成按键反应“迟钝”,而如果一直按着键不放,则灯不会再流动,一直要到松开手为止,等等,大家可以仔细考虑一下这些问题,再想想有什么好的解决办法。

2、采用中断方式:如图4所示。各个按键都接到一个与非上,当有任何一个按键按下时,都会使与门输出为低电平,从而引起单片机的中断,它的好处是不用在主程序中不断地循环查询,如果有键按下,单片机再去做相应的处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.1. 具备多个可编程按键,一个多段可编程电子锁(具体数量依型号而定)。 1.2. 支持磁卡阅读和IC卡读写功能(两功能模块为可选)。 1.3. 能用专用软件对每个按键和电子锁位能进行多至十五层和每层255个字符的任意设定。能对磁卡数据输出前后缀进行自定义设置;能使用软件对任意磁道进行关闭或者开放。 1.4. 特别设计静电保护电路,并采用EPROM保存数据,无需电池,数据保存时间不少于100年。 1.5. 提供标准PS/2键盘接口,能外接标准键盘和标准条形码扫描枪。 1.6. 提供“TSL-True Status Lock”功能。能对任意一个键位和电子锁锁位进行包括Num lock、Caps lock、Scroll lock、Shift、Ctrl、Alt、Esc、F1等功能键在内的编程。 1.7. 能对Shift、Ctrl、Alt功能键通码和断码进行组合编码。 1.8. 提供“多层键”功能,可对键盘通过层的定义来配合POS管理软件进行权限分级管理、或扩展按键的数量与功能。每个键可多至定义15个切换层和一个默认层。 1.9. 提供延时功能,最多能延时255秒。 2. 键盘安装 2.1. 将可编程键盘用随机专用电缆连接至主机后面的PS/2接口。如果想使用标准键盘,则将标准键盘的PS/2插头与本键盘的电缆线6PIN母头对接。 2.2. 将随机光碟中的编程软件目录中的全部文件复制到硬盘中。 2.3. 运行WINKB.EXE对可编程键盘进行设置。 2.4. 至此可编程键盘即可正常使用。 2.5. 根据自己的需要,将随机光碟中的其它相关内容复制到硬盘中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值