当前位置:文档之家› 电子时钟单片机【完整版】

电子时钟单片机【完整版】

烟台南山学院单片机课程设计题目电子时钟姓名:所在学院所学专业:班级:学号:指导教师:完成时间:随时代的发展,生活节奏的加快,人们的时间观念愈来愈强;随自动化、智能化技术的发展,机电产品的智能度愈来愈高,用到时间提示、定时控制的地方也会愈来愈多,因此,设计开发数字时钟具有良好的应用前景。

由于单片机价格的低成本、高性能,在自动控制产品中得到了广泛的应用。

本设计利用Atmel公司的AT89S52单片机对电子时钟进行开发,设计了实现所需功能的硬件电路,应用汇编语言进行软件编程,并用实验板进行演示、验证。

在介绍本单片机的发展情况基础上,说明了本设计实现的功能,以及实验板硬件情况,并对各功能电路进行了分析。

主要工作放在软件编程上,用实验板实现时间、日期、定时及它们的设定功能,详细对软件编程流程以及调试进行了说明,并对计时误差进行了分析及校正,提出了定时音与显示相冲突问题及解决方案。

实验证明效果良好,可以投入使用。

本次仿真设计的目的就是让同学们在理论学习的基础上,通过完成一个涉及MCS—51单片机都种资源应用并具有综合功能的小系统目标板的设计与编程应用,使学生不但能够将课堂上学到的理论知识与实际应用结合起来,而且能够对电子电路、电子元器件、印制电路板等方面的知识进一步加深认识,同时在软件编程、排版调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高,为今后能够独立进行某些单片机应用系统的开发设计工作打下一定的基础。

在本学期的开始我们进行了计算机工程实践,在实践中我们以微机原理与接口技术课程中所学知识为基础,设计了电子时钟系统。

本系统为多功能数字钟的系统。

本设计以单片机AT89c51为控制核心,选用DS1302串行时钟芯片,RT1602液晶显示器实现液晶显示当前时间、日期、星期。

本电子时钟具有日期、时、分、秒的显示、调整功能,采用的时间制式为24小时制,时间显示格式为时(十位、个位)、分(十位、个位)、秒(十位、个位)。

关键词:单片机 AT89S52 电子时钟汇编语言绪论............................................. 错误!未定义书签。

1.总体设计....................................... 错误!未定义书签。

设计目的...................................... 错误!未定义书签。

总体设计...................................... 错误!未定义书签。

2.硬件设计....................................... 错误!未定义书签。

总体接线...................................... 错误!未定义书签。

2.2 硬件连接................................. 错误!未定义书签。

3.软件设计....................................... 错误!未定义书签。

主程序流程图及程序设计........................ 错误!未定义书签。

键盘非法性检测................................ 错误!未定义书签。

断服务程序流程................................ 错误!未定义书签。

4. 仿真调试...................................... 错误!未定义书签。

总结............................................. 错误!未定义书签。

参考文献......................................... 错误!未定义书签。

绪论单片机由于其微小的体积和极低的成本,广泛的应用于家用电器、工业控制等领域中。

在工业生产中,电流、电压、温度、压力和流量也都是常用的被控参数。

单片机电子时钟系统,是利用单片机作为系统的主控制器,采用AT89S52单片机作为控制核心对时钟芯片DS1302的控制,同时读取时间,并队输入信号作出处理。

该单片机具有集成度高,运算快速快,体积小、运行可靠,价值低廉的特点。

鉴于这样的重要性,我们打算设计一种基于单片机的电子时钟系统,实现对时间的调整。

本设计以单片机AT89C51为控制核心,由实时时钟模块,键盘模块组成其中实时时钟采用DS1302可实现对时间的显示,设置,计时等功能在日常生活和工作中,我们常常用到定时控制,如扩印过程中的曝光定时等。

早期常用的一些时间控制单元都使用模拟电路设计制作的,其定时准确性和重复精度都不是很理想,现在基本上都是基于数字技术的新一代产品,随着单片机性价比的不断提高,新一代产品的应用也越来越广泛。

大则可以构成复杂的工业过程控制系统,完成复杂的控制功能;小则可以用于家电控制,甚至可以用于儿童电子玩具。

它功能强大、体积小、质量轻、灵活好用,配以适当的接口芯片,可以构成各种各样、功能各异的微电子产品。

近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于与控制有关的系统,越来越广泛地应用于自动控制,智能化仪器,仪表,数据采集,军工产品以及家用电器等各个领域,单片机往往是作为一个核心部件来使用,在根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。

数子时钟在日常生活中最常见,应用也最广泛。

本次设计以硬件软件化为指导思想,充分发挥单片机功能,大部分功能通过软件编程来实现,电路简单明了,系统稳定性高。

同时,该时钟系统还具有功耗小、成本低的特点,具有很强的实用性,而且系统具有一定的可扩展性。

1.总体设计设计目的应用单片机控制技术,设计出以89c51单片机为核心的电子时钟,电子时钟能够显示时、分、秒显示时间的功能,还可以进行时和分的校对,而且其片选的灵活性强。

设计一个电子时钟,可以查询日历,可以设置时间,掉电时间不丢失;时钟必须有定闹功能,定闹设置掉电不丢失。

总体设计该电子时钟由89C51,BUTTON,1602 LCD液晶屏等构成,采用晶振电路作为驱动电路,利用单片机内部定时计数器0通过软件扩展产生的一秒定时,达到时分秒的计时,六十秒为一分钟,六十分钟为一小时,满二十四小时为一天。

闹钟和时钟的时分秒的调节是由一个按键控制,而另外一个按键控制时钟和闹钟的时间的调节。

图1系统结构框图该电子时钟由STC89C51,BUTTON,1602 LCD液晶屏等构成,采用晶振电路作为驱动电路,晶振电路的晶振频率为12MHZ,使用的定时器/计数器工作方式0,通过软件扩展产生的一秒定时,达到时分秒的计时,60秒为一分钟,60分钟为一小时,24小时为一天,又重00:00:00开始计时。

没有按键按下时,时钟正常运行,当按下调节时钟按键K1,就会关闭时钟,当按下闹钟按键K3时时钟就会进入设置时间界面,但是时钟不会停止工作,按K2键,,就可以对时钟和闹钟要设置的时间进行调整。

2.硬件设计总体接线装有UNSPTMIDE仿真软件的PC机一台,UNSPTM十六位单片机实验箱一台8pin排线两根、短路块若干。

本程序用到的实验箱硬件模块为:SPCE061A核心及实验箱中提供的4*4键盘模块和6位LED数码管显示模块。

SPE061A共提供两个16位通用的并行I/O口:IOA0-IOA15 IOB0-IOB15。

两个口的每一位都可以通过编程单独定义为输入或输出口,本实验采用IOA15—IOA8连接4*4键盘,IOA0—IOA7、IOA0—IOA15连接数码管。

图总体接线图这部分的主要接线如下:IOA8-15接液晶显示模块DB0-DB7IOB4接液晶显示模块AOIOB5接液晶显示模块的R/WIOB6接液晶显示模块的EPDB0-DB7为双向数据口,AO为数据/使命控制位,R/w为读/写信号,EP是全能端(低电平有效)要这部分工作时Key接线与IOA低八位相连就可以了。

本实验中,定义每个键的功能,包括数字键、功能键和一些保留键,其中标“0-9”为数字键,标“F2-F4”为保留键,标“F1”为重新设置时间键,标“ENT”为确认键,标“DEL”为删除键。

运行程序后,按常规的显示方法,从数码管的第一位开始显示,六位数码管一次显示时、分、秒的十位、个位。

设置错误按DEL键即可重新设置,设置完成按ENT键,重新设置按F1键。

2.2 硬件连接利用4*4键盘和6位LED数码管分别与SPCE061A单片机IOA口、IOB口的相关引脚相接,IOA0~IOA7连接和6位数码管的a~g、dp,IOA口的高八位IOA15~IOA8连接4x4键盘的L1~L4、C1~C4,IOB15~IOB12连接数码管的位信号1~4,IOB2~IOB1连接数码管的位信号5~6,IOB0连接数码管的分隔符信号DD。

几把JP4、JP5的引脚全部用跳线短接起来,用一根排线连接J27和JP7。

时间的设置可以通过4*4键盘的数字键来完成,时间的显示通过6位数码管来完成,以实现计时的功能。

硬件连接图如下:图硬件接线图3.软件设计主程序流程图及程序设计本系统软件设计程序主要分为主程序(其中包括键盘非法性检测、时钟数据处理、键值转换等子模块)、中断服务子程序、键盘子程序、数码管显示子程序及中断定义子程序。

主程序对程序框架进行设计在调用各个子程序实现系统时钟的设置及重置功能,下面分别详细介绍。

图主程序流程图主程序代码:#include ""#include ""#include "061A"typedef unsigned char uchar;#define KEY_DEL 11#define KEY_ENT 12#define KEY_F1 13#define YESCarryFlag 1#define ClearCarryFlag 0#define YESIntFlag 1#define ClearIntFlag 0#define true 1#define false 0unsigned int INTflag;unsigned int KeyVal;unsigned int KeyDownTimes;unsigned int KeycodeLED[6] ;unsigned int EnterFg ;unsigned int F1flag ;unsigned int secFlag,minFlag,hourFlag;void clockPro(void);unsigned int SetKeyValPro(void);unsigned int KeyDataChange(unsigned int Key_Data);unsigned int g_Data[11] ={0x003f,0x0006,0x005b,0x004f,0x0066,0x006d,0x007d,0x0007,0x007f,0x006f}; int main(){unsigned int i;KeyDownTimes = 0;INTflag = 0;EnterFg = 0;i = 0;Key_Init(); DIG_Init();while(1)KeyVal = Key_Get();KeyVal = KeyDataChange(KeyVal) switch(KeyVal)case KEY_F1:INT_IRQ5();if(KeyDownTimes>=6) KeyDownTimes=0;F1flag = true;EnterFg = false;case KEY_DEL:if (F1flag = true)if ( KeyDownTimes>0)KeyDownTimes--;break;case 0xff:break;case KEY_ENT:if(KeyDownTimes==6)SP_INT_IRQ5();F1flag = false;EnterFg = truebreak;default:if(F1flag == true)if(KeyDownTimes<6)KeycodeLED[KeyDownTimes] = KeyVal;if(SetKeyValPro()== true){KeyDownTimes++;break;for(i=0;i<6;i++)DIG_Set(i+1,g_Data[KeycodeLED[i]]);clockPro();F_ClearWatchdog();键盘非法性检测图键盘非法性检测子程序流程图void SetKeyValPro(void)unsigned int SetKeyValPro(void)uchar flag;switch(KeyDownTimes){case 0 : if(KeycodeLED[KeyDownTimes]<3){ flag = true;else flag = false;break;case 1: if(KeycodeLED[KeyDownTimes-1]==2 ){if(KeycodeLED[KeyDownTimes]<5)flag = true;elseflag = false;}elseflag = true;break;if(KeycodeLED[KeyDownTimes]<6)void clockPro(void) while(INTflag==1)INTflag = ClearIntFlag;if(KeycodeLED[4] == 5 && KeycodeLED[5] == 9) KeycodeLED[4] = 0;KeycodeLED[5] = 0;secFlag = YESCarryFlag; }elseif(KeycodeLED[5]==9)KeycodeLED[5]= 0;KeycodeLED[4]++;else KeycodeLED[5]++;}}while(secFlag==1){secFlag = ClearCarryFlag;if(KeycodeLED[2] == 5 && KeycodeLED[3] ==9){KeycodeLED[2] = 0;KeycodeLED[3] = 0;minFlag = YESCarryFlag; }else{if(KeycodeLED[3]==9){KeycodeLED[3]= 0;KeycodeLED[2]++;}else KeycodeLED[3]++;while(minFlag==1)minFlag = ClearCarryFlag;if(KeycodeLED[0]==2 && KeycodeLED[1] ==3){KeycodeLED[0] = 0;KeycodeLED[1] = 0;hourFlag = YESCarryFlag; }else{ if(KeycodeLED[1]==9){KeycodeLED[1]= 0;KeycodeLED[0]++;else KeycodeLED[1]++;断服务程序流程图 IRQ5中断服务程序流程图IRQ6中断服务程序流程图程序说明:在IRQ5_2HZ中断里定时1s的时间,在IRQ6_TMB2中断里调用键盘程序扫描键盘,而IRQ4的1KHZ中断当中,进行数码管显示的动态扫描。

相关主题