第三章——独立按键及矩阵键盘控制LED灯(2).讲述

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

设第2行第 4列键按下 +5V
89C51 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7
0 1 1 0 1 0 1 1 0
行线输出 列线输入 0111 1111
1 1
1 1
1 1
0 1 1 1
1011 1101 1110
1110 1111 1111
(2)线反转法。 线反转法也是识别闭合键的一种常用方法, 该 法比行扫描速度快, 但在硬件上要求行线与列线外 接上拉电阻。 先将行线作为输出线, 列Baidu Nhomakorabea作为输入线, 行线 输出全“0”信号, 读入列线的值, 那么在闭合键所 在的列线上的值必为0;然后从列线输出全“0”信 号,再读取行线的输入值,闭合键所在的行线值必 为 0。这样,当一个键被按下时, 必定可读到一对 唯一的行列值。再由这一对行列值可以求出闭合键 所在的位置。

矩阵式键盘的结构及原理
矩阵式键盘由行线和列线组成,按键位于行、列线的交叉点上, 其结构如下图所示。


由图可知,一个4×4的行、列结构可以构成一个含有16个按键 的键盘,显然,在按键数量较多时,矩阵式键盘较之独立式按键键盘 要节省很多I/O口。
矩阵式键盘中,行、列线分别连接到按键开关的两端,行线通过 上拉电阻接到+5V上。当无键按下时,行线处于高电平状态;当有键 按下时,行、列线将导通,此时,行线电平将由与此行线相连的列线 电平决定。这是识别按键是否按下的关键。然而,矩阵键盘中的行线 、列线和多个键相连,各按键按下与否均影响该键所在行线和列线的 电平,各按键间将相互影响,因此,必须将行线、列线信号配合起来 作适当处理,才能确定闭合键的位置。
0-99的显示
Org 0 Ljmp main Org 0100h Main:MOV R0,#00H ;给R0赋值0 MOV DPTR, #TAB ; MOV R3, #0; ;给R3赋值0 M1:MOV R4, #0; ;给R4赋值0 GW:MOV R2, #10 YS:MOV A, R4; ;A为0 MOVC A, @A+DPTR MOV P0, A ;显示个位的数据 CLR P1.1 LCALL DL MOV P0,#0 SETB P1.1 MOV A, R3 MOVC A, @A+DPTR MOV P0, A ;显示十位的数据
100ms
10ms 10ms 键抖动时间
图3.7 软件消抖法延时区间示意图
3. 计算键码
键码是每个按键的标识。被按键确定下来之后,
接下来的工作是计算闭合键的键码,然后才能根据 键码进行对应的操作。 为编程方便,键码通常都是以键的排列顺序安
CLR P1.0 LCALL DL MOV P0,#0 SETB P1.0 DJNZ R2,YS INC R4 CJNE R4,#10,GW INC R3 CJNE R3,#10,M1 SJMP MAIN DL: MOV R7,#10 D1: MOV R6,#200 D2:DJNZ R6,d2 DJNZ R7,d1 RET TAB: DB 3fH, 06H, 05bH, 4fH, 66H, 6dH, 7dH,07H, 7fH, 6fH
Q & +5V & Q
图3.6 硬件去抖动电路
(2)软件消抖法:键按下的时间与操作者的按 键动作有关,约为十分之几到几秒不等。而键抖动 时间与按键的机械特性有关,一般为5~10ms不等。 软件消抖法即是采用延时(一般延时10~20ms)的 方法,以避开按键的抖动,即在按键已稳定地闭合 或断开时才读出其状态。
2 be 6 bd A bb E b7
3 7e 7 7d B 7b F 77
键盘控制流程
单片机对矩阵 式键盘接口处理的 一般过程如图所示。
N
等待键释放
开始 键扫描 有键按下? Y 消除抖动 键扫描 确有键按下? Y 求键值 N 求键码 等待释放 按键处理 N 键扫描
消抖
键释放? Y
按键处理 返回
图3.4 键盘处理流程框图



+5V
+5V
89s52
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7
P1.4 P1.5 P1.6 P1.7
S1 S2 S3 S4
89S52
图3.1 独立式键盘接口 特点:每个按键占用一条I/O 线,当按键数量较多时,I/O 口利用率不高,但程序编制简 单。适用于所需按键较少的场 合。
图3.2 矩阵式键盘接口 特点:电路连接复杂,但提 高了I/O口利用率,软件编程 较复杂。适用于需使用大量 按键的场合。

独立式按键的软件结构

独立式按键软件常采用查询式结构。 先逐位查询每根I/O口线的输入状态,如某 一根I/O口线输入为低电平,则可确认该 I/O口线所对应的按键已按下,然后,再转 向该键的功能处理程序。
1. 键扫描 键扫描就是要判断有无键按下,当扫描到有键
按下时再进行下一步处理,否则退出键盘处理程序。 独立式键盘扫描只需读取IO口状态,而矩阵式键盘 描通常有两种实现方法:逐行扫描法和线反转法。 (1) 逐行扫描法。依次从第一至最末行线上发
出低电平信号, 如果该行线所连接的键没有按下
的话, 则列线所接的端口得到的是全“1”信号, 如 果有键按下的话, 则得到非全“1”信号。
矩阵式键盘。独立式键盘的工作过程与矩阵式键盘
类似,无论是硬件结构还是软件设计都比较简单,。

按键按照结构原理可分为两类,一类是触 点式开关按键,如机械式开关、导电橡胶 式开关等;另一类是无触点开关按键,如 电气式按键,磁感应按键等。前者造价低 ,后者寿命长。目前,微机系统中最常见 的是触点式开关按键。
dpl1: mov r1,#250 ; dplop: mov a,a_bit ;取个位数 MOVC A,@A+DPTR ;查个位数的7段 代码 mov p0,a ;送出个位的7段代码 clr p1.7 ;开个位显示 acall d1ms ;显示162微秒 setb p1.7;关闭个位显示,防止鬼影 mov a,b_bit ;取十位数 MOVC A,@A+DPTR ;查十位数的7段 代码 mov p0,a ;送出十位的7段代码 clr p1.6 ;开十位显示 acall d1ms ;显示162微秒 setb p1.6;关闭十位显示,防止鬼影 djnz r1,dplop ;循环执行250次 djnz r0,dpl1 ;循环执行 250X4=1000次 Ret ;2+2X80=162微秒,延时按12MHZ计 算 D1MS: MOV R7,#80 DJNZ R7,$ RET 共阴数码管的显示代码 numtab: DB 3fH, 06H, 05bH, 4fH, 66H, 6dH, 7dH,07H, 7fH, 6fH
第三章 电子时钟设计
键盘接口
键盘是单片机应用系统中使用最广泛的一种
数据输入设备。键盘是一组按键的组合。键通常
是一种常开型按钮开关,常态下键的两个触点处
于断开状态,按下键时它们才闭合(短路)。
通常,按键按照接口原理键盘有编码和非编码
两种。编码键盘通过硬件电路产生被按按键的键码 和一个选通脉冲。选通脉冲可作为CPU的中断请求 信号。这种键盘使用方便,所需程序简单,但硬件 电路复杂,常不被单片机采用。 非编码键盘按组成结构又可分为独立式键盘和

一个完善的键盘控制程序应具备以下功能:
(1)检测有无按键按下,并采取硬件或软件措施, 消除键盘按键机械触点抖动的影响。 (2)有可靠的逻辑处理办法。每次只处理一个按键 ,其间对任何按键的操作对系统不产生影响,且无论一次 按键时间有多长,系统仅执行一次按键功能程序。 (3)准确输出按键值(或键号),以满足跳转指令 要求。
X1 X2
RESET RD WR
P13
K12
F
P17
P14
P15
P16

扫描法 和线反转法
+5V 89s52 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7
图3.3 矩阵式键盘接口



0 ee 4 ed 8 eb C e7
1 de 5 dd 9 db D d7
39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 40 20 10 11 30 29
P10
P11
K0
0 4
K1
1 5
K2
2 6
K3
3 7
K4
K5
K6
K7
89S52
P12K8
8
C
K9 K13
9
D
K10 K14
A K11 B
E
K15
EA/VP
19 18
9 17 16

P10 P11 P12 P13 P14 P15 P16 P17
1 2 3 4 5 6 7 8 13 12 15 14 31
U1
P10 P11 P12 P13 P14 P15 P16 P17 INT1 INT0 T1 T0 P00 P01 P02 P03 P04 P05 P06 P07 P20 P21 P22 P23 P24 P25 P26 P27 VCC GND RXD TXD ALE/P PSEN
设第2行第 4列键按下
+5V
89C51 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7
行值:1011
1 0 0 1 0 1 0
1 0 0 1 0 1 0
列值:1110
2.消抖 由于按键按下时的机械动作,在按键被按下或松 开的瞬间,其输出电压会产生波动,称为键的抖动。

a_bit equ 20h ;数码管个位数存放内存位 置 b_bit equ 21h ;数码管十位数存放内存位 置 temp equ 22h ;计数器数值存放内存位置 org 0 star: mov temp,#0 ;初始化计数器,从0 开始 stlop: acall display;调用显示子程序 inc temp;对计数器加1 mov a,temp cjne a,#100,next ;判断计数器是否满 100? mov temp,#0;满100就清零重新开始 next: ljmp stlop;不满就循环执行 ;显示子程序 display: mov a,temp ;将temp中的十六 进制数转换成10进制 mov b,#10 ;10进制/10=10进制 div ab mov b_bit,a ;十位在a mov a_bit,b ;个位在b mov dptr,#numtab ;指定查表启始地址 mov r0,#4
键按下
前沿 抖动
后沿 抖动
图3.5 键闭合及断开时的抖动
为确保每按一次键单片机只进行一次处理,使 键盘可靠地工作,必须消除按键抖动。消抖方法有 硬件消抖和软件延时两种。
(1)硬件消抖法:就是在键盘中附加去抖动电 路,从根上消除抖动产生的可能性。右图所示电路 实际上是由R-S触发器构成的单脉冲电路。当按钮 开关按下时Q端输出低电平,当开关松开时Q端恢复 高电平,即输出一个负脉冲,以此消除抖动。
8个共阴极的数码管,动态显示0-7
ORG 0000H MOV R0,#00H ;给R0赋值0 MOV DPTR,#TAB ; 把TAB 表的首地址给 DPTR MOV R4,#0FEH; ;给R4赋值0FE MOV A,R4; ;A为0FE 也就是1111 1110 PUSH ACC; ;将A入栈 DLO:MOV A,R0 MOVC A,@A+DPTR; ;查TAB表 MOV P0,A ; 把查的值给数码管的8个段 POP ACC; 将之前的A出栈 MOV P1,A; 将A的值给P1 也就是给P1 1111 1110 是那个为0的管亮 LCALL QF; 调用取反子程序 PUSH ACC; 将A入栈 INC R0; R0值加1 LCALL DELAY ; 调用延时程序 CJNE R0,#08H,DLO; 判断是否查完一便 表 没查完再跳到DLO MOV R4,#0FEH; 查完了重新给A赋值 MOV A,R4 PUSH ACC ; 再将A入栈 MOV R0,#00H; 给R0清0 SJMP DLO ;跳到DLO再显示 DELAY:MOV R1,#18 LP1:MOV R2,#200 LP2:MOV R3,#126 DJNZ R3,$ DJNZ R2,LP2 DJNZ R1,LP1 RET TAB:DB 3fH,06H,5bH,4fH,66H,6dH,7dh,07h QF: RL A ; 左移 RET END
相关文档
最新文档