单片机课程设计(论文)-数字钟设计

上传人:jiups****uk12 文档编号:52749175 上传时间:2018-08-25 格式:DOC 页数:25 大小:402.02KB
返回 下载 相关 举报
单片机课程设计(论文)-数字钟设计_第1页
第1页 / 共25页
单片机课程设计(论文)-数字钟设计_第2页
第2页 / 共25页
单片机课程设计(论文)-数字钟设计_第3页
第3页 / 共25页
单片机课程设计(论文)-数字钟设计_第4页
第4页 / 共25页
单片机课程设计(论文)-数字钟设计_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《单片机课程设计(论文)-数字钟设计》由会员分享,可在线阅读,更多相关《单片机课程设计(论文)-数字钟设计(25页珍藏版)》请在金锄头文库上搜索。

1、一、数字钟设计一、数字钟设计 1.1 课程设计目的课程设计目的了解数字钟的组成及其工作原理;巩固、加深和扩大单片机应用的知识面,提高综合及灵活运用所学知识解 决实际问题的能力;培养针对课题需要,选择和查阅有关手册、图表及文献资料的自学能力,提高组成系统、编程、调试的动手能力;通过对课题设计方案的分析、选择、比较,熟悉单片机应用系统的开发。研制的过程,掌握软件设计的方法、内容及步骤;通过对单片机程序的设计,基本掌握51单片机开发系统的操作、编程技巧,完成数字钟的控制功能,掌握寄存器/定时器与中断的使用,实现对单片机的了解从感性认识上升为理性认识。1.2课程设计的设计任务和基本要求课程设计的设计任

2、务和基本要求设计任务设计任务掌握 AT89C51 实验开放系统中的实验模块原理,画出电路原理图;综合运用实验模块,用 AT89C51 开发设计具有一定功能的单片机控制系统,进行软件的设计与调试;基本要求基本要求能直接显示时、分、秒的数字钟,要求二十四为一计数周期。当电路发生走时误差时,要求电路具有校时功能。设计数字电子钟,电子钟时间格式为:XX-XX-XX,由左向右分别为:时、分、秒。完成显示由秒 01 一直加 1 至 59,再恢复为 00;分由 00 一直加 1 至 59,再恢复为 00;分由 00 一直加 1 至 59,再恢复为 00。设计数字电子钟,电子钟日期格式为:XX-XX-XX,开

3、机显示当日设计日期11-06-09,由左向右分别为:年、月、日。完成显示由日 01 一直加 1 至30(28,29,31 因具体情况而定) ,再恢复为 00;月由 01 一直加 1 至 12,再恢复为 00;年则一直进行累加运算。设计控制按键 k0 实现计时、时间与日期的切换功能,k1 实现按键转移进而进行校时的功能,k2,k3,分别实现加 1、减 1 的功能。1.3 课程设计原理课程设计原理数字钟实际上是一个对标准频率(1HZ)进行计数的计数电路。标准的频率时间信号必须做到准确稳定,通常使用石英晶体振荡电路构成数字钟。本次课程设计的内容是设计一个多功能的数字钟,要综合实现时间校准,正常计时,

4、显示日期、时间显示与日期显示切换等功能。多功能数字钟就是基于单片机的特性来实现其功能的。本系统采用的单片机是 AT89S51 型号。主要实现可调整时间的 24 小时数字钟。电路设计时,采用了 8 个数码管,4 个按键开关,本系统需实现 4 个功能,所以需要通过按键进行切换。 数字钟是一种精确计算时间的仪器,需要较高的精度,并要削去人为的抖动,防止因此产生的延时误差。所以开始设置初时置为 00,等待按键按下,有键按下,就开始计时,特此在编程设计时,应加入延时去抖动的子函数,计数单元则采用中断定时方式,对于校时部分,一般都是手动进行,通过按键来控制时、分、秒的快速校准。至于,显示时间的部分可由 8

5、 位数码管来完成。1.4 课程设计的电路原理图课程设计的电路原理图按键的开关状态通过一定的电路转换为高、低电平状态。按键闭合过程在相应的 I/O 端口形成一个负脉冲。闭合和释放过程都要经过一定的过程才能达到稳定,这一过程是处于高、低电平之间的一种不稳定状态,称为抖动。抖动持续时间的长短与开关的机械特性有关,一般在5-10ms 之间。为了避免 CPU 多次处理按键的一次闭合,应采用措施消除抖动。本次课程设计采用的是独立式按键,直接用 I/O 口线构成单个按键电路,每个按键占用一条 I/O 口线,每个按键的工作状态不会产生互相影响。时钟是单片机的心脏,单片机各功能部件的运行都是以时钟频率为基准,有

6、条不紊的一拍一拍地工作。因此,时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。常用的时钟电路有两种方式:一种是内部时钟方式,另一种为外部时钟方式。本次课程设计采用的是内部时钟方式。图 1 总电路图基于以上电路图,数字钟的操作如下:按键 k0状态 1:k0=1,数字钟正常时钟显示状态。状态 2:k0=2,数字钟调整时钟状态。状态 3:k0=3,数字钟正常日期显示状态。状态 4:k0=4,数字钟调整日期状态。按键 k1状态 1:k1=1,调整数字钟的时/年值。状态 2:k1=2,调整数字钟的分/月值。状态 3:k1=3,调整数字钟的秒/日值。状态 4:k1=4,数字钟复位

7、。按键 k2:状态 1:k2=1,调整数字钟的值,完成加一操作。按键 k3:状态 1:k3=1,调整数字钟的值,完成减一操作。说明:状态 N 次表示该键按下 N 次。1.5 课程设计的参考流程图课程设计的参考流程图设计过程流程图:设计过程流程图:在本次课程设计中,首先我们在电脑上应用 Keil 软件,进行数字钟程序的编程和编译,然后使用 Protues 软件绘制好本次课程设计的电路原理图,程序调试完毕,编译没问题后,我们再通过应用 Protues 软件进行软件仿真,在Protues 已绘制好的电路原理图中,调入已编译好的目标代码文件:*.HEX,然后可以在 Protues 的电路原理图中看到模

8、拟的实物运行状态和过程,并进行测试,并分析程序,直到完成要求为止。本次课程设计的软件程序包括主程序、中断主程序、时钟显示程序和延时子程序等等。另外由于电路中有四个按键,还另外设计了防抖动程序来防止干扰。它们的流程图如下所示,主程序是先开始,然后启动定时器,定时器启动后再进行按键检测,检测完后就可以显示时间。时间的运行依靠定时中断子程序对时钟单元数值进位调整来实现的。计数器 T0 打开后,进入计时,满 50 毫秒后,重装定时。中断一次,定时器中断时是先检测 1 秒是否到,1 秒如果到, ,秒单位进位,满 60 秒后即为 1 分钟,分钟单元进位,60 分到了后,时单元进位。日期的显示与时间显示方法

9、相同,日期部分,24 小时满后,日单元进位,日满后月单位进位,12 月满后,年单位进位。这样然后根据进率,得到时、分、秒、年、月、日存储单元的值,并经译码后,通过扫描程序送 LED 数码管显示出来,实现时钟计时功能。1.6课程设计的参考程序课程设计的参考程序 #include #define uchar unsigned char #define uint unsigned int uchar code tab=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40; /0,1,2,3,4,5,6,7,8,9,- uchar table1=

10、31,31,29,31,30,31,30,31,31,30,31,30,31; /闰年闰年 uchar table2=31,31,28,31,30,31,30,31,31,30,31,30,31; /非闰年非闰年 uchar n; uchar hh,mm,ss,nn,yy,rr; uchar hhs,hhg,mms,mmg,sss,ssg;uchar year; uchar day,mon; uchar days,dayg,mons,mong,years,yearg;uchar set1=0,set2=0; sbit P3_0=P30;开始开始24 小时到?小时到?时单元清零,日单元加时单元清

11、零,日单元加 130 日(日(31 日日)到?到?日单元记日单元记 1,月单元加,月单元加 112 月到?月到?月单元记月单元记 1,年单元加,年单元加 1日期显示日期显示NNNYYYsbit P3_1=P31; sbit P3_2=P32; sbit P3_3=P33; sbit P3_4=P34; sbit P3_5=P35; sbit P3_6=P36; sbit P3_7=P37; sbit k0=P10; sbit k1=P11; sbit k2=P12; sbit k3=P13; void jishi(); /计时函数计时函数 void set_time(); /设置时间设置时间

12、void key_change(); /按键转移按键转移 void key_set(); /按键设置按键设置 void set_mdw(); /设置日期设置日期void delay(int m) /延时程序延时程序 uint i; uint j; for (i=0;i4)set1=1; void key_set() /k1键按下,进入设置状态键按下,进入设置状态 if(k1=0) delay(20); if(k1=0) set2+;while(!k1);if(set24) set2=1; void set_time()/设置时间函数设置时间函数 if(set1=2) /KO按二下进入时间调整状

13、态按二下进入时间调整状态 if(set2=1)/K1按一下调整时按一下调整时 hh=incone(hh); /时加一时加一if(hh=24) hh=0; /当时累加到当时累加到24时,时为时,时为0if(hh=-1) hh=23; /当时累加到当时累加到-1时,时为时,时为23hh=decone(hh); /日减一日减一 if(set2=2) /K1按二下调整分按二下调整分 mm=incone(mm); /分加一分加一if(mm=60) mm=0; /当分累加到当分累加到60时,时为时,时为0if(mm=-1) mm=59; /当分累减到当分累减到-1时,分为时,分为59mm=decone(m

14、m); /分减一分减一 if(set2=3) /K1按三下调整秒按三下调整秒 ss=incone(ss); /秒加一秒加一if(ss=60) ss=0; /当秒累加到当秒累加到60时,时为时,时为0if(ss=-1) ss=59; /当秒累减到当秒累减到-1时,分为时,分为59ss=decone(ss); /秒减一秒减一if(set2=4) /K1按四下清零按四下清零hh=00;mm=00;ss=00; void set_mdw() /设置年月日函数设置年月日函数 if(set1=4) /KO按四下进入日期调整状态按四下进入日期调整状态 if(set2=1) /K1按一下调整月按一下调整月 m

15、on=incone(mon); /月加一月加一if(mon=13) mon=1;/当月累加到当月累加到13时,月为时,月为1mon=decone(mon); /月减一月减一if(mon=0) mon=12; /当月累减到当月累减到0时,月为时,月为12 if(set2=2) /K1按二下调整日按二下调整日 day=incone(day); /日加一日加一if(day=32) day=1; /当日累加到当日累加到32时,日为时,日为1day=decone(day); /日减一日减一if(day=0) day=31; /当日累减到当日累减到0时,日为时,日为31 if(set2=3) /K1按三下

16、调整年按三下调整年 year=incone(year); /年加一年加一if(year=99) year=00; /当年累加到当年累加到99时,年清零时,年清零year=decone(year); /年减一年减一if(year=-1) year=00; /当年累减到当年累减到-1时,年清零时,年清零 时间的运行依靠定时中断子程序对时钟单元数值进位调整来实现的。计数器 T0 打开后,进入计时,满 50 毫秒后,重装定时。中断一次,满一秒后秒进位,满 60 秒后即为 1 分钟,分钟单元进位,60 分到了后,时单元进位,24 小时满后,日单元进位,日满后月单位进位,12 月满后,年单位进位。这样然后根据进率,得到时、分、秒、年、月、日存储单元的值,并经译码后

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

当前位置:首页 > 中学教育 > 其它中学文档

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