当前位置:文档之家› 单片机第7章2详解

单片机第7章2详解


过跳转指令转入执行该键的功能程序,执行完后再返回主
程序。
3).按键结构与特点 行线电压信号通过键盘开关机械触点的断开、闭合, 输出波形如图10-6。
为了克服按键触点机械抖动所致的检测误判,必须采取去 抖动措施。这一点可从硬件、软件两方面予以考虑。在键数
较少时,可采用硬件去抖,而当键数较多时,采用软件去抖。
解: 原理如图9-8所示。 ① 判断是否有键按下: 将列线P1.0、P1.1送全0, 查P0.0、P0.1是否为0。 ② 判断哪一个键按下:
逐列送0电平信号,再逐行 扫描是否为0。
③ 键号=行首键号+列号
键盘扫描原理图
7.3.3
键盘的工作方式
单片机在忙于各项工作任务时,如何兼顾键盘的输 入,取决于键盘的工作方式。 原则:即要保证能及时响应按键操作,又不要过多占用CPU 的工作时间。
硬件去抖 在硬件上可采用在 键输出端加R-S触发器 (双稳态触发器)或单稳 态触发器构成去抖动电 路。右图是一种由R-S触 发器构成的去抖动电路, 当触发器一旦翻转,触 点抖动不会对其产生任 何影响。
+5v

开关
+5v
I/O 接 口
单 片 机

消除抖动电路
图图 10-6 硬件去抖电路 硬件去抖电路
在扫描过程中,当发现某行有键按下,也就是输入的列 线中有一位为0时,便可判别闭合按键所在列的位置,根据 行线位置和列线位置就能判断按键在矩阵中的位置,知道是 哪一个键按下。
行 读图并归纳,得出: 首 键 按键的值=行号×每行的按键个数 +列号。计数译码法 号
如何 将你知道的 第 i 行 、 第 j 列按键 被按下 的信 息 存放在 A 中?以什么形式 存放?读图10-10
7.3
一、键盘接口原理
键盘接口设计
二、键盘/显示器接口设计实例
7.3.1 键盘接口原理
键盘输入的特点
1).按键的分类 按键按照结构原理可分为两类,一类是触点式开关按键, 如机械式开关、导电橡胶式开关等;另一类是无触点式开关按 键,如电气式按键,磁感应按键等。前者造价低,后者寿命长。 目前,微机系统中最常见的是触点式开关按键。 按键按接口原理可分为键盘分编码键盘和非编码键盘。 这两类键盘的主要区别是识别键符及给出相应键码的方 法。编码键盘主要是用硬件来实现对键的识别,非编码键盘 主要是由软件来实现键盘的定义与识别。 键盘上闭合键的识别由专用的硬件译码器实现,并产生 键编号或键值的称为编码键盘,如BCD码键盘、ASCII码键盘 等;靠软件识别的称为非编码键盘。
1. 动态显示程序设计
内部RAM 6个显示缓冲单元: 79H~7EH存放要显示的6位数据。 8155H的PB口输出相应位的段码; 8155H的PA口输出位选码,如01H。 子程序流程如图10-15 。 8155H的初始化程序:
7.3.4 键盘/显示器接口设计实例
(1) 利用并行I/O芯片实现键盘/显示器接口 一般把键盘和显示器放在一起考虑。 图10-14:8031用扩展I/O接口芯片8255H实现的6位LED 显示和32键的键盘/显示器接口电路。
8031外扩一片8155H。RAM地址:7E00H~7EFFH。 I/O口地址:7F00H~7F05H。 PA口为输出口,控制键盘列线的扫描,同时又是6位共 阴极显示器的位选线。 PB口作为显示器段码输出口,PC 口作为输入口,是键盘的回读线。 75452:反相驱动器,7407:同相驱动器。
软件去抖
如果按键较多,常用软件方 法去抖动,即检测出键闭合后执 行一个延时程序,产生5~10 ms 的延时;让前沿抖动消失后,再 一次检测键的状态,如果仍保持 闭合状态电平,则确认为真正有 键按下。当检测到按键释放后, 也要给5~10 ms的延时,待后沿 抖动消失后,才能转入该键的处 理程序。
有按键信号? Y 延时等待10ms
PKEY1: LJMP RETURN
2. 行列式(矩阵式)键盘接口
按键数目较多的场合,行列式键盘与独立式键盘相比, 要节省很多的I/O口线。
由行线和列线组成,按键位于行、列的交叉点上。
为了编程的需要,更准确的叫法:扫描线和回读线。为了 读到确定的值,回读线被定义在有上拉电阻的线上。
4×4矩阵键盘接口图
;是K1键按下,转K1键处理 ;子程序PKEY1 ;S2键未按下,转KEY3 ;S2键按下,转PKEY2处理 ;S3未按下,转KEY4 ;S3按下,转PKEY3处理 ;S4键未按下,转KEY5 ;S4按下,转PKEY4处理 ;S5未按下,转RETURN ;S5按下,转PKEY5处理 ;重键或无键按下,从子程序返回 PKEY*的 程序框架 怎样
3.中断工作方式
只有在键盘有键按下时,才执行键盘扫描程序,如无键 按下,单片机将不理睬键盘。 键盘所做的工作分为三个层次 第1层:单片机如何来监视键盘的输 入。三种工作方式:①编程扫描②定 时扫描③中断扫描。 第2层:确定具体按键的键号。体现 在按键的识别方法上就是:①扫描法; ②线反转法。 第3层:执行键处理程序。
列号译码
SKEY3: MOV A,R1 JNB ACC.4,SKEY5 JNB ACC.5,SKEY6 JNB ACC.6,SKEY7 JNB ACC.7,SKEY8 AJMP EKEY SKEY5:MOV A,#00H MOV R2,A;存0列号 AJMP DKEY SKEY6:MOV A,#01H MOV R2,A;存1列号 AJMP DKEY SKEY7:MOV A,#02H MOV R2,A;存2列号 AJMP DKEY SKEY8:MOV A,#03H MOV R2,A;存3列号 AJMP DKEY
这样编键号有何好处?
规划:行扫描过程结束后(发现有键按下)得到的行号 存放在R0中,列号存放在R2中。
描述子程序为DECODE的 功能,出、入口参数?
出口: EKEY 键值(键号)在A中或? KEY: MOV P1,#0F0H ;令所有行为低电平 MOV ORL CPL JZ LCALL
SKEY: MOV MOV MOV MOV SKEY2:MOV MOV MOV MOV ORL CPL S123: JNZ
第0行的键值为: 0行×4+列号(0~3)为0、1、2、3; 第1行的键值为: 1行×4+列号(0~3)为4、5、6、7; 第2行的键值为: 2行×4+列号(0~3)为8、9、A、B; 第3行的键值为: 3行×4+列号(0~3)为C、D、E、F。 4×4键盘行首键号为0、4、8、C,列号为0,1,2,3。
然后通过输入口读取各列的电平。检测其中是否有变为低电 平的列线。若有键按下,则进而判别哪一列有键按下,确定 按键位置。
将第2行变为低电平,其余行为高电平时,输出编码为 1011。
判别是否有哪一列键按下的方法同上。
将第3行变为低电平,其余行为高电平时,输出编码为 0111。
判别是否有哪一列键按下的方法同上。
首先判别键盘中有无键按下: 由单片机I/O口向键盘送(输出)全扫描字,然后读入 (输入)列线状态来判断。方法是: 向扫描线(图中水平线)输 出全扫描字00H,把全部行线置为低电平,然后将回读线的 电平状态读入累加器A中。如果有按键按下,总会有一根列 线电平被拉至低电平,从而使列输入不全为1。 判断键盘中哪一个键被按下: 通过将扫描线逐行置低电平后,检查回读线输入状态。 方法是: 依次给扫描线送低电平,然后查所有回读线状态, 称行扫描。如果全为1,则所按下的键不在此行;如果不全 为1,则所按下的键必在此行,而且是在与零电平列线相交 的交点上的那个键。
图为8255A扩展I/O口的独立式按键接口电路。
PA
用三态缓冲器扩展的I/O口的按键接口电路。
MOV
DPTR,#0BFFFH
MOVX A,@DPTR
对独立式键盘编程,软件消抖,查询方式检测键的状态。仅 有一键按下时才有效才处理。
KEYIN: MOV DPTR,#0BFFFH ;键盘端口地址BFFFH
此公式是针对例图,若行、列与扫描线、回读线的对应关系 改变了,公式要改变。
键的位置码及键值的译码过程
按键扫描的工作过程如下: ① 判断键盘中是否有键按下; ② 进行行扫描,判断是哪一个键按下,若有键按下, 则调用延时子程序去抖动; ③ 读取按键的位置码; ④ 将按键的位置码转换为键值(键的顺序号)0、1、 2„、F。
MOVX A,@DPTR
ANL A,#1FH
;读键盘状态
;屏蔽高三位
MOV R3,A
LCALL DELAY10 MOVX A,@DPTR ANL A,#1FH
;保存键盘状态值
;延时10ms去键盘抖动 ;再读键盘状态 ;屏蔽高三位
CJNE A,R3,RETURN ;两次不同,抖动引起转RETURN ;确认是有键按下 CJNE A,#1EH,KEY2 ;相等,有键按下,不等转KEY2
通常,键盘工作方式有3种,即编程扫描、定时扫空闲时,才调用键盘扫描子程序,扫描键盘。 工作过程: 事先写好键盘扫描子程序,在主程序中的适当位置安 排调用子程序。如上所述,一旦有键按下,子程序会把键 值算好,放如A中,主程序中应有相应的程序去对键值作出 反应。 2. 定时扫描工作方式 利用单片机内的定时器,产生10ms的定时中断,在中断 服务程序中对键盘进行扫描。
LJMP PKEY1 KEY2: CJNE A,#1DH,KEY3 LJMP PKEY2 KEY3: CJNE A,#1BH,KEY4 LJMP PKEY3 KEY4: CJNE A,#17H,KEY5 LJMP PKEY4 KEY5: CJNE A,#0FH,PASS LJMP PKEY5 RETURN:RET
A,P1 A,#0FH A EKEY DEL20 ms
A,#00 R0,A R1,A R3 #0FEH A,R3 P1,A A,P1 R1,A A,#0F0H A
相关主题