独立键盘和矩阵键盘_第1页
独立键盘和矩阵键盘_第2页
独立键盘和矩阵键盘_第3页
独立键盘和矩阵键盘_第4页
独立键盘和矩阵键盘_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

独立键盘和矩阵键盘

非编码键盘按组成结构又可分为独立式键盘与矩阵式键盘。独立式键盘得工作过程与矩阵式键盘类似,无论就是硬件结构还就是软件设计都比较简单,。

通常,键盘有编码与非编码两种。编码键盘通过硬件电路产生被按按键得键码与一个选通脉冲。选通脉冲可作为CPU得中断请求信号。这种键盘使用方便,所需程序简单,但硬件电路复杂,常不被单片机采用。S1S4S3S2P1.4P1.5P1.6P1.789S52+5V图8.1独立式键盘接口特点:每个按键占用一条I/O线,当按键数量较多时,I/O口利用率不高,但程序编制简单。适用于所需按键较少得场合。特点:电路连接复杂,但提高了I/O口利用率,软件编程较复杂。适用于需使用大量按键得场合。89s52P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7+5V图8.2

矩阵式键盘接口K99K10AK15FP10P11P12P13P14P15P16P17EA/VP31X119X218RESET9RD17WR16INT012INT113T014T115P101P112P123P134P145P156P167P178P0039P0138P0237P0336P0435P0534P0633P0732P2021P2122P2223P2324P2425P2526P2627P2728PSEN29ALE/P30TXD11RXD10VCC40GND20U189S52P10P11P12P13P14P15P16P17K00K11K22K33K55K66K77K88K44K11BK12CK13DK14E扫描法与线反转法89s52P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7+5V图8.2

矩阵式键盘接口 0 1 2 3 ee de be 7e 4 5 6 7 ed dd bd 7d 8 9 A B eb db bb 7b C D E F e7 d7 b7 77

键盘接口得消抖

1、消除键抖动键稳定键按下前沿抖动前沿抖动图5.2键合断时的电压抖动if语句if语句就是C51中得一个基本条件选择语句,它通常有三种格式:(1)if(表达式){语句;}(2)if(表达式){语句1;}else{语句2;}(3)if(表达式1){语句1;}elseif(表达式2)(语句2;)elseif(表达式3)(语句3;)……elseif(表达式n-1)(语句n-1;)else{语句n}【例】if语句得用法。(1)if(x!=y)printf(“x=%d,y=%d\n”,x,y);执行上面语句时,如果x不等于y,则输出x得值与y得值。(2)if(x>y)max=x;elsemax=y;

执行上面语句时,如x大于y成立,则把x送给最大值变量max,如x大于y不成立,则把y送给最大值变量max。使max变量得到x、y中得大数。(3)if(score>=90)printf(“YourresultisanA\n”);elseif(score>=80)printf(“YourresultisanB\n”);elseif(score>=70)printf(“YourresultisanC\n”);elseif(score>=60)printf(“YourresultisanD\n”);elseprintf(“YourresultisanE\n”);

执行上面语句后,能够根据分数score分别打出A、B、C、D、E五个等级。大家学习辛苦了,还是要坚持继续保持安静switch/case语句if语句通过嵌套可以实现多分支结构,但结构复杂。switch就是C51中提供得专门处理多分支结构得多分支选择语句。它得格式如下:switch(表达式){case常量表达式1:{语句1;}break;case常量表达式2:{语句2;}break;……case常量表达式n:{语句n;}break;default:{语句n+1;}说明如下:(1)switch后面括号内得表达式,可以就是整型或字符型表达式。(2)当该表达式得值与某一“case”后面得常量表达式得值相等时,就执行该“case”后面得语句,然后遇到break语句退出switch语句。若表达式得值与所有case后得常量表达式得值都不相同,则执行default后面得语句,然后退出switch结构。(3)每一个case常量表达式得值必须不同否则会出现自相矛盾得现象。(4)case语句与default语句得出现次序对执行过程没有影响。(5)每个case语句后面可以有“break”,也可以没有。有break语句,执行到break则退出switch结构,若没有,则会顺次执行后面得语句,直到遇到break或结束。【例】switch/case语句得用法。对学生成绩划分为A~D,对应不同得百分制分数,要求根据不同得等级打印出它得对应百分数。可以通过下面得switch/case语句实现。……switch(grade){case‘A’;printf(”90~100\n”);break;case‘B’;printf(”80~90\n”);break;case‘C’;printf(”70~80\n”);break;case‘D’;printf(”60~70\n”);break;case‘E’;printf(”<60\n”);break;default;printf(”error”\n)}键盘控制流程

单片机对矩阵式键盘接口处理得一般过程如图8、3所示。键扫描消抖求键码等待释放键扫描消除抖动有键按下?键扫描确有键按下?求键值按键处理键释放?YYYNN等待键释放N开始返回按键处理图8、3键盘处理流程框图1、键扫描

键扫描就就是要判断有无键按下,当扫描到有键按下时再进行下一步处理,否则退出键盘处理程序。独立式键盘扫描只需读取IO口状态,而矩阵式键盘描通常有两种实现方法:逐行扫描法与线反转法。(1)逐行扫描法。依次从第一至最末行线上发出低电平信号,如果该行线所连接得键没有按下得话,则列线所接得端口得到得就是全“1”信号,如果有键按下得话,则得到非全“1”信号。

89C51P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7+5V01111111101111101101111111101111设第2行第4列键按下行线输出列线输入01111111101111101101111111101111

(2)线反转法。

线反转法也就是识别闭合键得一种常用方法,该法比行扫描速度快,但在硬件上要求行线与列线外接上拉电阻。先将行线作为输出线,列线作为输入线,行线输出全“0”信号,读入列线得值,那么在闭合键所在得列线上得值必为0;然后从列线输出全“0”信号,再读取行线得输入值,闭合键所在得行线值必为0。这样,当一个键被按下时,必定可读到一对唯一得行列值。再由这一对行列值可以求出闭合键所在得位置。0000111000001011

89C51P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7+5V设第2行第4列键按下列值:1110行值:1011

由于按键按下时得机械动作,在按键被按下或松开得瞬间,其输出电压会产生波动,称为键得抖动。键按下前沿抖动后沿抖动2、消抖

为确保每按一次键单片机只进行一次处理,使键盘可靠地工作,必须消除按键抖动。消抖方法有硬件消抖与软件延时两种。

图8、5键闭合及断开时得抖动+5V&&QQ

(1)硬件消抖法:就就是在键盘中附加去抖动电路,从根上消除抖动产生得可能性。右图所示电路实际上就是由R-S触发器构成得单脉冲电路。当按钮开关按下时Q端输出低电平,当开关松开时Q端恢复高电平,即输出一个负脉冲,以此消除抖动。图8、6硬件去抖动电路

(2)软件消抖法:键按下得时间与操作者得按键动作有关,约为十分之几到几秒不等。而键抖动时间与按键得机械特性有关,一般为5~10ms不等。软件消抖法即就是采用延时(一般延时10~20ms)得方法,以避开按键得抖动,即在按键已稳定地闭合或断开时才读出其状态。100ms10ms10ms键抖动时间

图8、7软件消抖法延时区间示意图3、计算键码

键码就是每个按键得标识。被按键确定下来之后,接下来得工作就是计算闭合键得键码,然后才能根据键码进行对应得操作。

为编程方便,键码通常都就是以键得排列顺序安排,按照从左到右、从上向下得顺序编排。键码可根据行号列号以查表求得,也可通过计算得到。我们将结合实例加以介绍。4、等待释放

等待释放就是为了保证键得一次闭合仅进行一次处理。求得键码后,然后通过不断进行键扫描,如有键按下,则继续扫描,否则认为键已释放。5、按键处理

根据系统功能要求,利用单片机控制完成特定操作。8、1、2键盘接口得控制方式

在单片机得运行过程中,何时进行键盘扫描与处理,可有下列三种情况:1、查询方式:单片机通过调用键盘扫描子程序,查询有无键按下。2、定时扫描方式:每隔一定时间执行一次键盘扫描子程序。3、中断方式:每当有键闭合时才向CPU发出中断请求,中断服务时进行键盘扫描与处理。5、1、2键盘接口与键输入软件中应解决得几个问题

1、消除键抖动键稳定键按下后沿抖动前沿抖动图5.2键合断时的电压抖动if语句if语句就是C51中得一个基本条件选择语句,它通常有三种格式:(1)if(表达式){语句;}(2)if(表达式){语句1;}else{语句2;}(3)if(表达式1){语句1;}elseif(表达式2)(语句2;)elseif(表达式3)(语句3;)……elseif(表达式n-1)(语句n-1;)else{语句n}【例】if语句得用法。(1)if(x!=y)printf(“x=%d,y=%d\n”,x,y);执行上面语句时,如果x不等于y,则输出x得值与y得值。(2)if(x>y)max=x;elsemax=y;

执行上面语句时,如x大于y成立,则把x送给最大值变量max,如x大于y不成立,则把y送

温馨提示

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

评论

0/150

提交评论