单片机矩阵键盘编程.ppt

上传人:peixunshi 文档编号:14852941 上传时间:2022-02-21 格式:PPT 页数:29 大小:311KB
返回 下载 相关 举报
单片机矩阵键盘编程.ppt_第1页
第1页 / 共29页
单片机矩阵键盘编程.ppt_第2页
第2页 / 共29页
单片机矩阵键盘编程.ppt_第3页
第3页 / 共29页
单片机矩阵键盘编程.ppt_第4页
第4页 / 共29页
单片机矩阵键盘编程.ppt_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《单片机矩阵键盘编程.ppt》由会员分享,可在线阅读,更多相关《单片机矩阵键盘编程.ppt(29页珍藏版)》请在三一文库上搜索。

1、键盘接口,键盘是单片机应用系统中使用最广泛的一种 数据输入设备。键盘是一组按键的组合。键通常是一种常开型按钮开关,常态下键的两个触点处于断开状态,按下键时它们才闭合(短路)。,非编码键盘按组成结构又可分为独立式键盘和矩阵式键盘。独立式键盘的工作过程与矩阵式键盘类似,无论是硬件结构还是软件设计都比较简单,。,通常,键盘有编码和非编码两种。编码键盘通过硬件电路产生被按按键的键码和一个选通脉冲。选通脉冲可作为CPU的中断请求信号。这种键盘使用方便,所需程序简单,但硬件电路复杂,常不被单片机采用。,特点:每个按键占用一条I/O线,当按键数量较多时,I/O口利用率不高,但程序编制简单。适用于所需按键较少

2、的场合。,特点:电路连接复杂,但提高了I/O口利用率,软件编程较复杂。适用于需使用大量按键的场合。,扫描法 和线反转法,0123 ee debe7e 4567 edddbd7d 89AB ebdbbb7b CDEF e7d7b777,键盘接口的消抖 1消除键抖动,if语句if语句是C51中的一个基本条件选择语句,它通常有三种格式:(1)if (表达式) 语句;(2)if (表达式) 语句1; else 语句2;(3)if (表达式1) 语句1;else if (表达式2) (语句2;)else if (表达式3) (语句3;)else if (表达式n-1) (语句n-1;)else 语句n,

3、【例】 if语句的用法。(1)if (x!=y) printf(“x=%d,y=%dn”,x,y);执行上面语句时,如果x不等于y,则输出x的值和y的值。(2)if (xy) max=x;else max=y; 执行上面语句时,如x大于y成立,则把x送给最大值变量max,如x大于y不成立,则把y送给最大值变量max。使max变量得到x、y中的大数。(3)if (score=90) printf(“Your result is an An”);else if (score=80) printf(“Your result is an Bn”);else if (score=70) printf(“

4、Your result is an Cn”);else if (score=60) printf(“Your result is an Dn”);else printf(“Your result is an En”); 执行上面语句后,能够根据分数score分别打出A、B、C、D、E五个等级。,switch/case语句,if语句通过嵌套可以实现多分支结构,但结构复杂。switch是C51中提供的专门处理多分支结构的多分支选择语句。它的格式如下:switch (表达式)case 常量表达式1:语句1;break;case 常量表达式2:语句2;break;case 常量表达式n:语句n;bre

5、ak;default:语句n+1;,说明如下:(1)switch后面括号内的表达式,可以是整型或字符型表达式。(2)当该表达式的值与某一“case”后面的常量表达式的值相等时,就执行该“case”后面的语句,然后遇到break语句退出switch语句。若表达式的值与所有case后的常量表达式的值都不相同,则执行default后面的语句,然后退出switch结构。(3)每一个case常量表达式的值必须不同否则会出现自相矛盾的现象。(4)case语句和default语句的出现次序对执行过程没有影响。(5)每个case语句后面可以有“break”,也可以没有。有break语句,执行到break则退出

6、switch结构,若没有,则会顺次执行后面的语句,直到遇到break或结束。,【例】 switch/case语句的用法。 对学生成绩划分为AD,对应不同的百分制分数,要求根据不同的等级打印出它的对应百分数。可以通过下面的switch/case语句实现。switch(grade)case A;printf(”90100n”);break;case B;printf(”8090n”);break;case C;printf(”7080n”);break;case D;printf(”6070n”);break;case E;printf(”60n”);break;default;printf(”e

7、rror”n),键盘控制流程,单片机对矩阵式键盘接口处理的一般过程如图8.3所示。,键扫描,消抖,求键码,等待释放,按键处理,图8.3 键盘处理流程框图,1. 键扫描,键扫描就是要判断有无键按下,当扫描到有键按下时再进行下一步处理,否则退出键盘处理程序。独立式键盘扫描只需读取IO口状态,而矩阵式键盘描通常有两种实现方法:逐行扫描法和线反转法。,(1) 逐行扫描法。依次从第一至最末行线上发出低电平信号, 如果该行线所连接的键没有按下的话, 则列线所接的端口得到的是全“1”信号, 如果有键按下的话, 则得到非全“1”信号。,0111,1 1 1 1,1011,1 1 1 0,1101,1 1 1

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

9、的位置。,0000,1 1 1 0,0 0 0 0,1011,设第2行第4列键按下,列值:1110,行值:1011,由于按键按下时的机械动作,在按键被按下或松开的瞬间,其输出电压会产生波动,称为键的抖动。,2.消抖,为确保每按一次键单片机只进行一次处理,使键盘可靠地工作,必须消除按键抖动。消抖方法有硬件消抖和软件延时两种。,图8.5 键闭合及断开时的抖动,(1)硬件消抖法:就是在键盘中附加去抖动电路,从根上消除抖动产生的可能性。右图所示电路实际上是由R-S触发器构成的单脉冲电路。当按钮开关按下时Q端输出低电平,当开关松开时Q端恢复高电平,即输出一个负脉冲,以此消除抖动。,图8.6 硬件去抖动电

10、路,(2)软件消抖法:键按下的时间与操作者的按键动作有关,约为十分之几到几秒不等。而键抖动时间与按键的机械特性有关,一般为510ms不等。软件消抖法即是采用延时(一般延时1020ms)的方法,以避开按键的抖动,即在按键已稳定地闭合或断开时才读出其状态。,图8.7 软件消抖法延时区间示意图,3. 计算键码,键码是每个按键的标识。被按键确定下来之后,接下来的工作是计算闭合键的键码,然后才能根据键码进行对应的操作。,为编程方便,键码通常都是以键的排列顺序安排,按照从左到右、从上向下的顺序编排。键码可根据行号列号以查表求得,也可通过计算得到。我们将结合实例加以介绍。,4.等待释放,等待释放是为了保证键

11、的一次闭合仅进行一次处理。求得键码后,然后通过不断进行键扫描,如有键按下,则继续扫描,否则认为键已释放。,5.按键处理,根据系统功能要求,利用单片机控制完成特定操作。,8.1.2 键盘接口的控制方式,在单片机的运行过程中,何时进行键盘扫描和处理,可有下列三种情况:1.查询方式:单片机通过调用键盘扫描子程序,查询有无键按下。2.定时扫描方式:每隔一定时间执行一次键盘扫描子程序。3.中断方式:每当有键闭合时才向CPU发出中断请求,中断服务时进行键盘扫描和处理。,5.1.2 键盘接口和键输入软件中应解决的几个问题 1消除键抖动,if语句if语句是C51中的一个基本条件选择语句,它通常有三种格式:(1

12、)if (表达式) 语句;(2)if (表达式) 语句1; else 语句2;(3)if (表达式1) 语句1;else if (表达式2) (语句2;)else if (表达式3) (语句3;)else if (表达式n-1) (语句n-1;)else 语句n,【例】 if语句的用法。(1)if (x!=y) printf(“x=%d,y=%dn”,x,y);执行上面语句时,如果x不等于y,则输出x的值和y的值。(2)if (xy) max=x;else max=y; 执行上面语句时,如x大于y成立,则把x送给最大值变量max,如x大于y不成立,则把y送给最大值变量max。使max变量得到x

13、、y中的大数。(3)if (score=90) printf(“Your result is an An”);else if (score=80) printf(“Your result is an Bn”);else if (score=70) printf(“Your result is an Cn”);else if (score=60) printf(“Your result is an Dn”);else printf(“Your result is an En”); 执行上面语句后,能够根据分数score分别打出A、B、C、D、E五个等级。,switch/case语句,if语句通过

14、嵌套可以实现多分支结构,但结构复杂。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后面的语句

15、,然后退出switch结构。(3)每一个case常量表达式的值必须不同否则会出现自相矛盾的现象。(4)case语句和default语句的出现次序对执行过程没有影响。(5)每个case语句后面可以有“break”,也可以没有。有break语句,执行到break则退出switch结构,若没有,则会顺次执行后面的语句,直到遇到break或结束。(6)每一个case语句后面可以带一个语句,也可以带多个语句,还可以不带。语句可以用花括号括起,也可以不括。(7)多个case可以共用一组执行语句。,【例】 switch/case语句的用法。 对学生成绩划分为AD,对应不同的百分制分数,要求根据不同的等级打印出它的对应百分数。可以通过下面的switch/case语句实现。switch(grade)case A;printf(”90100n”);break;case B;printf(”8090n”);break;case C;printf(”7080n”);break;case D;printf(”6070n”);break;case E;printf(”60n”);break;default;printf(”error”n),

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1