《史治国数字时钟.doc》由会员分享,可在线阅读,更多相关《史治国数字时钟.doc(11页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、2013-2014学年 第一学期数字时钟课程设计学 院:计算机科学与信息工程专 业:软件工程学 号:姓 名:史治国日 期:2013.12.04目 录一、设计要求及目的1二、设计内容1三、设计原理2四、程序源代码4五、实验结果8六、总结9一、设计要求及目的进行电路硬件设计和系统软件编程,以及仿真调试或制作。一般12人一组,每组完成的内容不能雷同。选择设计基于单片机的时钟显示器,数字钟是一个将“时”、“分”、“秒”显示计时装置。它的计时周期为24小时,显示满刻度为23时59分59秒99毫秒,另外应有校时功能。实现的功能:在数字钟正常进行显示时,其显示周期为00:00:00至23:59:59,其中有
2、五个按键,按下“暂停”键时钟停止走动,按下“开始”键时钟开始走动,按下“秒设置”时钟秒位自加1,加至60时向分位进1,按下“分设置”时钟分位自加1,加至60时向时位进1,按下“时设置”时钟秒位自加1,加至24时显示00。二、设计内容开机时,显示00:00:00的时间开始计时;其中AT89C51单片机的引脚P0.0/AD0控制“秒”调整,每按一次加1s;P0.1/AD1控制“分”调整,每按一次加1min;P0.2/AD2控制“时”的调整,每按一次加1h。计时满23:59:59时,返回00:00:00重新开始计时。硬件电路使用protel软件绘制,并使用proteus6和keilC51进行仿真,观
3、察运行结果与过程。三、设计原理它是利用单片机的内部的定时/计数器工作与定时方式,对机器周期计数形成基准时间(如10ms)然后用另外一个计数器或软件计数的形式对基准时间进行计数形成秒(如对10ms计数100次),“秒”计数60次“分”,“分”计数60次形成“时”,“时”计数24次满一天清零,然后通过译码器,数码管把他们的内容在相应的位置显示出来。在具体的设计时定时器采用中断方式工作,对时钟的形成在终中断序中实现,在主程序只是对定时/计数器的定义初始化,调用显示程序和控制程序的初始化。另外为了使用的方便,也设计了按键,可以通过按键对时分秒进行调整,这样程序就加了按键程序.暂停(中断):开始检测“暂
4、停”按键Set1=0?标记为1按键按下?秒/分/时自增1至满进制结束向高位增1NNNY四、程序源代码#include#define uchar unsigned char #define uint unsigned intsbit set1=P10;/暂停sbit set2=P11;/开始sbit sets=P12;/秒设置sbit setm=P13;/分设置sbit seth=P14;/时设置sbit dp=P27;/小数点uchar code table1=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x
5、5e,0x79,0x71;uchar t0,hour,fen,miao,ge,shi,flag;void delay(uint z) /延时子程序z的取值为这个函数的延时ms数,如delay(200);大约延时200ms uint x,y; for(x=z;x0;x-) for(y=110;y0;y-); void init() TMOD=0x01; /TMOD的值表示定时器工作方式选择 TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; /开总中断 ET0=1; /允许定时器0中断 TR0=1; /启动定时器 void timer0() i
6、nterrupt 1 /定时器0的中断号是1 TH0=(65536-50000)/256; TL0=(65536-50000)%256; t0+; if(t0=20) t0=0; miao+; if(miao=60) miao=0; fen+; if(fen=60) fen=0; hour+; if(hour=24) hour=0; void display(uchar hour,uchar fen,uchar miao) shi=hour/10; ge=hour%10; P3=0xfe; P2=table1shi; delay(5); P3=0xfd; P2=table1ge; dp=1;
7、delay(5); shi=fen/10; ge=fen%10; P3=0xfb; P2=table1shi; delay(5); P3=0xf7; P2=table1ge; dp=1; delay(5); shi=miao/10; ge=miao%10; P3=0xef; P2=table1shi; delay(5); P3=0xdf; P2=table1ge; delay(5); void keyscan() if(set1=0) delay(5); if(set1=0) TR0=0; flag=1; while(!set1); if(flag=1) if(sets=0) delay(5)
8、; if(sets=0) miao+; if(miao=60) miao=0; fen+; if(fen=60) fen=0; hour+; if(hour=24) hour=0; while(!sets); if(setm=0) delay(5); if(setm=0) fen+; if(fen=60) fen=0; hour+; if(hour=24) hour=0; while(!setm); if(seth=0) delay(5); if(seth=0) hour+; if(hour=24) hour=0; while(!seth); if(set2=0) delay(5); if(s
9、et2=0) TH0=(65536-50000)/256; TL0=(65536-50000)%256; t0=0; flag=0; TR0=1; while(!set2); void main() init(); while(1) display(hour,fen,miao); /调用显示子程序 keyscan(); /调用键盘扫描子程序 五、实验结果六、总结通过这次单片机设计,我加深了对课本专业知识的理解,平常都是理论知识的学习,在此次课程设计中,真正做到了自己查阅资料、完成一个基本电路的设计。在此次的数字钟设计过程中,我更进一步地熟悉了芯片的结构及掌握了各芯片的工作原理和其具体的使用方法
10、。当然,在这个过程中我也遇到了困难,通过查阅资料,相互讨论,我准确地找出错误所在并及时纠正了,这也是我最大的收获,使自己的实验动手能力有了进一步的提高,让我对以后的工作学习有了更大的信心。回顾起此次设计,感慨颇多,从理论到实践,我学到很多很多的东西,不仅巩固了以前所学过的知识,而且学到了很多在书本上没有学到过的内容。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才是真正的知识,才能提高自己的实际动手能力和独立思考的能力。在设计的过程遇到了各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计,把以前所学过的知识重新温故,巩固了所学的知识。此次的课程设计,还让我知道了最重要的是心态,在你拿到题目时会觉得困难,但是只要充满信心,脚踏实地,就肯定会完成的。