S5-4 键盘管理与程序设计_第1页
S5-4 键盘管理与程序设计_第2页
S5-4 键盘管理与程序设计_第3页
S5-4 键盘管理与程序设计_第4页
S5-4 键盘管理与程序设计_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

1、键盘管理与程序设计 按键的分类 按结构和使用方法的不同,可将按键分为两大类:独立按键和矩阵键盘。按结构和使用方法的不同,可将按键分为两大类:独立按键和矩阵键盘。 矩阵键盘矩阵键盘 独立按键独立按键 直接用直接用I/O控制,每个按键独占一个控制,每个按键独占一个I/O特点特点由行线和列线组成,按键位于交叉点上由行线和列线组成,按键位于交叉点上 互不影响,配置灵活,结构简单互不影响,配置灵活,结构简单优点优点组合灵活,按键数量较多时,节省组合灵活,按键数量较多时,节省I/O 按键多时,按键多时,I/O口浪费严重口浪费严重缺点缺点区分和判断按键动作的方法比较复杂区分和判断按键动作的方法比较复杂 按键

2、不超过按键不超过8只时只时 适用适用 场合场合 按键数量较多时按键数量较多时 目 录 独立键盘与消抖独立键盘与消抖 矩阵键盘与扫描方法矩阵键盘与扫描方法 逐行逐列扫描法逐行逐列扫描法 S1 Vcc P0.7 R1 10K S2 P2.3 (a) (b) 独立按键的常用接法 80C51单片机的两种常见的独立按键接法:单片机的两种常见的独立按键接法: I/O口为开漏结构时,口为开漏结构时, 需需外接上拉电阻外接上拉电阻,如,如 51的的P0口口 I/O内部自带弱上拉电阻内部自带弱上拉电阻 时,可时,可直接相连直接相连,如,如51 的的P1、P2、P3口口 +E 0V 未按下时未按下时 为高电平为高

3、电平 刚释放时刚释放时 出现抖动出现抖动 刚按下时刚按下时 出现抖动出现抖动 按下稳定按下稳定 后为低电平后为低电平 实际效果实际效果 窄脉冲干扰窄脉冲干扰 刚释放时刚释放时 出现抖动出现抖动 按键的“抖动”现象 按键的结构:按键的结构:和电路图中的符号极为相似,它是靠镀银的铜合金簧片在和电路图中的符号极为相似,它是靠镀银的铜合金簧片在 按键柄的挤压下接触而导通,松开后簧片恢复原状而脱离接触断开。按键柄的挤压下接触而导通,松开后簧片恢复原状而脱离接触断开。 S1 Vcc P0.7 R1 10K “0” “1” 理想效果理想效果 按键的抖动:按键的抖动:按键在人手指按压按键在人手指按压/释放簧片

4、的瞬间,因接触不良而产生的释放簧片的瞬间,因接触不良而产生的 反复跳动现象。反复跳动现象。 “抖动抖动”的脉冲宽度一般在几十到几百微秒,也可能达到毫秒级,的脉冲宽度一般在几十到几百微秒,也可能达到毫秒级,若加在运若加在运 行速度很快的数字电路中将会产生很大的影响行速度很快的数字电路中将会产生很大的影响。比如将发生。比如将发生“抖动抖动”现象的按键作现象的按键作 为数字电路的时钟输入,则每按一次键都会产生一串极不稳定的脉冲。为数字电路的时钟输入,则每按一次键都会产生一串极不稳定的脉冲。 abcdefgh com1 com2 com3 com4 按键的“抖动”测试原理 编程思路:编程思路:用按键模

5、拟计数输入信号,用用按键模拟计数输入信号,用4位位LED数码管显示计数值。数码管显示计数值。 实验现象:在理想效果下,每按一次键,实验现象:在理想效果下,每按一次键,I/O口仅检测到口仅检测到1次高次高/低电平转换,计数低电平转换,计数 加加1;在实际效果中,由于;在实际效果中,由于“抖动抖动”存在,每按一次键,存在,每按一次键, I/O口检测到口检测到 多次电平转换,计数好几次。多次电平转换,计数好几次。 S Vcc P3.4 R 10K abcdefgh com1 com2 com3 com4 理想效果:理想效果: 实际效果:实际效果: 按键的“抖动”测试程序 存放存放4位计数值位计数值

6、0 x7A 0 x7B 地址地址 数据数据 0 x7C 0 x7D 0 x7E 0 x7F 存放将计数值转换成存放将计数值转换成 数码管显示的字符码数码管显示的字符码 0 x7C 0 x7D 0 x7E 0 x7F ORG 0000H Start:MOV0 x7A,#0 x00;计数器高计数器高2位寄存器位寄存器0 x7A清清0 MOV0 x7B,#0 x00;计数器低计数器低2位寄存器位寄存器0 x7B清清0 LD_Data: MOVR0,#0 x7C;取显示缓冲区首地址到指针取显示缓冲区首地址到指针R0 MOVA,0 x7A;取计数器高取计数器高2位数据位数据 ACALL Split_Di

7、splay_Byte;将数据字符送显示缓冲区前将数据字符送显示缓冲区前2个单元个单元 MOVA,0 x7B;取计数器低取计数器低2位数据位数据 ACALL Split_Display_Byte;将数据字符送显示缓冲区后将数据字符送显示缓冲区后2个单元个单元 0 x00 0 x00 高高4位转换的字符码位转换的字符码 低低4位转换的字符码位转换的字符码 0 xC0 0 xC0 0 xC0 0 xC0 Display_Loop: ACALLScan_Display_Value;调用显示扫描子程序调用显示扫描子程序 JBP3.4, Display_Loop ;P3.4是否为是否为0?键未按下,转?键

8、未按下,转Display_Loop MOV A, #0 x01 ;A取加数取加数1 ADDA, 0 x7B;计数器计数器+1 DAA;10进制修正指令进制修正指令 MOV 0 x7B,A;回存低回存低2位的运算结果到位的运算结果到0 x7B CLRA ;清清0累加器累加器A ADDC A,0 x7A;带进位加法加计数器高带进位加法加计数器高2位数据位数据 DAA MOV0 x7A,A;回存高回存高2位的运算结果到位的运算结果到0 x7A JNBP3.4, $;检查按键是否松开,检查按键是否松开,P3.4=1 本地循环本地循环 AJMP LD_Data;按键松开,转按键松开,转LD_Data a

9、 b c d e f g h com1 com2 com3 com4 数码管显示:数码管显示: 判断是否有按键按下判断是否有按键按下 0 x01 按键的“抖动”测试程序流程图 数码管显示计数数码管显示计数 流程图流程图 P3.4=0? N 计数器清计数器清0 计数值转换成字符码计数值转换成字符码 计数器计数器+1,调整,调整10进制数进制数 P3.4=1? N Y Y +E K R 1 10K Y +E 0V Y: td 启动延时启动延时 停止延时停止延时 消除“抖动”的方法 消除消除“抖动抖动”的方法的方法:硬件消抖和软件消抖两大类。:硬件消抖和软件消抖两大类。 常见的硬件消抖方法是:低通滤

10、波施密特整形以及常见的硬件消抖方法是:低通滤波施密特整形以及RS触发器,而软件消抖触发器,而软件消抖 方法就是插入适当的延时。方法就是插入适当的延时。 复习数字电路相关复习数字电路相关 内容内容 软件消抖:软件消抖: 在按键按下的瞬间启动定时器开始延时,延时在按键按下的瞬间启动定时器开始延时,延时td时间后再判断按键是否仍然时间后再判断按键是否仍然 按下,若仍按下,则本次按键有效;否则本次按键无效。按下,若仍按下,则本次按键有效;否则本次按键无效。 思考题:思考题: 如何增加延时消除如何增加延时消除“抖动抖动”,请尝试修改前面的程序。,请尝试修改前面的程序。 如果认真观察实验,一定会发现前面的

11、程序有一个小小的不足,就是在按如果认真观察实验,一定会发现前面的程序有一个小小的不足,就是在按 键按下的瞬间显示器会熄灭,请分析原因。键按下的瞬间显示器会熄灭,请分析原因。 目 录 独立键盘与消抖独立键盘与消抖 矩阵键盘与扫描方法矩阵键盘与扫描方法 逐行逐列扫描法逐行逐列扫描法 矩阵键盘工作原理 4 4 矩阵键盘矩阵键盘 行行 线线 列列 线线 按键的两端分别接按键的两端分别接 在行线和列线上在行线和列线上 矩阵键盘:矩阵键盘:用尽可能少的用尽可能少的I/O口口 去管理较多的按键。去管理较多的按键。 最大的优点是组合灵活,假如最大的优点是组合灵活,假如 有有16个个I/O可用作键盘电路,可以可

12、用作键盘电路,可以 将它接成将它接成610、511或或88等等 许多种接法。当然,使用效率最许多种接法。当然,使用效率最 高的是高的是88的接法,最多可以接的接法,最多可以接 64个按键。个按键。 矩阵连接法要区分和判断按键矩阵连接法要区分和判断按键 动作的方法比较复杂,所以这种动作的方法比较复杂,所以这种 接法一般只用在计算机技术中。接法一般只用在计算机技术中。 目 录 独立键盘与消抖独立键盘与消抖 矩阵键盘与扫描方法矩阵键盘与扫描方法 逐行逐列扫描法逐行逐列扫描法 逐行扫描实验电路 TinyView的的2 4 矩阵键盘矩阵键盘 行行 线线 列列 线线 KC1KC4并接在并接在com1 co

13、m4上,与上,与P3.2P3.5相连相连 与与P3.6、P3.7相连相连 I/O口复用 TinyView的的2 4 矩阵键盘矩阵键盘 行行 线线 列列 线线 与数码管的位选控与数码管的位选控 制端制端复用复用 I/O口复用:口复用:将将同一个(或组)同一个(或组)I/O 口用于口用于2种不同作用的种不同作用的2个器件上。个器件上。 能够复用的原因:能够复用的原因:因为计算机是因为计算机是 一种一种“串行串行”执行程序的机器,是一条执行程序的机器,是一条 接一条的执行指令,而不是全部指令一接一条的执行指令,而不是全部指令一 起上。利用这种在时间上的可区分性使起上。利用这种在时间上的可区分性使 其

14、在不同的时间管理不同的部件。其在不同的时间管理不同的部件。 这种复用是有条件的这种复用是有条件的,对于需要保,对于需要保 持确定状态的控制口(如控制一个继持确定状态的控制口(如控制一个继 电器开关的端口)是没办法复用的。电器开关的端口)是没办法复用的。 逐行逐列扫描法 逐行扫描键盘的方法逐行扫描键盘的方法 选择选择KR1和和KR2为输入,它们为输入,它们 的常态是电平的常态是电平“1”。当没有按键按。当没有按键按 下时,下时,KR1和和KR2保持常态。当保持常态。当 KY1按下时,按下时,KR1在在KC1输出输出“0” 电平时得到电平时得到“0”信号,而信号,而KR2在不在不 受影响仍然保持常

15、态。受影响仍然保持常态。2 4 矩阵键盘矩阵键盘 行行 线线 列列 线线 单片机的输出单片机的输出 单片机的输入单片机的输入 利用这种必须配合利用这种必须配合KC1KC4 的输出情况才能使的输出情况才能使KR1或或KR2得到得到 “0”信号的特点,人们发明出键盘信号的特点,人们发明出键盘 的逐行扫描法。的逐行扫描法。 即每次只有一根列线输出即每次只有一根列线输出“0”, 然后逐行扫描读入行信号,通过行然后逐行扫描读入行信号,通过行 信号来判断键盘所有按键的状态。信号来判断键盘所有按键的状态。 1 1 1 1 1 1 0 1 1 1 1 1 0 0 逐列扫描键盘的方法:逐列扫描键盘的方法:把行和

16、列的输把行和列的输 入输出颠倒,其原理和操作方法与逐行入输出颠倒,其原理和操作方法与逐行 扫描键盘的方法一致。扫描键盘的方法一致。 逐个扫描键盘的方法:逐个扫描键盘的方法: 逐行扫描读键子程序代码 Scan_Key:MOV P1, #0 xFF;关闭所有段选,阻止扫描键盘对显示的影响关闭所有段选,阻止扫描键盘对显示的影响 MOV R6, #0 x04;设定键盘计数器为设定键盘计数器为4,即循环,即循环4次次 MOV R5, #0 xFB 取第一位扫描控制数据取第一位扫描控制数据 Scan_KLP:MOV P3, R5;送位选数据到位选口送位选数据到位选口 SETB P3.6;设置采样口设置采样

17、口P3.6进入采样状态进入采样状态 SETB P3.7;设置采样口设置采样口P3.7进入采样状态进入采样状态 JNBP3.6, Scan_KBK1;检查检查KR1为为0否,是否,是,转转Scan_KBK1 JNBP3.7, Scan_KBK2 ;检查检查KR2为为0否,是否,是,转转Scan_KBK2 MOV A, R5;位选暂存器到位选暂存器到A RLA;A循环左移使下一只位选输出循环左移使下一只位选输出0电平电平 MOV R5, A;A返存回位选暂存器返存回位选暂存器 DJNZR6, Scan_KLP;键盘计数器减键盘计数器减1,非,非0,返回,返回Scan_KLP Scan_KBK1:

18、MOVA, R6;A取位选计数器数值取位选计数器数值 RET Scan_KBK2: MOVA, R6;A取位选计数器数值取位选计数器数值 ADDA, #4 RET P1:数码管段选控制端,因数码管位选与键:数码管段选控制端,因数码管位选与键 盘列控制线复用,故在此先关闭所有段盘列控制线复用,故在此先关闭所有段 选,阻止扫描键盘对显示的影响选,阻止扫描键盘对显示的影响。 R6:键盘计数器,:键盘计数器,4:4列,单次逐行扫描到列,单次逐行扫描到 所有按键循环的次数。所有按键循环的次数。 R5:位选:位选/列线控制数据,控制每次只有一根列线控制数据,控制每次只有一根 列线为列线为“0”。 P1、R

19、6、R5初始化初始化 KR1、KR2行扫行扫 描口置常态描口置常态“1” 为为0则有键按下,跳转;则有键按下,跳转; 否则继续往下执行程序否则继续往下执行程序 左移,更换为左移,更换为“0”的位的位 选选/列线列线 KR1所在行有按键按下时,将所在行有按键按下时,将R6的值传的值传 送给送给A,并退出子程序,并退出子程序 KR2所在行有按键按下时,将所在行有按键按下时,将R6的值传的值传 送给送给A,A统一加统一加4后退出子程序后退出子程序 R6-1为为0,继续往下执行,继续往下执行 程序;不为程序;不为0则跳转则跳转 实现功能:实现功能:单次逐行扫描单次逐行扫描8个按键。当个按键。当 有键按

20、下时,程序立即跳出循环,输出有键按下时,程序立即跳出循环,输出 参数参数A不为不为0;当无键按下时,;当无键按下时,R6被减为被减为 0并退出循环,输出参数并退出循环,输出参数A=0。 按键扫描顺序:按键扫描顺序:先判断先判断KY1是否按下?如是否按下?如 果是,果是,R6为为4传给传给A并退出子程序;如果不是,并退出子程序;如果不是, 接着判断接着判断KY5是否按下;如果是,是否按下;如果是,R6为为4传给传给 A,A加加4后退出子程序;如果不是,则接着后退出子程序;如果不是,则接着 判断判断KY2是否按下是否按下依此类推,依此类推, KY1KY5 KY2 KY6 KY3 KY7 KY4 K

21、Y8 输出参数:输出参数:无键按下,无键按下,A=0; KY1按下,按下,A=4;KY5按下,按下,A=8; KY2按下,按下,A=3;KY6按下,按下,A=7; KY3按下,按下,A=2; KY7按下,按下,A=6; KY4按下,按下,A=1; KY8按下,按下,A=5 逐行扫描读键子程序流程图 给给P1、R6、R5赋初值赋初值 送位选数据到位选口送位选数据到位选口P3 P3.6、P3.7置初态置初态1 P3.6=0? P3.7=0? 位选数据左移位选数据左移1位位 R6-1=0? 将将R6的值传给的值传给A 退出子程序退出子程序 将将R6的值传给的值传给A (A)(A)+4 退出子程序退出

22、子程序 Y N N Y Y N 流程图流程图 逐行扫描读键程序范例 程序流程:程序流程: 首先对四位计数器赋初值首先对四位计数器赋初值0,并进行显示循环,在循环中运行键盘程序随时检查按键状态。,并进行显示循环,在循环中运行键盘程序随时检查按键状态。 当无键按下时,程序保持循环状态。当无键按下时,程序保持循环状态。 当有键按下时,先判断是否是当有键按下时,先判断是否是KY1按下?如果是,则计数器加按下?如果是,则计数器加1。如果不是,则转而检查。如果不是,则转而检查 是否是是否是KY8按下?如果是,计数器减按下?如果是,计数器减1。如果不是,则程序不做任何操作返回重来。如果不是,则程序不做任何操

23、作返回重来。 ORG0000H Start:MOV0 x7A,#0 x00;清清0计数器高计数器高2位寄存器位寄存器0 x7A MOV0 x7B,#0 x00;清清0计数器低计数器低2位寄存器位寄存器0 x7B LD_Data: ACALL L_DisplayBuf;将将0 x7A、0 x7B数字字符调入显示缓冲区数字字符调入显示缓冲区 Display_Loop: ACALL Scan_Display_Value;调用显示扫描调用显示扫描子子程序程序 ACALL Scan_Key ;调用键盘扫描调用键盘扫描子子程序程序 JZDisplay_Loop ;无键按下,转无键按下,转Display_L

24、oop重复显示重复显示 4位计数器清位计数器清0 4位计数值转成数字字位计数值转成数字字 符并载入显示缓冲区符并载入显示缓冲区 数码管显示数码管显示4位计数值位计数值 单次逐行扫描按键,无键按下,单次逐行扫描按键,无键按下, A为为0;有键按下,;有键按下,A不为不为0 A为为0,跳转;,跳转;A不为不为0, 继续往下执行程序继续往下执行程序 逐行扫描读键程序范例 程序流程:程序流程: 首先对四位计数器赋初值首先对四位计数器赋初值0,并进行显示循环,在循环中运行键盘程序随时检查按键状态。,并进行显示循环,在循环中运行键盘程序随时检查按键状态。 当无键按下时,程序保持循环状态。当无键按下时,程序

25、保持循环状态。 当有键按下时,先判断是否是当有键按下时,先判断是否是KY1按下?如果是,则计数器加按下?如果是,则计数器加1。如果不是,则转而检查。如果不是,则转而检查 是否是是否是KY8按下?如果是,计数器减按下?如果是,计数器减1。如果不是,则程序不做任何操作返回重来。如果不是,则程序不做任何操作返回重来。 CJNEA, #0 x04, Next_Key ;是是KY1键按下键按下吗?不是吗?不是,则则转转Next_Key ; 加加1计数程序计数程序 MOV A, 0 x7B ;取计数器取计数器的的低低2位数值位数值 ADDA, #0 x01 ;数值加数值加1 DAA ;调整调整10进制进制

26、数数 MOV 0 x7B, A;将低将低2位运算结果回存到位运算结果回存到0 x7B MOV A, 0 x7A ;取计数器取计数器的的高高2位数值位数值 ADDC A,#0 x00;带进位加法加带进位加法加0,如有进位高,如有进位高2位加位加1 DAA;调整调整10进制进制数数 MOV0 x7A, A;将高将高2位的运算结果回存位的运算结果回存0 x7A AJMP Key_Back;转转Key_Back键返回处理程序键返回处理程序 A为为0 x04,KY1按下,继续往下按下,继续往下 执行程序;不为执行程序;不为0 x04,跳转,跳转 4 位位 计计 数数 器器 加加 1 逐行扫描读键程序范例

27、 程序流程:程序流程: 首先对四位计数器赋初值首先对四位计数器赋初值0,并进行显示循环,在循环中运行键盘程序随时检查按键状态。,并进行显示循环,在循环中运行键盘程序随时检查按键状态。 当无键按下时,程序保持循环状态。当无键按下时,程序保持循环状态。 当有键按下时,先判断是否是当有键按下时,先判断是否是KY1按下?如果是,则计数器加按下?如果是,则计数器加1。如果不是,则转而检查。如果不是,则转而检查 是否是是否是KY8按下?如果是,计数器减按下?如果是,计数器减1。如果不是,则程序不做任何操作返回重来。如果不是,则程序不做任何操作返回重来。 Next_Key :CJNEA,#0 x05,Dis

28、play_Loop ;是是KY8键按下吗?否,返回键按下吗?否,返回Display_Loop ; 减减1计数程序计数程序 MOV A, 0 x7B;取计数器低取计数器低2位数值位数值 ADDA, #0 x99 ;加加99,相当于减,相当于减1操作操作 DAA ;进行进行10进制修正进制修正 MOV 0 x7B, A;将低将低2位运算结果回存到位运算结果回存到0 x7B JC Key_Back;是否有溢出,是,则不借位是否有溢出,是,则不借位 MOV A, 0 x7A;取计数器高取计数器高2位数值位数值 ADD A, #0 x99 ;加加99,相当于减,相当于减1操作操作 DA A;10进制修正

29、指令进制修正指令 MOV0 x7A, A;将高将高2位的运算结果回存位的运算结果回存0 x7A A为为0 x05,KY8按下,继续往下按下,继续往下 执行程序;不为执行程序;不为0 x05,跳转,跳转 4 位位 计计 数数 器器 减减 1 减减1操作:操作: 因为因为“DA A”指令只对加法指令起作用,指令只对加法指令起作用, 所以程序以加所以程序以加99来处理减来处理减1。 对于对于8位寄存器,值不为位寄存器,值不为0时,加时,加99后会产后会产 生进位,生进位,8位寄存器被减位寄存器被减1,如,如6+99=105, 8位寄存器中的值为位寄存器中的值为5,实现减,实现减1。 值为值为0时,加

30、时,加99后后8位寄存器中的值变成位寄存器中的值变成99, 不产生进位,需要向高位借位。不产生进位,需要向高位借位。 逐行扫描读键程序范例 程序流程:程序流程: 首先对四位计数器赋初值首先对四位计数器赋初值0,并进行显示循环,在循环中运行键盘程序随时检查按键状态。,并进行显示循环,在循环中运行键盘程序随时检查按键状态。 当无键按下时,程序保持循环状态。当无键按下时,程序保持循环状态。 当有键按下时,先判断是否是当有键按下时,先判断是否是KY1按下?如果是,则计数器加按下?如果是,则计数器加1。如果不是,则转而检查。如果不是,则转而检查 是否是是否是KY8按下?如果是,计数器减按下?如果是,计数

31、器减1。如果不是,则程序不做任何操作返回重来。如果不是,则程序不做任何操作返回重来。 Key_Back: ACALL L_DisplayBuf ;将将0 x7A、0 x7B数字字符调入显示缓冲区数字字符调入显示缓冲区 ACALL Scan_Display_Value;调用显示扫描程序调用显示扫描程序 ACALL Scan_Key ;调用键盘扫描程序调用键盘扫描程序 JNZ Key_Back;按键是否松开按键是否松开?否,则?否,则转转Key_Back继续检查继续检查 SJMP Display_Loop ;有,返有,返Display_Loop 在检测按键是否松开的循环中增加显在检测按键是否松开的

32、循环中增加显 示扫描,即避免了显示器的熄灭,又示扫描,即避免了显示器的熄灭,又 增加了防按键增加了防按键“抖动抖动”的延时的延时 “线反转法”按键检测技术 问题提出:问题提出:当这个矩阵扩大到一定数目时,逐行扫描的方法会很费时,如果需要对当这个矩阵扩大到一定数目时,逐行扫描的方法会很费时,如果需要对 2个以上的按键个以上的按键“同时同时”操作时,则处理起来更麻烦。操作时,则处理起来更麻烦。 解决方法:解决方法:按键的处理程序并非只有逐行扫描法这一种,如:按键的处理程序并非只有逐行扫描法这一种,如:“线反转法线反转法”按键检按键检 测技术,也是矩阵键盘应用中的一种经典程序处理方法。测技术,也是矩

33、阵键盘应用中的一种经典程序处理方法。 TinyView的的2 4 矩阵键盘矩阵键盘 线反转法:线反转法:将矩阵电路行、列的将矩阵电路行、列的I/O属性进行调换处理。矩阵电路的行、列线必须属性进行调换处理。矩阵电路的行、列线必须 一组输出、一组输入,而线反转的操作方法是多进行一次这种操作。一组输出、一组输入,而线反转的操作方法是多进行一次这种操作。 具体实现:具体实现:假设有假设有KY1、KY3、KY8这这3个按键同时按下。个按键同时按下。 TinyView的的2 4 矩阵键盘矩阵键盘 第一步:第一步: 输入输入 输出输出 输出输出 输入输入 1 1 1 1 1 1 1 1 0 0 0 0 0

34、0 第二步:线反转第二步:线反转 1 1 1 1 1 1 1 1 0 0 1 0 1 由由KR1和和KR2可推断出:两行都有按键按下。可推断出:两行都有按键按下。 结合第一步的推断,可知结合第一步的推断,可知KY1和和KY3按下;按下; 结合第一步的推断,可知结合第一步的推断,可知KY8按下。按下。 0 1 1 1 0 线反转法不但采样速度快,而且键盘信息全面,但它对硬件有一定的要求:行线反转法不但采样速度快,而且键盘信息全面,但它对硬件有一定的要求:行 线和列线都必须是可反转的,既可配置为输出,又可配置成输入。此外,行线和列线和列线都必须是可反转的,既可配置为输出,又可配置成输入。此外,行线

35、和列 线的分组最好在线的分组最好在2个不同的操作口上,比如,个不同的操作口上,比如,80C51的的P1和和P3。 “线反转法”按键检测应用 AT89C52AT89C52 P1.0 P1.0 P1.1 P1.1 P1.2 P1.2 P1.3P1.3 P1.4 P1.4 P1.5 P1.5 P1.6 P1.6 P1.7P1.7 +5v 0行行 1行行 2行行 3行行 0列列 1列列 2列列 3列列 由行线输出全由行线输出全“0”0”,读入列,读入列 线,判有无键按下。线,判有无键按下。 若有键按下若有键按下, ,再将读入的列再将读入的列 线值由列线输出线值由列线输出, ,读进行线的值。读进行线的值。 第一步读进的列线值与第二第一步读进的列线值与第二 步读进的行线值相加,从而得到步读进的行线值相加,从而得到 代表此键的唯一的特征值。代表此键的唯一的特征值。 AT89C52AT89C52 P1.0 P1.0 P1.1 P1.1 P1.2 P1.2 P1.3P1.3 P1.4 P1.4 P1.5 P1.5 P1.6 P1.6 P1.7P1.7 +5v MOV P1MOV P1,#0F0H ;#0F0H ;低位送全低位送全“0”0” MOV A MOV A, P1 ;P1 ;读进读进P1P1口电平口电平 AN

温馨提示

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

评论

0/150

提交评论