第九章MCS-以及键盘显示器接口_第1页
第九章MCS-以及键盘显示器接口_第2页
第九章MCS-以及键盘显示器接口_第3页
第九章MCS-以及键盘显示器接口_第4页
第九章MCS-以及键盘显示器接口_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第九章MCS-以及键盘显示器接口第9章

MCS-51单片机的人机交互通道(显示、键盘)配置与接口主要内容:从工程应用角度介绍了MCS-51单片机的交互通道配置与接口,主要包括人机界面中的键盘、显示器等。介绍了多种实用方案和设计技巧。重点在于系统概念的形成、各种接口设计方案和设计技巧的掌握,熟悉各种交互设备。难点在于使用动态方法进行键盘和显示的硬件及软件设计。

人机界面:是指人与计算机系统进行信息交互的接口,包括信息的输入和输出。

9.1MCS-51单片机与键盘的接口技术键盘:单片机系统中完成控制参数输入及修改的基本输入设备,是人工干预系统的重要手段。键盘的分类:按编码方式可分为编码键盘与非编码键盘。按键组连接方式可分为独立连接式键盘与矩阵连接式键盘。

9.1.1概述

键盘输入的主要对象:各种按键或开关。

1.独立连接式键盘

每键相互独立,各自与一条I/O线相连,CPU可直接读取该I/O线的高/低电平状态。其优点是硬件、软件结构简单,判键速度快,使用方便;缺点是占I/O口线多。适用场合:多用于设置控制键、功能键。适用于键数较少的场合。

独立连接式键盘连接图如右图所示。当没有键被按下时,所有的数据输入线都为高电平;当有任意一个键被按下时,与之相连的数据输入线将变为低电平;通过相应指令,可以判断是否有键按下。2.矩阵连接式键盘

键按矩阵排列,各键处于矩阵行/列的结点处,CPU通过对连在行(列)的I/O线送已知电平的信号,然后读取列(行)线的状态信息。逐线扫描,得出键码。其特点是键多时占用I/O口线少,硬件资源利用合理,但判键速度慢。适用场合:多用于设置数字键,适用于键数多的场合。

4行4列矩阵式键盘连接图如右图所示。这种键盘适合采取动态扫描的方式进行识别。扫描方式:低电平扫描(回送线必须被上拉为高电平)、高电平扫描(回送线需被下拉为低电平)。右图中给出了低电平扫描的电路。3.薄膜开关特点:不需要进行导线与开关间的焊接,结构简单、体积小、防尘、防水、防有害气体侵蚀、寿命长、可靠性高。应用:与按键式键盘类似,多个薄膜开关也可按照独立式或矩阵式设计内部电路,其原理与普通键盘相同。

(1)开关状态的可靠输入。必须消除键抖动。可以采用硬件和软件两种方法,硬件方法就是在按键输入通道上添加去抖动电路;软件方法则采用延迟10~20ms

(2)键盘状态的监测方法——中断方式还是查询方式。

(3)键盘编码方法。

(4)键盘控制程序的编制。。

9.1.3键盘接口

功能:对键盘上所按下的键进行识别。分类:

(1)编码键盘:采用专用的编码/译码器件,被按下的键由该器件译码输出相应的键码/键值。其特点是增加了硬件开销,编码固定,但编程简单。适用于规模大的键盘。9.1.2使用键盘时必须解决的问题

(2)非编码键盘:采用软件编/译码的方式,通过扫描,对每个被按下的键判别输出相应的键码/键值。其特点是不增加硬件开销,编码灵活,但编程较复杂,占CPU时间。适用于小规模的键盘,特别是单片机系统。键盘。

1.键盘接口的工作原理

对于矩阵式键盘,如上页图所示,键盘的行线X0~X3通过电阻接+5V,当键盘上没有键闭合时,所有的扫描线和回送线都断开,无论扫描线处于何种状态,回送线都呈高电平。当键盘上某一键闭合时,则该键所对应的扫描线和回送线被短路,可以确定,变为低电平的回送线与扫描线相交处的键闭合。

CPU对键盘扫描的方式:程序控制的随机方式(CPU空闲时扫描键盘)、定时控制方式(定时扫描键盘)、中断方式。

CPU对键盘上闭合键的键号确定方法:根据扫描线和回送线的状态计算求得,或根据行线和列线的状态查表求得。

2.键输入程序的设计方法

(1)判断键盘上是否有键闭合;(2)消除键的机械抖动;(3)确定闭合键的物理位置;(4)得到闭合键的编号;(5)确保CPU对键的一次闭合只做一次处理3.键盘接口方式(1)独立式键盘接口(静态方式)特点:结构简单,每个按键接单片机的一条I/O线,通过对输入线的查询,可以识别每个按键的状态。[例题]

在MCS-51单片机系统中,设计一个含8个按键的独立式键盘。解:在MCS-51中,含8个按键的独立式键盘的线路连接如下页图所示,8个按键经上拉电阻拉高后分别接到MCS-51单片机P1口的8条I/O线上(P1.0~P1.7)。

在无键按下的情况下,P1.0~P1.7线上输入均为高电平。当有键按下时,与被按键相连的I/O线将得到低电平输入,其他位按键的输入线上仍维持高电平输入。

P1口8条I/O线经与非门74LS30实现逻辑与非后,再经过1个非门74LS04进行信号变换,然后接至MCS-51的INT0引脚上,可通过中断的方式处理键盘。在中断服务程序中,先延时20ms消除键抖动,再对各键进行查询,找到所按键,并转到相应的处理程序中去。

主程序如下:

ORG 0000H LJMPMAIN ORG 0003H ;外部中断0中断服务入口地址

LJMP INT ;转中断服务

ORG 0100H MAIN: SETB EA ;开总中断允许

SETB EX0 ;开INT0中断

SETB IT0 ;下降沿有效

……中断服务程序清单如下:

INT: LCALLD20ms ;延时去抖动

MOV P1,#0FFH ;P1口送全1值

MOV A,P1 ;读P1口各引脚

CJNE A,#0FFH,CLOSE ;验证是否确实有键闭合

AJMP OUT ;无键按下

CLOSE:JNB ACC.7,KEY7 ;查询7号键

JNB ACC.6,KEY6 ;查询6号键

JNB ACC.5,KEY5 ;查询5号键

JNB ACC.4,KEY4 ;查询4号键

JNB ACC.3,KEY3 ;查询3号键

JNB ACC.2,KEY2 ;查询2号键

JNB ACC.1,KEY1 ;查询1号键

JNB ACC.0,KEY0 ;查询0号键

OUT: LJMPINTRETKEY7: …… ;7号键处理程序

KEY71: MOV A,P1 ;再读P1口各引脚

JNBACC.7,KEY71 ;确认键是否释放

LJMPINTRETKEY6: …… ;其他键处理程序

…… KEY0:……..……..INTRET:RETID20ms: 略…… ;20ms延时子程序

…… END

(2)矩阵式键盘接口——行反转法

矩阵式键盘按键识别方法有行反转法和扫描法等。行反转法需要两个双向I/O口分别接行、列线。步骤如下:(1)由行线输出全“1”,读入列线,判有无键按下。(2)若有键按下,再将读入的列线值输出,读入行线的值。(3)第一步读进的列线值与第二步读进的行线值运算,从而得到代表此键的唯一的特征值。行反转法因输入与输出线反过来用而得名。优点是判键速度快,两次即可。[例题]请为8051微处理器设计一个由4行4列键阵构成的键盘。解:4×4矩阵键盘的线路连接如下页图所示。其中P2口的低4位作为输出线。P1口的低4位作为输入线,输入线通过74LS21进行逻辑相与后作为8051的一个外部中断源输入。当有键按下时就将引起中断。中断服务程序要对所按的键进行判别。(1)查询闭合键的位置子程序KEYR

KEYR子程序用以确定每组线中哪一位为0,是否有多个0。在调用前,应将读某组线的数据存入累加器A中。KEYR子程序返回时,某组线中0的位置(0~3)保存在R3中。按键闭合引起中断后,执行中断服务程序。KEYR子程序如下:

KEYR: CJNE A,#0EH,TESTP11 ;测试P1.0 MOV R3,#0 ;P1.0=0,说明被按键的输入线为P1.0 LJMP FINISH ;返回

TESTP11: CJNE A,#0DH,TESTP12 ;测试P1.1 MOV R3,#1 LJMP FINISHTESTP12: CJNE A,#0BH,TESTP13 ;测试P1.2 MOV R3,#2 LJMP FINISHTESTP13: CJNE A,#07H,FINISH ;测试P1.3 MOV R3,#3FINISH: RET

(2)中断服务程序

中断服务程序开始部分应利用软件延时消除键抖动,然后再对所按的键做出处理。中断服务程序如下:

ORG1000H INT11:LCALLDELAY;延时去抖动

MOV A,P1 ;读输入线

ANL A,#0FH;判断是否有键闭合

CJNE A,#0FH,TEST ;有键闭合,转判断按键程序

LJMPINTRET ;无键闭合,返回

TEST:MOV B,A ;暂存

LCALLKEYR;调用读取子程序,得到按下的行号

MOV40H,R3 ;行号暂存在40H单元

MOVP2,#0FFH ;输出线写1 MOVP1,B ;输入线写入数据

MOVA,P2 ;读输出线

LCALLKEYR ;调用读取子程序,得按下的列号

XCH A,R3;列号交换到A中 SWAPA;列号交换到A的高4位 ORL40H,A ;得按键特征值高4位是列号,低4位是行号

INTRET:RETI (3)去抖动的延时子程序DELAY

利用CPU的空闲方式,通过定时器T1实现延时,T1必须预先置初值,以得到需要的延迟时间。设晶振频率为6MHz,欲延时20ms,定时时间为:(216-TC)×12/6=20×103μs,初值:TC=55536=D8F0H。程序如下:

DELAY: MOV TOMD,#11H ;方式1定时

MOV TL1,#0F0H ;定时器1定时初值

MOV TH1,#0D8H SETB ET1 ;开定时器1中断

SETB PT1 ;定时器1为高级中断(因被键盘中断调用)

SETB EA ;开中断SETB TR1 ;启动定时器ORL PCON,#1 ;启动空闲方式,实际CPU在此处等待

CLR TR1;以下四条指令只有在延时后,定时器唤醒,才能执行

CLR PT1 CLR ET1 RET END

行反转法适用于扩展键阵。而动态扫描法不仅可以扫描键阵,也可以实现显示,应用较广泛。动态扫描法原理:采用输出“移动”信号,轮流对各行按键进行检测来实现的。设置行线为输出,列线为输入,当无按键按下时,列输入全为“1”。设计时,将某一行输出为“0”,读取列线值,若其中某一位为“0”,则表明行、列交叉点处的按键被按下,否则无按键按下;继续扫描下一行(将下一行输出为“0”),直至全扫描完为止。

[例题]

用8155实现4行8列的32键键盘接口。解:电路如下页图所示,8155的PA设定为输出口,称其为扫描线。PC3~PC0设定为输入口,称其为回送线。8155与MCS-51单片机的接口略,设PA口的端口地址为7F00H,PC口的端口地址为7F02H。

(3)矩阵式键盘接口动态扫描法键值编码形式:回送线PC0,PC1,PC2,PC3上的键值(每条回送线上有8个键,顺序从左到右)分别为00H+(00H~07H)、08H+(00H~07H)、10H+(00H~07H)、18H+(00H~07H)。其中,(00H~07H)的具体内容由扫描线决定,存放在R4中。(1)扫描是否有键按下子程序KEY1,回扫线的值存放在A中。程序如下:

ORG1000HKEY1:MOVDPTR,#7F00H;将PA口地址送DPTR,PA口作为扫描线

MOVA,#00H ;所有扫描线均为低电平

MOVX@DPTR,A ;PA口向列线输出00H INCDPTR INCDPTR ;指向PC口

MOVXA,@DPTR ;取回送线状态

CPLA ;行线状态取反

ANLA,#0FH ;屏蔽A的高半字节

RET ;返回(2)判断是否有键按下子程序KEY,如果有,识别按键的键码。其中DELAY1是延时子程序。程序如下:

KEY:ACALLKEY1 ;检查有键闭合否

JNZLKEY1 ;A非0说明有键按下

ACALLDELAY1 ;执行一次延时子程序(延时6ms)

AJMPKEY LKEY1:ACALLDELAY1 ACALLDELAY1 ;有键闭合延时2×6ms=12ms以去抖动

ACALLKEY1 ;延时以后再检查是否有键闭合

JNZLKEY2 ;有键闭合,转LKEY2 ACALLDELAY1 ;无键闭合,说明是干扰信号,不作处理

AJMPKEY ;延时6ms后转KEY继续等待键入

LKEY2:MOVR2,#0FEH ;扫描初值送R2,设定PA0为当前扫描线

MOVR4,#00H ;回送初值送R4LKEY4:MOVDPTR,#7F00H ;指向PA口

MOVA,R2 MOVX@DPTR,A ;扫描初值送PA口

INCDPTR INCDPTR ;指向PC口

MOVA,@DPTR ;取回送线状态

JBACC.0,LONE ;ACC.0=1,第0行无键闭合,转LONE MOVA,#00H ;装第0行行值

AJMPLKEYP ;转计算键码

LONE:JBACC.1,LTWO ;ACC.1=1,第1行无键闭合,转LTWO

MOVA,#08H ;装第1行行值

AJMPLKEYP ;转计算键码

LTWO:JBACC.2,LTHR ;ACC.2=1,第2行无键闭合,转LTHR MOVA,#10H ;装第2行行值

AJMPLKEYP LTHR:JBACC.3,NEXT ;ACC.3=1,第3行无键闭合,转NEXT MOVA,#18H ;装第3行行值

LKEYP:ADDA,R4 ;计算键码

PUSHACC ;保存键码

LKEY3:ACALLDELAY1 ;延时6ms ACALLKEY1 ;判断键是否继续闭合,若闭合再延时

JNZLKEY3 POPACC ;若键释放,则键码送A RET NEXT:INCR4 ;列号加1 MOVA,R2 JNBACC.7,KND ;第7位为0,已扫描到最高列,转KND RLA ;循环右移一位

MOVR2,A AJMPLKEY4 ;进行下一列扫描

KND:AJMPKEY ;扫描完毕,开始新的一轮

DELAY1: ······ ;延时子程序,略

END

其中,P1.0和P1.1作为行线。键盘的编码为:P1.0线上的8个键分别为00H+(00H~07H),P1.1线上的8个键分别为08H+(00H~07H)。扫描线(00H~07H)的具体值存放在R4中。程序采取查询方式读取键号,并且考虑了键的抖动问题。DLY1是延时子程序。

程序如下:

ORG1000H SERKEY:MOVSCON,#00H ;设置串行口

MOVA,#00H ;键盘初始化,送00H到列线上

LCALLVARTO ;发送数据

CHK:JNBP1.0,CHK0 ;检查是否有键按下

JNBP1.1,CHK0 ;检查是否有键按下

AJMPCHK ;无键按下,继续查找

CHK0:LCALLDLY1 ;调用10ms延时子程序,去抖

JNBP1.0,CHEN ;确实有键按下,转CHEN JNBP1.1,CHEN AJMPCHK

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论