程序设计课程设计-基于单片机的电子时钟.doc_第1页
程序设计课程设计-基于单片机的电子时钟.doc_第2页
程序设计课程设计-基于单片机的电子时钟.doc_第3页
程序设计课程设计-基于单片机的电子时钟.doc_第4页
程序设计课程设计-基于单片机的电子时钟.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

课程设计名称: 程序设计课程设计 题 目:基于定时计数器的秒表 学 期:2012-2013学年第2学期专 业: 班 级: 姓 名: 学 号: 指导教师: 辽宁工程技术大学课 程 设 计 成 绩 评 定 表学 期2012-2013(2)姓 名专 业班 级课程名称程序设计课程设计论文题目 基于定时器的秒表评 定 指 标评定指标分值得分知识创新性20理论正确性20内容难易性15结合实际性10知识掌握程度15书写规范性10工作量10总成绩100评语: 任课教师时 间2013年 6 月 7日备 注摘 要近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于与控制有关的系统,越来越广泛地应用于自动控制,智能化仪器,仪表,数据采集,军工产品以及家用电器等各个领域,单片机往往是作为一个核心部件来使用,在根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。本次设计中以单片机的发展过程和发展方向为背景,介绍了单片机的输入输出的工作原理和操作方法,中断的工作原理和操作方法,74LS573驱动器的工作原理和与数码管连接的方法。本次做的数字钟是以单片机(STC90C51)为核心,结合相关的元器件(共阴极LED数码管、驱动器74LS573等),再配以相应的软件,是它具有时,分,秒显示的功能,并且时,分,秒还可以调整。此次设计电子数字钟是为了了解电子数字钟的原理,从而学会制作电子数字钟。而且通过电子数字钟的制作进一步的了解各种在制作中用到的中小规模集成电路的作用及实用方法。通过它可以进一步学习与掌握单片机原理与使用方法。关键词:单片机;STC90C51;LED数码显示器;74LS573驱动器目录综述1.设计题目2.设计任务3.方案设计与分析4.电路原理设计及流程图 4.1功能描述 4.2电路原理 4.3按键调时流程图5.C运行程序6.心得体会综述单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。这次毕业设计通过对它的学习、应用,以AT89S51芯片为核心,辅以必要的电路,设计了一个简易的电子时钟,它由4.5V直流电源供电,通过数码管能够准确显示时间,调整时间,从而到达学习、设计、开发软、硬件的能力。1. 设计题目 基于定时计数器的秒表2. 设计任务1)实现时钟的基本功能2)能够手动对时间的调整 3)实现跑秒功能电子钟的实现由单片机90C51、电源、时分显示部分组成。对于电源部分,一部分是220V的电压通过变压整流稳压来得到数字系统所需要的+5V电压,以维持系统的正常工作,实际设计操作中,我们采用现成的控制平台。对于时分显示部分,我们采用动态扫描,以降低对单片机端口数的要求,同时也可降低系统的功耗。时分秒显示模块以及显示驱动都将通过STC90C51单片机的I/O口控制。3. 方案设计与分析 利用单片机的内部的定时/计数器工作与定时方式,对机器周期计数形成基准时间(如10ms)然后用另外一个计数器或软件计数的形式对基准时间进行计数形成秒(如对10ms计数100次),“秒”计数60次形成“分”,“分”计数60次形成“时”,“时”计数24次形成“天”并清零,然后通过译码器,数码管把他们的内容在相应的位置显示出来。在具体的设计时定时器采用中断方式工作,对时钟的形成在终中断序中实现,在主程序只是对定时/计数器的定义初始化,调用显示程序和控制程序的初始化。另外为了使用的方便,也设计了按键,可以通过按键对时分秒进行调整,这样程序就加了按键程序。4. 电路原理设计及流程图4.1功能描述:三个功能键,当上电后,系统显示提示符P。按下k1后,系统开始正常运行,此时按其它键均无效当再按下k1后,进入调秒状态,按k2加1,按k3减1,再按一下k1进入调分状态,再按一下,进入调时,再按一下,进入正常的运行状态在调整状态下,当调整该位时,该位会闪烁。4.2电路原理:这次设计使用multisim软件制图,电路图主要分为单片机、六位LED数码管、驱动器74LS573D、片选芯片74LS138D组成。 图4-1、电路原理图4.3按键调时流程秒加1分加1时加1图4-2按键调时子程序流程图启动脉冲跑秒是否有按键按下?显示当前时间秒按键按下?分按键按下?时按键按下?显示更新后时间5. C运行程序#include #include #define uchar unsigned char#define uint unsigned intuchar code table=0xC0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff,0x0c,0xbf; /*0-F、灭(16)、P.-*/uchar t0,t1,sec,min,hour,function,a0,a1,a2,a3,a4,a5,a6,a7;bit shan;void delay(uint count) ;uchar keychuli();uchar key();void display(uchar,uchar,uchar,uchar,uchar,uchar,uchar,uchar);void send();void ini();void chuli();/*主函数*void main()ini();while(1)display(16, 16, 16, 16, 16, 16, 16, 17); /没有键按下是显示P.if(key()=1) /当k1按下后则定时器驱动时钟开始走TR0=1;function=1;shan=0;while(1)send(); / 送数display(a0, a1, a2, a3, a4, a5, a6, a7); / 显示chuli(); /处理/*初始化程序*voidini()TMOD=0x01,TH0=0x3c,TL0=0xb0;TH1=0x3c,TL1=0xb0; / 定时50ms中断一次EA=1,ET0=1,TR0=0;ET1=1;TR1=0;/*键值处理程序*void chuli()switch(key()case 0:break;case 1:/ 当按键k1按下后function+;/ 判断按下的次数switch(function)case 1:TR0=1;TR1=0;shan=0;break;/一次调秒同时闪烁case 2:/两次调分同时闪烁case 3:/三次调分同时闪烁case 4:TR0=0;TR1=1;shan=1;break;/四次跳出调整状态时钟继续走时case 5:function=1;TR0=1;TR1=0;shan=0;break;/轮流循环break;case 2: /k2键上调switch(function) case 1:break;case 2:sec+;if(sec=60)sec=0;break;case 3:min+;if(min=60)min=0;break;case 4:hour+;if(hour=24) hour=0;break;break; case 4: /k3键下调switch(function)case 1:break;case 2:sec-;if(sec=255) sec=59;break;case 3:min-;if(min=255) min=59;break;case 4:hour-;if(hour=255) hour=23;break;break;/*定时器0的中断服务程序*void timer0() interrupt 1 using 3TH0=0x3c,TL0=0xb0;t0+;if(t0=20)t0=0;sec+;if(sec=60)sec=0;min+;if(min=60)min=0;hour+;if(hour=24)hour=0;/*定时器1的中数服务程序,对shan取反,以使灯闪烁*void timer1() interrupt 3 using 2TH0=0x3c,TL0=0xb0;t1+;if(t1=40)t1=0;shan=shan;/*uchar keychuli() uchar k; k=P1; /P1口内容送K k=k; /取反 k=(k&0xff); /屏蔽高4位,如果扫描8键,屏蔽该句。 return(k); /返回键值 /* 函数原型:key();* 功 能:键盘扫描函数,函数返回值即键值。*/uchar key() uchar keyzhi,keyzhii; /电子钟键盘按键键值临时存放 keyzhi=keychuli(); /调P1口处理函数 if(keyzhi!=0) /有键动作延时去抖动,否则函数返回 send(); display(a0, a1, a2, a3, a4, a5, a6, a7); display(a0, a1, a2, a3, a4, a5, a6, a7); keyzhi=keychuli(); /再次调P1口处理函数 if(keyzhi!=0) /真正有键按下,取键值并暂存 keyzhii=keyzhi; while(keyzhi!=0) /判按键是否释放,没有释放延时去抖动等待释放 send(); display(a0, a1, a2, a3, a4, a5, a6, a7); display(a0, a1, a2, a3, a4, a5, a6, a7); keyzhi=keychuli(); keyzhi=keyzhii; /按键释放后恢复按键键值 return(keyzhi); /返回按键键值/*显示子程序*void display(uchar a7,uchar a6,uchar a5,uchar a4,uchar a3,uchar a2,uchar a1,uchar a0)P0=tablea7;P2=0xfe;delay(1);P0=tablea6;P2=0xfd;delay(1); P0=tablea5;P2=0xfb;delay(1); P0=tablea4;P2=0xf7;delay(1);P0=tablea3;P2=0xef;delay(1);P0=tablea2;P2=0xdf;delay(1);P0=tablea1;P2=0xbf;delay(1);P0=tablea0;P2=0x7f;delay(1);/*将数送至缓冲单元,当shan的标志位为1时,再根据此时的此时的功能标示,对该位熄灭*void send()a0=sec%10;a1=sec/10;a2=18;a3=min%10;a4=min/10;a5=18;a6=hour%10;a7=hour/10;if(shan=1)switch(function)case 2:a0=16,a1=16;break;case 3:a3=16,a4=16;break;case 4:a6=16,a7=16;break;/*延时子程序基数为1毫秒*void delay(uint count) uint j; while(count-!=0) for(j=0;j80;j+); 6. 心得体会单片机作为我们主要的专业课程之一,我觉得单片机课程设计很有必要,而且很有意义。但当拿到题目时,确实不知道怎么着手,有些迷茫,上网查资料,问老师,在老师的帮助下,历时两个星期,解决一个又一个的困难,终于完成任务。在这次课程设计中,运用到了很多以前的专业知识,虽然过去从未独立应用过它们,但在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的一大收获。另外,要做好一个课程设计,就必须做到:在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常德,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计结束了,但是从中学到的知识会让我受益终身。发现、提出、分析、解决问题和实践能力的提高都会受益于我在以后的学习、工作和生活中。设计过程,好比是我们人类成长的历程,常有一些不如意,但毕竟这是第一次做,难免会遇到各种各样的问题。在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,不能灵活运用。通过这次设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心

温馨提示

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

评论

0/150

提交评论