任务11-控制秒表的启停与清零PPT演示课件

上传人:日度 文档编号:146412673 上传时间:2020-09-30 格式:PPT 页数:33 大小:4.86MB
返回 下载 相关 举报
任务11-控制秒表的启停与清零PPT演示课件_第1页
第1页 / 共33页
任务11-控制秒表的启停与清零PPT演示课件_第2页
第2页 / 共33页
任务11-控制秒表的启停与清零PPT演示课件_第3页
第3页 / 共33页
任务11-控制秒表的启停与清零PPT演示课件_第4页
第4页 / 共33页
任务11-控制秒表的启停与清零PPT演示课件_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《任务11-控制秒表的启停与清零PPT演示课件》由会员分享,可在线阅读,更多相关《任务11-控制秒表的启停与清零PPT演示课件(33页珍藏版)》请在金锄头文库上搜索。

1、1,主编:李文华,书号:978-7-5611-8470-7,新世纪高职高专电子信息类课程规划教材,2,控制秒表的启停与清零,任务要求,在任务10的基础上增加S0、S1、S2三个按键。S0键作启动键,按S0键,启动秒表走时,秒表在当前显示秒数的基础上计时。例如,当前数码管显示的是05,按S0键后,秒表在5秒的基础上计时,依次显示06,07,。S1键为停止键,按S1键,秒表停止走时,显示时间一直保持不变。S2键为清0键,按S2键,秒表停止走时,显示数值为0。上电时,秒表停止计时,数码管显示0秒。,1、循环结构中的break语句与continue语句,break语句,break语句常用在循环结构的循

2、环体中,用来结束循环,使程序跳转至循环结构之后的语句上。while语句的循环程序的一般形式:,while(表达式1) 语句块1; if(表达式2)break; 语句块2; 语句块3;,break流程图,continue语句,continue语句只能用在循环结构的循环体中,用来结束本次循环,使程序跳转到循环条件判断处。while语句的循环程序的一般形式如下,while(表达式1) 语句块1; if(表达式2)continue; 语句块2; 语句块3;,continue流程图,1、循环结构中的break语句与continue语句,【例】统计1100之间能被7整除的数的个数。,1、循环结构中的bre

3、ak语句与continue语句,voidmain(void) unsigned char i,j; j=0; for(i=1;i=100;i+) if(i%7!=0)continue; j+; ,2、键盘处理的流程,单片机系统中所用的键盘有独立式键盘和矩阵式键盘两种。键盘接口的基本任务主要有4个方面:判断是否有键按下;去抖动;确定所按下键的键值,即确定是何键按下;对按键功能进行解释。,在一次按键操作中,由于按键的机械特性的原因,键按下或释放都有一个弹跳的抖动过程,抖动的时间一般为515ms,其波形如下:,2、键盘处理的流程,去抖动的方法:硬件去抖动和软件去抖动 硬件去抖动:采用R-S触发器组成

4、的闩锁电路来去抖动。 软件去抖动:采取延时的方法来回避抖动期。具体方法是,检测到有键按下或者有键释放后,延时5ms15ms左右的时间,再去读按键输入情况,此时抖动期已过,所读的按键输入是按键稳定按下或释放状态。,软件去抖动的方法,2、键盘处理的流程,3、独立式键盘接口,接口电路,电路的特点 按键的一端接地,另一端接并行口的某一根I/O口线,I/O口线外接上拉电阻。若并行口内部有上拉电阻(如单片机的P1口),可不接上拉电阻。采用这种电路时,若某个键按下,则对应的I/O口线输入为0。 左图中,S0键未按下时,P0.0=1,S0按下后,P0.0=0。,上图中,S0键未按下时,P0.0=1,S0按下后

5、,P0.0=0。,键盘处理程序,键盘处理需要注意的问题是,要防止一次按键按下被多次解释执行(连击键除外)。,在main函数中处键盘流程如图所示,图中,keytreated为按键已处理标志位,keytreated标志位与按键是否按下控制按键解释的执行,防止一次按键事件被多次解释处理。 流程图对应的程序代码如下:,3、独立式键盘接口,#definedkeyportP1/1 P1为键盘控制口 bitkeytreated;/2 定义按键已处理标志位 voidmain(void)/3 main函数 unsignedcharkeyval;/4 keyval:按键的键值 /系统中软硬件初始化 5 keytr

6、eated=0;/6 键按下未处理 while(1)/7 死循环,循环体为语句8语句21 keyport=0ff;/8 键输入口写1,准备读按键输入 if(keyport)/9 有键按下吗? delay();/10 延时10ms去抖动 keyport=0ff;/11 键输入口写1,准备读按键输入 if(keyport)/12 有键按下吗? if(!keytreated)/13 键按下未处理吗,是则进行以下处理 keyval=scan();/14 扫描键盘,获取按键的位置(键值) keyexplain(keyval);/15 对按键进行解释处理 keytreated=1; /16 置键按下已处理

7、标志,阻止按键被重复处理 /17 键按下处理结束 /第2次、第1次检测到有键按下处理结束 elsekeytreated=0;/20 第1次检测到无键按下,置键按下未处理标志 /系统中其他处理 21 /22 死循环的循环体结束 /23 main函数结束,【说明】 本程序为键盘处理通用结构,也适合于后面介绍的矩阵式键盘处理。不同的键盘其获取键值和按键功能解释不同,在实际使用中需要根据具体情况作适当变换。 在独立式键盘中,按键的输入值中包含了按键的键值信息,即按键的输入值实际上就是按键的编码值。输入值的某位为0,则表示对应的按键按下。对于图5-15的电路,若P0口输入值为11111010B,则是S0

8、、S2键按下。程序中可以不单独使用scan函数获取键值。 在独立式键盘中,常用switch/case语句实现依键值进行按键功能解释。,3、独立式键盘接口,在定时中断服务函数中进行键盘处理,在main函数中处理键盘的主要缺陷是,程序中采用了10ms软件延时去抖动,增加了CPU的负担,不利于采用CPU睡眠技术抗干扰。 键盘处理可以放在10ms定时中断服务函数中,利用定时时差延时去抖动。采用这种方式处理键盘,需要用一个全局位变量down来标识10ms前按键是否按下过。 在10ms定时中断服函数中处理按键的流程图如下:,3、独立式键盘接口,3、独立式键盘接口,在T0定时中断服务函数中处理键盘的程序:,

9、voidtim0()interrupt 1using1/1 T0定时中断服务函数 unsignedcharkeyval;/2 定义局部变量keyval /重置T0的计数初值(10ms) 3 keyport=0 xff;/4 键盘控制口写1,准备读键盘输入 keyval=keyport;/5 读按键输入 if(keyval)/6 判断是否有键按下,取反方便判断 if(down/16 置键没处理标志 /17 无键按下处理结束 /10ms定时中断中的其他功能处理 18 /19 中断服务函数结束,3、独立式键盘接口,4、矩阵式键盘接口,矩阵式键盘的接口电路,由P2.0P2.3、P1.0P1.3口线与外

10、部16个按键构成的矩阵式键盘电路如下图。,矩阵式键盘采用行列电路结构,行线为输入口(图中P2口),外接有上拉电阻,列线为输出口,按键位于行线与列线的交叉处,一端接行线,另一端接列线。,4、矩阵式键盘接口,矩阵式键盘的处理程序,矩阵式键盘的处理流程与独立式键盘的框架结构一样,仅仅只是判断是否有键按下、确定按键的位置的方法不同而已。,1)判断是否有键按下,判断矩阵式键盘是否有键按下的方法是,列线输出全0后读行线输入,若行线输入为全1,则无键按下,否则有键按下。,判断是否有键按下的程序段:,P1=0 x00;/列线输出全0 P2=0 xff;/P2口写1,准备读P2口 tmp=P2;/读P2口的行线

11、输入 if(tmp)/判断行线的输入是否为全1 /有键按下处理/非全1,则为有键按下 else/为全1,则无键按下 /无键按下处理,4、矩阵式键盘接口,2)确定按键的位置 确定按键位置的方法是,列线逐列输出低电平,然后检查行线输入,若行线输入为全1,则继续下一列输出。若第j列输出0时,行输入不为全1,则查输入为0的行线号。,unsigned charscan(void)/1 扫描键盘函数 unsignedchari,j,tmp,keyval;/2 i:行号,j:列号,keyval:键值 keyval=0 xff;/3 键值赋初值:无键按下(0 xff) for(j=0;j4;j+)/4 从第列

12、0列开始检查,直至4列查完 P1=(0 x01j);/5 j列输出低电平,其他列输出高电平 P2=0 xff; /6 P2口写1,准备读P2口(准备读行输入) tmp=P2;tmp=tmp;/7 读行输入,并按位取反,方便程序处理 tmp=tmp,4、矩阵式键盘接口,2)确定按键的位置,case 8: i=3;break; default: i=63;break;/15 若为其他值,则行号设为无效值。 /16 行线检查结束 keyval=i*4+j; /17 根据键的行、列号确定键值 break;/18 跳出循环 /19 if语句结束 /20 for循环体结束 returnkeyval;/21

13、 返回键值。大于251的键值无效 /22 函数体结束,任务实施: 1、搭建硬件电路,电路图如下:,2、编写软件程序,(1)流程图:,2、编写软件程序,2、编写软件程序,#include #defineDCOUNT2 #defineportled_sP1 #defineportled_bP2 #definekeyportP3 #defineucharunsignedchar uchardatawcnt,timcnt,second;/7 wcnt:显示位置, /timcn:10ms中断次数,second:秒数 bitkeytreated,down; /8 keyteated:键按下已处理,down

14、:键按下过 ucharcode led=0 x3f,0 x06,0 x5b,0 x4f, 0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;/9 笔型码表 ucharcodeledctrl=0 x0fe,0 x0fd;/10 数码管显示控制码表 voiddisplay(uchar);/11 说明显示函数display voidkey(void);/12 说明键盘处理函数key,(2)程序代码,2、编写软件程序,voidmain(void)/13 main函数 second=0;/14 秒计数赋初值0 timcnt=0;/15 10ms中断计数赋初值0 wcnt=0;/16

15、 数码管显示位置计数器赋初值0 keytreated=0;/17 按键未处理 down=0;/18 无键按下 TMOD=0 x11;/19 T1:定时方式1,T0:定时方式1 TL0=(65536-9216)%256;/20 T0计数器赋初值:10ms TH0=(65536-9216)/256;/21 TL1=(65536-9216)%256;/22 T1计数器赋初值:10ms TH1=(65536-9216)/256;/23 ET0=1;/24 开T0中断 ET1=1;/25 开T1中断 PT1=1;/26 T1中断采用高优先级 EA=1;/27 开全局中断 TR0=1;/28 启动T0 while(1)/29 while死循环,30句为循环体 PCON=PCON|0X01;/30 睡眠CPU /31 main函数结束,2、编写软件程序,定时中断T1服务程序 功能:对秒进行计数,T1的启动与停止受控制于键盘操作,voidtim1()interrupt3using1/32 TL1=(65536-9216)%256;/33 T1重置计数初值:10ms TH1=(65536-9216)/256;/34 timcnt+;/35 10ms中断次数计数值加1 if(timcnt=100)/36 若计满1秒,则进行3740句处理 timc

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号