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

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

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

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

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

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

4、调整时间的24小时数字钟。电路设计时,采用了8个数码管,4个按键开关,本系统需实现4个功能,所以需要通过按键进行切换。 数字钟是一种精确计算时间的仪器,需要较高的精度,并要削去人为的抖动,防止因此产生的延时误差。所以开始设置初时置为00,等待按键按下,有键按下,就开始计时,特此在编程设计时,应加入延时去抖动的子函数,计数单元则采用中断定时方式,对于校时部分,一般都是手动进行,通过按键来控制时、分、秒的快速校准。至于,显示时间的部分可由8位数码管来完成。1.4课程设计的电路原理图 按键的开关状态通过一定的电路转换为高、低电平状态。按键闭合过程在相应的I/O端口形成一个负脉冲。闭合和释放过程都要经

5、过一定的过程才能达到稳定,这一过程是处于高、低电平之间的一种不稳定状态,称为抖动。抖动持续时间的长短与开关的机械特性有关,一般在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,数字钟复位。按键k2:状态1:k2=1,调整数字钟的值,完成加一操作。按键k3:状态1:k3=1,调整数字钟的值,完成减一操作。说明:状态N次表示该键按下N次。1.5课程设计的参考流程图设计过程流程图: 在本次课程设计中,首先我

7、们在电脑上应用Keil软件,进行数字钟程序的编程和编译,然后使用Protues软件绘制好本次课程设计的电路原理图,程序调试完毕,编译没问题后,我们再通过应用Protues软件进行软件仿真,在Protues已绘制好的电路原理图中,调入已编译好的目标代码文件:*.HEX,然后可以在Protues的电路原理图中看到模拟的实物运行状态和过程,并进行测试,并分析程序,直到完成要求为止。 本次课程设计的软件程序包括主程序、中断主程序、时钟显示程序和延时子程序等等。另外由于电路中有四个按键,还另外设计了防抖动程序来防止干扰。它们的流程图如下所示,主程序是先开始,然后启动定时器,定时器启动后再进行按键检测,检

8、测完后就可以显示时间。 时间的运行依靠定时中断子程序对时钟单元数值进位调整来实现的。计数器T0打开后,进入计时,满50毫秒后,重装定时。中断一次,定时器中断时是先检测1秒是否到,1秒如果到,秒单位进位,满60秒后即为1分钟,分钟单元进位,60分到了后,时单元进位。日期的显示与时间显示方法相同,日期部分,24小时满后,日单元进位,日满后月单位进位,12月满后,年单位进位。这样然后根据进率,得到时、分、秒、年、月、日存储单元的值,并经译码后,通过扫描程序送LED数码管显示出来,实现时钟计时功能。 开始NY24小时到?时单元清零,日单元加1N30日(31日)到?Y日单元记1,月单元加1N12月到?Y

9、月单元记1,年单元加1日期显示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=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; /非闰年uch

10、ar 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;sbit 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

11、 k3=P13; void jishi(); /计时函数void set_time(); /设置时间void key_change(); /按键转移void key_set(); /按键设置void set_mdw(); /设置日期void delay(int m) /延时程序 uint i; uint j; for (i=0;im;i+) for(j=0;j500;j+); void timer0() interrupt 1 / timer0每50ms中断一次 TMOD=0x01; /定时器/计数器T0工作方式1 TH0=0x3c; /赋初值 TL0=0xb0; n+; jishi(); m

12、ain() /主函数 TMOD=0x01; /定时器/计数器T0工作方式1 TH0=0x3c; /赋初值 TL0=0xb0; TR0=1; EA=1; ET0=1; hh=00;mm=00;ss=00;/开机显示00-00-00 year=11;mon=6;day=9; /开机显示11-06-09 while(1) hhs=hh/10%10; /时十位 hhg=hh%10; /时个位 mms=mm/10%10; /分十位 mmg=mm%10; /分个位 sss=ss/10%10; /秒十位 ssg=ss%10; /秒个位 days=day/10%10; /日十位 dayg=day%10; /日

13、个位 mons=mon/10%10; /月十位 mong=mon%10; /月个位 years=year/10%10; /年十位 yearg=year%10; /年个位 /调用函数 key_change(); key_set(); set_time(); set_mdw(); if(set1=1) /K0键按一下正常计时 P0=tabhhs;P3_0=0;delay(1);P3_0=1; /显示时十位 P0=tabhhg;P3_1=0;delay(1);P3_1=1; /显示时个位 P0=tab10;P3_2=0;delay(1);P3_2=1; /显示“” P0=tabmms;P3_3=0;delay(1);P3_3=1; /显示分十位 P0=tabmmg;P3_4=0;delay(1);P3_4=1; /显示分个位 P0=tab10;P3_5=0;delay(1);P3_5=1; /显示“” P0=tabsss;P3_6=0;delay(1);P3_6=1; /显示秒十位 P0=tabssg;P3_7=0;delay(1);P3_7=1; /显示秒个位 if(set1=2) /K0键按二下调整时间 P0=tabhhs;P3_0=0;delay(1);P3_0=

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

当前位置:首页 > 大杂烩/其它

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