时钟显示和设定

上传人:工**** 文档编号:509084126 上传时间:2024-01-22 格式:DOC 页数:13 大小:386KB
返回 下载 相关 举报
时钟显示和设定_第1页
第1页 / 共13页
时钟显示和设定_第2页
第2页 / 共13页
时钟显示和设定_第3页
第3页 / 共13页
时钟显示和设定_第4页
第4页 / 共13页
时钟显示和设定_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《时钟显示和设定》由会员分享,可在线阅读,更多相关《时钟显示和设定(13页珍藏版)》请在金锄头文库上搜索。

1、时钟显示训练告书小组人员:赵伟 张春春2012年5月9日设计要求根据电路图,编写程序实现一个电子时钟的功能;该时钟显示分钟和秒;该时钟可用按键进行时钟初始值设置;键盘使用电话键盘.设计要求分析根据设计要求进行分析,此次项目可以分成2个模块来实现, 分别是显示模块和时钟初始化模块也就是实现设置时钟设置的 功能,首先实现时钟的显示,时钟的显示是用4个8段数码管实 现来显示分和秒,提到时钟,就想到了定时器,可以利用定时器 来让秒和分进行累加,这就需要定义2个变量,秒和分,首先设 置定时器,让秒变量隔一秒加一次,然后判断秒是否已经加到了59,如果加到了 59,就让秒清0,同时让分加一,然后再判断分是否

2、加到了 59,如果分加到了 59就让分清0,然后再把分和秒的个位和十位拆开分别送到4个数码管显示,这里数码管显示用 的共阴极的动态显示,这样就实现了时钟的显示功夫能,接下来 就是比较难控制的部分,时钟初始化部分,设计要求是用电话键 盘通过外部中断来控制时钟的初始化设置,老师演示了一下效 果,当按下一个键的时候,时钟停止走动,这时已经进入设定状 态,按完4个设置键后,再按下“号或”号键时,时钟从 设定好的时间继续走动,我经过分析,基本的原理是当按下键盘 的任意一个按键时,进入键盘扫描中断函数,这时关闭定时器,然后再改变分和秒的数值来实现时钟的设定,设定好以后,当按 下或后,打开定时器,让时钟继续

3、走动,这个任务基 本就完成,但我觉得老师的那个时钟有几处我想改进的地方,那 就是再设定时钟的时候,任意按下键盘就开始设定,我把它改为 只有当按下号键时才能进入到时钟设定状态,设定好后再 按“#”号键让时钟继续走动,还有就是在设定时钟时,设定值 是从左边依次移入数码管的,我本来首先要设置的是分,但在刚 开始的时候却先在秒那显示,当4个按键值按完后,才显示在正 常的位置,我要把它改成我在设置分的时候,就让它显示在分的 数码管上,设置秒时就让它显示在秒的数码管上,我觉得这样效 果会比较好一些。硬件电路的绘制分析完设计要求后,就该绘制电路了,用仿真软件绘制了如下图所示的电路软件设计接下来就是软件设计了

4、,也是最难的一步了,首先跟据设计要求分析画出流程图。else if(key=2) &value10;If(key=2)显示函数void display(void)if(flag=l) 当分秒加完数后进行拆数 flag=O;miao_g=miao%10; 秒的个位 miao_s=miao/10;/ 秒的十位 fen_g=fen%10; / 分的个位 fen_s=fen/10; 分的十位Pl=tabmiao_g;奖拆开的数分别送入数码管显示com_l=l; com_2=l; com_3=l; com_4=0; delay(2); Pl=tabmiao_s; com_l=l;com_2=l;com_

5、3=0;com_4=l; delay(2); Pl=tabfen_g; com_l=l; com_2=0; com_3=l;com_4=l; delay(2);Pl=tabfe n_s; com_l=0; com_2=l; com_3=l; com_4=l; delay(2);按键设定函数void keyl(void) interrupt 0uchar i=O,j=l/temp/tempO;delay(lO);temp=P2;if(temp!=0x0f)/flag_key=O;tempO=temp&0x01; while(tempO!=OxO)temp=l; tempO=temp&0x01;

6、i+;P2=0xff;P2=0xf0;temp=P2;temp=l; tempO=temp&0x80; while(temp0!=0x00)temp=l; tempO=temp&0x80; j+; value=i*3+j;while(P2!=0xf0) delay(2);P2=0xff;P2=0x0f;if(value=ll)value=0;if(value=10)/当按卜键盘上的*号键时,时钟停止计数,进入设定状态TRO=O;flag_key=l;/当按卞设定键后,进入设定状态if(value=12)/当按下#号键时,打开定时器,时钟继续计数 TRO=1;if(flag_key=l)/进入判

7、断分秒改变值的判断句flag;if(key2&value59)key_fen=0; /当按下的值大于59时,让显示归0,以表示超出设定范 围key+;此时按键值也加1,进入到秒的设定,由于范围是059.所以不用考录个位的范围,让按键直接加1fen=key_fen; 把设定好中间变量分赋给显示变量分,送显示else if(key=2&value59)判断秒的范怜1key_miao=0;/if(key_miao)key+;miao=key_miao;把设定好的中间变量秒赋给显示变量秒,送显示 if(value3)key=0; 当按下第4次按键后,把按键次数请0key_miao=0;同时把分和秒的设

8、定值中间变量清0,以便进行下一次的设定key_fen=0;key+;定时器函数void time(void) interrupt 1EA=O;TH0=(65536-50000)/256;TL0=(65536-50000)%256;time0+;计算led等的时间 timel+; 计算时钟的时间 if(timel=10)timel=0;led=-led;/led灯每隔半秒闪烁一次if(timeO=2O)timeO=O;miao+;秒每隔一秒加一if(miao58)miao=0;fen+;当秒加到59时,分进行加一并把秒清0if(fen58)fen=O; /等分加到59时,请0flag=l; 进入

9、定时器当秒和分加完后,对分和秒进行拆数,送入数码管显示EA=1;void delay(uint z)uchar i;while(z-)for(i=0;i110;i+)/总结此次训练是把我们以前学的知识点都整合在了一起,对 我们有很好的帮助,锻炼我们的逻辑思想,如何去实现某个功能,用什么样的逻辑去实现。这只是一个很简单的时钟设置功能,但对于我们初学者而言确实是有点困难的,我们应该多实现一些常用的功能来锻炼我们的逻辑,这对于我们来说是非常有帮助的,我们现在还差的太远,必须得更加的努 力。调试过程中遇到最多问题的是时钟设定那个函数中,这块下了很多的功夫去调试,第一个问题就是功能按键和设定 按键混在一

10、起了,我最后用了一个flag-key来控制功能按键 和设定按键,当按下* ”号键时,把flag-key置为1,再下 一次按下按键时就开始进入设定,当按下“#”号时,打开 定时器并把flag-key置0,下次再按设定键时,不会改变时li钟的值,还有一个问题就是,在设置完一次后,要设置第二 次时,和按下的置不一样,而是把第一次设定的置和第二次 设定的值累加了,这就是没有清0的原因,所以我在当按下 第4次按键后把key_fen和_key_miao也清0 了,这样就可 以多次设定了,然后又考虑到分和秒的范围,如果当用户设 定的分值大于范围后,分的设定值出0,让key+;这样就直 接跳入秒的设定。还有点改进的地方就是,我应该再用一个定时器,把显示函数放在这个定时器中,然后把这个定时器的优先级设置 为最高,这样就可以解决掉按下按键后数码管闪烁的问题。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 活动策划

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