第10章-LED显示与键盘接口-10.2键盘接口工作原理_第1页
第10章-LED显示与键盘接口-10.2键盘接口工作原理_第2页
第10章-LED显示与键盘接口-10.2键盘接口工作原理_第3页
第10章-LED显示与键盘接口-10.2键盘接口工作原理_第4页
第10章-LED显示与键盘接口-10.2键盘接口工作原理_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

第10章-LED显示与键盘接口10.2键盘接口工作原理10.2键盘接口工作原理键盘人机交互的一个重要工具两种基本类型编码键盘除了按键以外,还包括产生键码的硬件电路使用方便、价格较高非编码键盘靠软件来识别键盘上的闭合键,由此计算出编码几乎不需要附加硬件逻辑在单片机应用系统中被普遍使用1.

非编码键盘的工作原理分类硬件编码式键盘、二维直读式键盘独立式键盘〔简单键盘〕、行列式键盘(矩阵式键盘)独立式按键行列式键盘01111011110111102.按键开关去抖动问题按键抖动在按下和释放时,按键有抖动按键时间:>100ms前跳沿和后跳沿:<20ms,抖动时间一般为5~10msA为确保:对键的一次闭合仅作一次处理必须:去除抖动3.消除抖动不良后果的方法⑴硬件去抖动RC滤波电路去抖动电路简单实用,效果较好。⑵软件去抖动检测到按键按下后,执行延时10ms子程序后再确认该键是否确实按下,消除抖动影响。键处理的流程图

4.独立式按键处理过程查键:扫描有否键按下,若无键按下,返回有键按下软件去抖:延时20ms找键等键释放软件去抖:延时20ms[例1]有键按下,返回键值;否则,返回0FFHP10P118051

K1P12P13P14P15K2K3K4K5K6+5V;准备输入等放去抖查键KE2: CLR C MOV B,#0 ;保存键值0KE3: ANL A,#3FH RRC A ;(A.0)Cy JNC KE4

INC B SJMP KE3KE4: ORL P1,#3FH MOV A,P1 ANL A,#3FH CJNE A,#3FH,KE4

MOV A,B ;返回键值

CJNE A,#06H,KE5KE5: JC KE6 ;Cy=1,(A)<6KE7: MOV A,#0FFH;(A)>=6KE6: RETKE: ORL P1,#3FH

MOV A,P1 ANL A,#3FH ;P1.0~P1.5 CJNE A,#3FH,KE1 SJMP KE7 ;无键按下KE1: LCALL DL20 ;延时去抖

ORL P1,#3FH;修改P1 MOV A,P1 ;读P1 ANL A,#3FH CJNE A,#3FH,KE2 SJMP KE7 ;误动作返回找键5.矩阵式键盘工作方式查询定时每隔一段时间对键盘扫描一次利用单片机内部的定时器的定时器溢出中断。中断中断方式00001111处理过程键扫描确认有无按键按下去抖动延时按键的识别:确定键的行、列号扫描算法、线反转法键号的确定键号=所在行号×键盘列数+所在列号等待键释放扫描算法:逐行置低电平,其余各行为高电平,检查各列电平的变化,如果某列线电平为低电平,即可确定此行列线交叉点处的按键被按下。交换行列线的输出读取关系也可以实现。线反转法:首先,将行线编程为输入线,列线编程为输出线,然后使列线线全输出低电平,读取行线电平,行线从高电平转为低电平的行线为按下按键所在行;然后,将列线编程为输入线,行线编程为输出线,然后使行线全输出低电平,读取列线电平,列线从高电平转为低电平的列线为按下按键所在列。[例1]扫描算法用8255A作单片机键盘接口,A口为输出口接键盘列线。C口为输入口接键盘的4条行线8255A地址 A口:7FFCH

B口:7FFDH

C口:7FFEH 控制寄存器:7FFFH子程序KSI:判定有无闭合键的KSI: MOV DPTR,#7FFCH

;A口地址 MOV A,#00H MOVX @DPTR,A

;A口送00H INC DPTR INC DPTR

;C口地址 MOVX A,@DPTR

;读C口 CPL A ANL A,#0FH

;屏蔽高四位 RET00000000有键闭合,则(A)≠0无键闭合,则(A)=01111KEY1: ACALL KSI

;检查是否有键闭合 JNZ LK1

;A非“0”则转移 ACALL DIR

;显示一次LED(“延时6ms”)

AJMP KND ;无键闭合,延时6ms后退出LK1: ACALL DIR

;有键闭合二次延时 ACALL DIR

;共12ms去抖动

ACALL KSI

;再检查是否有键闭合 JNZ LK2

;有键闭合转移到LK2 ACALL DIR

AJMP KND

;无键闭合,延时6ms后退出有键闭合,则(A)≠0无键闭合,则(A)=0键盘扫描程序KEY1返回时,

(F0)=1:无键闭合、(F0)=0:有键闭合

(A)=键值(闭合的键的编号)KND: SETB F0 ;无键标志 RET

;扫描完毕LK2: CLR F0 ;有键标志 MOV R2,#0FEH

;扫描初值送R2 MOV R4,#00H

;扫描列号送R4LK4: MOV DPTR,#7FFCH

;A口地址

MOV A,R2 MOVX @DPTR,A

;扫描初值送A口 INC DPTR INC DPTR

;C口地址 MOVX A,@DPTR

;读C口有闭合键,则(A)≠0无闭合,则(A)=001111111KEY1: ACALL KSI

;检查是否有键闭合 JNZ LK1

;A非“0”则转移 ACALL DIR

;显示一次LED(“延时6ms”) AJMP KEY1LK1: ACALL DIR

;有键闭合二次延时 ACALL DIR

;共12ms去抖动

ACALL KSI

;再检查是否有键闭合 JNZ LK2

;有键闭合转移到LK2 ACALL DIR AJMP KEY1

;无键闭合,延时6ms后转KEY1LK2: MOV R2,#0FEH

;扫描初值送R2 MOV R4,#00H

;扫描列号送R4LK4: MOV DPTR,#7FFCH

;A口地址

MOV A,R2 MOVX @DPTR,A

;扫描初值送A口 INC DPTR INC DPTR

;C口地址 MOVX A,@DPTR

;读C口有闭合键,则(A)≠0无闭合,则(A)=001111111全程序 JB ACC.0,LONE

;ACC.0=1,第0行无键闭合,转LONE MOV A,#00H

;装第0行值 AJMP LKPLONE: JB ACC.1,LTWO

;ACC.1=1,第1行无键闭合,转LTWO MOV A,#08H

;装第1行值 AJMP LKPLTWO: JB ACC.2,LTHR

;ACC.2=1,第2行无键闭合,转LTHR MOV A,#10H

;装第2行值 AJMP LKPLTHR: JB ACC.3,NEXT

;ACC.3=1,第3行无键闭合,转NEXT MOV A,#18H

;装第3行值LKP: ADD A,R4

;计算键码 PUSH ACC

;保护键码LK3: ACALL DIR

;延时6ms ACALL KSI

;检查是否继续闭合,若闭合再延时 JNZ LK3 POP ACC ;若键起,则键码送A RET扫描列号:R4NEXT: INC R4

;扫描列号加1

MOV A,R2 JNB ACC.7,KND

;若第7位=0,已扫完最高列则转KND RL A MOV R2,A AJMP LK4

;扫描下一列KND: SETB F0 ;无键标志 RET

;扫描完毕扫描列号:R4A、R21111111011111101111110111111011111101111110111111011111101111111[例2]线反转法KEY: MOV P1,#0F0H ;行线置低电平,列线置输入态KEY0: MOV A,P1 ;读列线数据

CPL A ;数据取反,“1”有效

ANL A,#0F0H ;屏蔽行线,保留列线数据

MOV R1,A ;存列线数据(R1高4位) JZ GRET ;全0,无键按下,返回KEY1: MOV P1,#0FH ;行线置输入态,列线置低电平

MOV A,P1 ;读行线数据

CPL A ;数据取反,“1”有效

ANL A,#0FH ;屏蔽列线,保留行线数据

MOV R2,A ;存行线数据(R2低4位) JZ GRET ;全0,无键按下,返回

JBC F0,WAIT ;已有消抖标志,转

SETB F0 ;无消抖标志,置消抖标志

LCALL DY10ms ;调用10ms延时子程序消抖

SJMP KEY0 ;重读行线列线数据GRET: RET参考程序:WAIT: MOV A,P1 ;等待按键释放

CPL A ANL A,#0FH

JNZ WAIT ;按键未释放,继续等待KEY2: MOV A,R1 ;取列线数据(高4位) MOV R1,#03H ;取列线编号初值

MOV R3,#03H ;置循环数

CLR CKEY3: RLC A ;依次左移入C中

JC KEY4 ;C=1,该列有键按下,(列线编号存R1) DEC R1 ;C=0,无键按下,修正列编号

DJNZ R3,KEY3 ;判循环结束否?未结束继续寻找有键按下的列线KEY4: MOV A,R2 ;取行线数据(低4位) MOV R2,#00H ;置行线编号初值

MOV R3,#03H ;置循环数

CLR CKEY5: RRC A ;依次右移入C中

JC KEY6 ;C=1,该行有键按下,(行线编号存R2) INC R2 ;C=0,无键按下,修正行线编号

DJNZ R3,KEY5 ;判循环结束否?未结束继续寻找有键按下的行线KEY6: MOV A,R2 ;取行线编号

CLR C RLC A ;行编号×2 RLC A ;行编号×4 ADD A,R1 ;行编号×4+列编号=按键编号KEY7: CLR C RLC A ;按键编号×2 RLC A ;按键编号×4(LC

温馨提示

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

评论

0/150

提交评论