《键盘是十分重要的人机对话的组成部分是人向机器发出指令.ppt》由会员分享,可在线阅读,更多相关《键盘是十分重要的人机对话的组成部分是人向机器发出指令.ppt(25页珍藏版)》请在三一办公上搜索。
1、键盘是十分重要的人机对话的组成部分,是人向机器发出指令、输入信息的必需设备。1、键的特性 键盘是由若干独立的键组成,键的按下与释放是通过机械触点的闭合与断开来实现的,因机械触点的弹性作用,在闭合与断开的瞬间均有一个抖动过程。抖动必须消除,去抖动的方法主要有以下两种:,5.1 键盘接口技术,硬件去抖动软件去抖动,5.1 键盘接口技术,如果按键较多,常用软件方法去抖,即检测出键闭合后执行一个延时程序,产生5ms10ms的延时,让前沿抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。当检测到按键释放后,也要给5ms10ms的延时,待后沿抖动消失后才能转入该键的处理程序。,硬
2、件取抖电路,在键数较少时可用硬件方法消除键抖动。下图所示的RS触发器为常用的硬件去抖电路。,图中两个“与非”门构成一个RS触发器。当按键未按下时,输出为1;当键按下时,输出为0。此时即使用按键的机械性能,使按键因弹性抖动而产生瞬时断开(抖动跳开B),中要按键不返回原始状态A,双稳态电路的状态不改变,输出保持为0,不会产生抖动的波形。也就是说,即使B点的电压波形是抖动的,但经双稳态电路之后,其输出为正规的矩形波。这一点通过分析RS触发器的工作过程很容易得到验证。,2、键盘的形式键盘的形式有以下两种:独立式键盘编码式键盘(1)独立式键盘 每一个按键的电路是独立的,占用一条数据线。这种键盘占用硬件资
3、源多,适合少量按键的情况。,5.1 键盘接口技术,独立式键盘结构,独立式键盘与单片机接口,程序框图,独立式键盘与单片机接口,程序清单:ORG 0030HKB:MOVP1,#0FFH;置P1口为输入口MOVA,P1;读键状态CPLAANLA,#0FH;屏蔽高4位JZKB;无键闭合则返回ACALLD10MS;延时去抖动MOVA,P1;再读键状态CPLAANLA,#0FHJZKB;无键闭合则返回CJNEA,#01H,KB01INC20H;K1键闭合,20H单元加1SJMPKB,独立式键盘与单片机接口,KB01:CJNE A,#02H,KB02 DEC 20H;K2键闭合,20单元减1 SJMP KB
4、KB02:CJNE A,#04H,KB03 MOV 21H,#00H;K3键闭合,21H单元清0 SJMP KBKB03:CJNE A,#08H,KB MOV 21H,#0FFH;K4键闭合,21H单元置FF SJMP KB;若有两键以上闭合则返回 END,独立式键盘与单片机接口,矩阵式键盘结构,扫描原理:首先确定是否有键闭合然后逐一扫描以进一步确定是哪一键闭合 以44键盘为例:(1)判断是否有键按下:使列线D0D3都输出0,检测行线D4D7的电平。如果D4D7上的电平全为高,则表示没有键被按下。如果D4D7上的电平不全为高,则表示有键被按下。(2)扫面按键键值:如果没有键闭合,就返回扫描。如
5、果有键闭合,在进行逐列扫描,找出闭合键的键号。先使D0=0,D1D3=1,检测D4D7上的电平,如果D4=0,表示K1键被按下;同理,如果D5D7=0,分别表示K5、K9、K13键被按下;如果D4D7=1,则表示这一列没有键被按下。再使D1=0,D0、D2、D3为1,对第二列进行扫描,这样依次进行下去,直到把闭合的键找到为止。,矩阵式键盘的工作原理,矩阵式键盘与单片机接口,按键及相关说明,一、程序扫描方式三个步骤:判断有无键按下;软件延时10ms去抖动;求键的位置(行、列)。,矩阵式键盘与单片机接口,程序清单:KSCAN:ACALL KEYS1;调用判键闭合子程序JNZKEY1;(A)0有键闭
6、合则转至去抖动AJMPRETURN;无键闭合则返回KEY1:ACALL D10MS;调用10ms延时程序ACALLKEYS1;再次调用判键闭合子程序JNZKEY2;确认有键闭合,开始扫描AJMPRETURN;无键闭合则返回KEY2:MOVR2,#0FEH;送首列扫描字MOVR4,#00H;送首列号KEY0:MOVA,R2MOVP1,AMOVA,P1;扫描字从P1口送出JBACC.4,LINE1;第1行无键闭合,转第2行MOVA,#00H;第1行首键号送AAJMPKPV;转键值计算程序,矩阵式键盘与单片机接口,LINE1:JBACC.5,LINE2;第2行无键闭合,转第3行MOVA,#04H;第
7、2行首键号送AAJMPKPV;转键值计算程序LINE2:JBACC.6,LINE3;第3行无键闭合,转第4行MOVA,#08H;第3行首键号送AAJMPKPV;转键值计算程序LINE3:JBACC.7,NEXT;第4行无键闭合,转下1列MOVA,#0CH;第4行首键号送AKPV:ADDA,R4;计算键值PUSHACCKEY3:ACALLKEYS1;等待键释放JNZKEYS1POPACCSETBFLAG;置有键按下标志SJMPKEY4RETURN:CLRFLAG;清有键按下标志KEY4:RETNEXT:INCR4;列号加1,矩阵式键盘与单片机接口,MOVA,R2CJNEA,#0F7H,RETUR
8、N;判断4行是否都已扫描完,;完则返回RLA;为扫描下1行做准备MOVR2,AAJMPKEY0;开始扫描下1列KEYS1:MOVP1,#0F0H;判键闭合子程序MOVA,P1CPLAANLA,#0F0HRETD10MS:MOVR7,#14H;10ms延时子程序DLY:MOVR6,#0F8HDLY1:DJNZR6,DLY1DJNZR7,DLYRET,矩阵式键盘与单片机接口,二、定时中断扫描方式 该方式利用定时器10ms产生一次中断,设置两个标志(FLAG1、FLAG2),FLAG1用于去抖动标志,FLAG2用于键处理标志。,FLAG1=1,矩阵式键盘与单片机接口,程序清单:FLAG1BIT20H
9、.0;定义抖动标志FLAG2BIT20H.1;定义处理标志KEYVEQU30H;定义键值单元ORG0000HAJMPMAINORG000BHAJMPINTT0MAIN:MOVTMOD,#01H;T0为方式1,定时10msMOVTL0,#0F0HMOVTH0,#0D8HMOVIE,#82HSETBTR0HERE:SJMPHERE;主程序踏步,矩阵式键盘与单片机接口,INTT0:MOVTL0,#0F0H;中断服务,重新给定时器赋初值MOVTH0,#0D8HACALLKEYS1;判断键是否按下JNZKB1;有键按下则转至KB1CLRFLAG1;清除抖动标志CLRFLAG2;清除处理标志AJMPKB2
10、;中断返回KB1:JBFLAG1,KB3;判抖动标志是否有效SETBFLAG1;无效则设置成有效AJMPKB2;返回KB3:JBFLAG2,KB2MOVR2,#0FEH;送首列扫描字MOVR4,#00H;送首列号KEY0:MOVA,R2MOVP1,AMOVA,P1;扫描字从P1口送出JBACC.4,LINE1;第1行无键闭合,转第2行MOVA,#00H;第1行首键号送AAJMPKPV;转键值计算程序,矩阵式键盘与单片机接口,LINE1:JBACC.5,LINE2;第2行无键闭合,转第3行MOVA,#04H;第2行首键号送AAJMPKPV;转键值计算程序LINE2:JBACC.6,LINE3;第
11、3行无键闭合,转第4行MOVA,#08H;第3行首键号送AAJMPKPV;转键值计算程序LINE3:JBACC.7,NEXT;第4行无键闭合,转下1列MOVA,#0CH;第4行首键号送AKPV:ADDA,R4;计算键值MOVKEYV,A;存放键值SETBFLAG2;设置处理标志AJMPKB2NEXT:INCR4;列号加1MOVA,R2CJNEA,#0F7H,KB2;判断4行是否都已扫描完,完则返回RLA;为扫描下1行做准备MOVR2,AAJMPKEY0;开始扫描下1列KB2:RETIEND,矩阵式键盘与单片机接口,扩展单片机输入键的另一种方法,扫描原理:1、读键前先向P1口写数据,即扫描值,使
12、该端口 始终有一位清0,其它位均为1。2、将P1口的数据读入ACC,如没有键按下,则读入的值和 扫描值相同,此时PSW的P标志(奇偶标志)=1(A中有奇数个1),程序 按无键按下处理。如有键按下,则读入的数据必然有2位 为0,则P标志为0,程序将按键临时存入B,延时取抖后再读P1值送A,如A=B则按有键按下处理,无则按无键按下 处理。3、每完成一次键盘扫描无论有无键按下,扫描值都循环左移 一位再写入P1口,循环判断所有的输入键。程序流程图如下:,P1.7 p1.6p1.5p1.4p1.3p1.2p1.1p1.0,上例中8根口线只能扩展16个按键,现介绍另一种方法:同样用8根口线,可使按键增加到
13、28个,最多到36个。,begin,初始化,扫描值送P1,读P1送A,奇偶位=1?,A送B暂存,取抖动延时,读P1送A,A=B?,执行相应程序,用户其它程序,扫描值左循环,org 0000h ajmp step org 0050h step:mov r5,#11111110b;键扫描主程序main1:mov P1,r5;扫描值送P1口 mov a,P1;读端口数据至ACC jb P,main2;奇偶标志是否为1 mov b,a;为0,键值暂存B acall delay;延时取抖 mov a,P1;再读端口数据至A cjne a,b,main2;键值是否与第一次相等 ajmp look1;相等,
14、确实有键按下 main2:mov a,r5;当前扫描值送A rl a;左移一位 mov P1,a;送回扫描值寄存器 ajmp main1;转主程序入口,程序清单,y,N,y,N,look1:cjne a,#11111100b,look2 lcall Q1;1键按下,转Q1处理 ajmp main2;.look2:cjne a,#11111010b,look3 lcall Q2;2键按下,转Q2处理 ajmp main2look3:;.look26:cjne a,#10011111b,look27 lcall Q26;26键按下,转Q26处理 ajmp main2look27:cjne a,#01011111b,look28 lcall Q27;27键按下,转Q27处理 ajmp main2look28:,程序清单,cjne a,#10011111b,look29 lcall Q28;28键按下,转Q28处理 ajmp main2look29:ajmp main2 delay:mov r6,#1fh;延时处理 delay1:mov r7,#1fh djnz r7,$djnz r6,delay1 retend,程序清单,