电子时钟单片机【完整版】_第1页
电子时钟单片机【完整版】_第2页
电子时钟单片机【完整版】_第3页
电子时钟单片机【完整版】_第4页
电子时钟单片机【完整版】_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

1、 烟 台 南 山 学 院单片机课程设计题目 电子时钟 姓 名: 所在学院 所学专业: 班 级: 学 号: 指导教师: 完成时间: 17摘要随时代的发展,生活节奏的加快,人们的时间观念愈来愈强;随自动化、智能化技术的发展,机电产品的智能度愈来愈高,用到时间提示、定时控制的地方也会愈来愈多,因此,设计开发数字时钟具有良好的应用前景。 由于单片机价格的低成本、高性能,在自动控制产品中得到了广泛的应用。本设计利用Atmel公司的AT89S52单片机对电子时钟进行开发,设计了实现所需功能的硬件电路,应用汇编语言进行软件编程,并用实验板进行演示、验证。 在介绍本单片机的发展情况基础上,说明了本设计实现的功

2、能,以及实验板硬件情况,并对各功能电路进行了分析。主要工作放在软件编程上,用实验板实现时间、日期、定时及它们的设定功能,详细对软件编程流程以及调试进行了说明,并对计时误差进行了分析及校正,提出了定时音与显示相冲突问题及解决方案。实验证明效果良好,可以投入使用。本次仿真设计的目的就是让同学们在理论学习的基础上,通过完成一个涉及MCS51单片机都种资源应用并具有综合功能的小系统目标板的设计与编程应用,使学生不但能够将课堂上学到的理论知识与实际应用结合起来,而且能够对电子电路、电子元器件、印制电路板等方面的知识进一步加深认识,同时在软件编程、排版调试、焊接技术、相关仪器设备的使用技能等方面得到较全面

3、的锻炼和提高,为今后能够独立进行某些单片机应用系统的开发设计工作打下一定的基础。在本学期的开始我们进行了计算机工程实践,在实践中我们以微机原理与接口技术课程中所学知识为基础,设计了电子时钟系统。本系统为多功能数字钟的系统。本设计以单片机AT89c51为控制核心,选用DS1302串行时钟芯片,RT1602液晶显示器实现液晶显示当前时间、日期、星期。 本电子时钟具有日期、时、分、秒的显示、调整功能,采用的时间制式为24小时制,时间显示格式为时(十位、个位)、分(十位、个位)、秒(十位、个位)。 关键词:单片机 AT89S52 电子时钟 汇编语言目录绪论11.总体设计11.1设计目的11.2总体设计

4、12.硬件设计22.1总体接线222 硬件连接33.软件设计43.1主程序流程图及程序设计43.2键盘非法性检测73.3断服务程序流程104. 仿真调试14总结15参考文献16绪论 单片机由于其微小的体积和极低的成本,广泛的应用于家用电器、工业控制等领域中。在工业生产中,电流、电压、温度、压力和流量也都是常用的被控参数。单片机电子时钟系统,是利用单片机作为系统的主控制器,采用AT89S52单片机作为控制核心对时钟芯片DS1302的控制,同时读取时间,并队输入信号作出处理。该单片机具有集成度高,运算快速快,体积小、运行可靠,价值低廉的特点。鉴于这样的重要性,我们打算设计一种基于单片机的电子时钟系

5、统,实现对时间的调整。 本设计以单片机AT89C51为控制核心,由实时时钟模块,键盘模块组成其中实时时钟采用DS1302可实现对时间的显示,设置,计时等功能在日常生活和工作中,我们常常用到定时控制,如扩印过程中的曝光定时等。早期常用的一些时间控制单元都使用模拟电路设计制作的,其定时准确性和重复精度都不是很理想,现在基本上都是基于数字技术的新一代产品,随着单片机性价比的不断提高,新一代产品的应用也越来越广泛。大则可以构成复杂的工业过程控制系统,完成复杂的控制功能;小则可以用于家电控制,甚至可以用于儿童电子玩具。它功能强大、体积小、质量轻、灵活好用,配以适当的接口芯片,可 以构成各种各样、功能各异

6、的微电子产品。 近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于与控制有关的系统,越来越广泛地应用于自动控制,智能化仪器,仪表,数据采集,军工产品以及家用电器等各个领域,单片机往往是作为一个核心部件来使用,在根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。数子时钟在日常生活中最常见,应用也最广泛。本次设计以硬件软件化为指导思想,充分发挥单片机功能,大部分功能通过软件编程来实现,电路简单明了,系统稳定性高。同时,该时钟系统还具有功耗小、成本低的特点,具有很强

7、的实用性,而且系统具有一定的可扩展性。1.总体设计1.1设计目的应用单片机控制技术,设计出以89c51单片机为核心的电子时钟,电子时钟能够显示时、分、秒显示时间的功能,还可以进行时和分的校对,而且其片选的灵活性强。   设计一个电子时钟,可以查询日历,可以设置时间,掉电时间不丢失;时钟必须有定闹功能,定闹设置掉电不丢失。1.2总体设计 该电子时钟由89C51,BUTTON,1602 LCD液晶屏等构成,采用晶振电路作为驱动电路,利用单片机内部定时计数器0通过软件扩展产生的一秒定时,达到时分秒的计时,六十秒为一分钟,六十分钟为一小时,满二十四小时

8、为一天。闹钟和时钟的时分秒的调节是由一个按键控制,而另外一个按键控制时钟和闹钟的时间的调节。 时钟电路AT89C51单片机LED显示电路独立按键输入电路闹钟电路图1系统结构框图该电子时钟由STC89C51,BUTTON,1602 LCD液晶屏等构成,采用晶振电路作为驱动电路,晶振电路的晶振频率为12MHZ,使用的定时器/计数器工作方式0,通过软件扩展产生的一秒定时,达到时分秒的计时,60秒为一分钟,60分钟为一小时,24小时为一天,又重00:00:00开始计时。没有按键按下时,时钟正常运行,当按下调节时钟按键K1,就会关闭时钟,当按下闹钟按键K3时时钟就会进入设置时间界面,

9、但是时钟不会停止工作,按K2键,就可以对时钟和闹钟要设置的时间进行调整。 2.硬件设计2.1总体接线装有UNSPTMIDE仿真软件的PC机一台,UNSPTM十六位单片机实验箱一台8pin排线两根、短路块若干。本程序用到的实验箱硬件模块为:SPCE061A核心及实验箱中提供的4*4键盘模块和6位LED数码管显示模块。SPE061A共提供两个16位通用的并行I/O口:IOA0-IOA15 IOB0-IOB15。两个口的每一位都可以通过编程单独定义为输入或输出口,本实验采用IOA15IOA8连接4*4键盘,IOA0IOA7、IOA0IOA15连接数码管。DD0-7SPLC051液晶显示模组EP R/

10、W A0IOAD-7 IOB1 IOB2 IOB3IOB3 IOB4IOB2 IOB5IOB1 IOA9-15 DAC1 VCC OND 调试电源图2.1总体接线图这部分的主要接线如下:IOA8-15接液晶显示模块DB0-DB7IOB4接液晶显示模块AOIOB5接液晶显示模块的R/WIOB6接液晶显示模块的EPDB0-DB7为双向数据口,AO为数据/使命控制位,R/w为读/写信号,EP是全能端(低电平有效)要这部分工作时Key接线与IOA低八位相连就可以了。本实验中,定义每个键的功能,包括数字键、功能键和一些保留键,其中标“0-9”为数字键,标“F2-F4”为保留键,标“F1”为重新设置时间键

11、,标“ENT”为确认键,标“DEL”为删除键。运行程序后,按常规的显示方法,从数码管的第一位开始显示,六位数码管一次显示时、分、秒的十位、个位。设置错误按DEL键即可重新设置,设置完成按ENT键,重新设置按F1键 。22 硬件连接利用4*4键盘和6位LED数码管分别与SPCE061A单片机IOA口、IOB口的相关引脚相接,IOA0IOA7连接和6位数码管的ag、dp,IOA口的高八位IOA15IOA8连接4x4键盘的L1L4、C1C4,IOB15IOB12连接数码管的位信号14,IOB2IOB1连接数码管的位信号56,IOB0连接数码管的分隔符信号DD。几把JP4、JP5的引脚全部用跳线短接起

12、来,用一根排线连接J27和JP7。时间的设置可以通过4*4键盘的数字键来完成,时间的显示通过6位数码管来完成,以实现计时的功能。硬件连接图如下: a b c 6 d 位 e 数 f 码 g管 DP 1 2 3 4 5 6IOA0IOA1IOA2IOA3IOA4IOA14IOA5IOA13IOA6IOA12IOA7SPCE061AIOB15IOA11L1L2L3L4 4X4键盘C1C2C3C4图2.2 硬件接线图3.软件设计3.1主程序流程图及程序设计本系统软件设计程序主要分为主程序(其中包括键盘非法性检测、时钟数据处理、键值转换等子模块)、中断服务子程序、键盘子程序、数码管显示子程序及中断定义

13、子程序。主程序对程序框架进行设计在调用各个子程序实现系统时钟的设置及重置功能,下面分别详细介绍。初始化键盘开始初始化显示取键值 取键转换设置键运行键数字键删除键关2HZ开2HZ键按下 2键按下 2设置标志置1设置标志置1显示时钟时间清看门狗图3.1主程序流程图主程序代码:#include "Key.h"#include "Dig.h"#include "SPCE061A.h"typedef unsigned char uchar;#define KEY_DEL11#define KEY_ENT12#define KEY_F113#de

14、fine 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 KeycodeLED6 ; unsigned int EnterFg ; unsigned int F1flag ; unsigned int secFlag,minFlag,hourFlag;void cl

15、ockPro(void); unsigned int SetKeyValPro(void); unsigned int KeyDataChange(unsigned int Key_Data);unsigned int g_Data11 = 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) KeyV

16、al = 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

17、 = false;EnterFg = true break; default: if(F1flag = true)if(KeyDownTimes<6)KeycodeLEDKeyDownTimes = KeyVal; if(SetKeyValPro()= true)KeyDownTimes+;break;for(i=0;i<6;i+) DIG_Set(i+1,g_DataKeycodeLEDi); clockPro(); F_ClearWatchdog(); 3.2键盘非法性检测 开始判断数字键按下的次数数字键按下次数为6数字键按下次数为5数字键按下次数为4数字键按下次数为3数字键按

18、下次数为2数字键按下次数为1按下数字键小于6时有效按下数字键小于3时有效如果前一次按下数字键2,按下的数字键小于四才有效按下数字键小于6时有效返回检测结果图3.2 键盘非法性检测子程序流程图void SetKeyValPro(void)unsigned int SetKeyValPro(void)uchar flag; switch(KeyDownTimes)case 0 : if(KeycodeLEDKeyDownTimes<3) flag = true; else flag = false; break;case 1: if(KeycodeLEDKeyDownTimes-1=2 )

19、if(KeycodeLEDKeyDownTimes<5) flag = true; else flag = false; else flag = true; break; if(KeycodeLEDKeyDownTimes<6) Y 返回开始时的个位加1秒回零秒的个位是不是9?秒的十位是不是5?分回零分的个位是不是9?分的十位是不是5?时回零时的十位不为2?时的个位是不是3?秒的个位加1秒的十位加1,个位回零N N 分的个位加1分的十位加1,个位回零N N 时的个位是不是9?分的十位加1,个位回零Y Y Y Y Y N N Y N 图3.3 时钟数据处理子程序流程图void clo

20、ckPro(void) while(INTflag=1)INTflag = ClearIntFlag;if(KeycodeLED4 = 5 && KeycodeLED5 = 9) KeycodeLED4 = 0; KeycodeLED5 = 0; secFlag = YESCarryFlag; else if(KeycodeLED5=9) KeycodeLED5= 0; KeycodeLED4+;else KeycodeLED5+; while(secFlag=1) secFlag = ClearCarryFlag;if(KeycodeLED2 = 5 && K

21、eycodeLED3 =9) KeycodeLED2 = 0; KeycodeLED3 = 0; minFlag = YESCarryFlag; else if(KeycodeLED3=9) KeycodeLED3= 0; KeycodeLED2+; else KeycodeLED3+; while(minFlag=1)minFlag = ClearCarryFlag;if(KeycodeLED0=2 && KeycodeLED1 =3) KeycodeLED0 = 0; KeycodeLED1 = 0; hourFlag = YESCarryFlag; else if(Key

22、codeLED1=9) KeycodeLED1= 0; KeycodeLED0+;else KeycodeLED1+; 3.3断服务程序流程寄存器入栈保护是IRQ4_1HZ中断?清IRQ4其它中断寄存器出栈中断返回清IRQ4_1HZ中断调用数码管显示程序NY图3.4 IRQ4中断服务程序流程图YY寄存器入栈保护是IRQ5_2HZ中断?清IRQ5_2HZ中断寄存器出栈保存信号sum=0设置中断标志为1中断返回清IRQ5_4HZ中断中断计数器加1中断计数器等于2?NN图3.5 IRQ5中断服务程序流程图寄存器入栈保护是IRQ4_1HZ中断?清IRQ4其它中断寄存器出栈中断返回清IRQ4_1HZ中断

23、调用数码管显示程序NY3.6 IRQ6中断服务程序流程图程序说明:在IRQ5_2HZ中断里定时1s的时间,在IRQ6_TMB2中断里调用键盘程序扫描键盘,而IRQ4的1KHZ中断当中,进行数码管显示的动态扫描。中断服务程序代码:isr.asm.INCLUDE SPCE061A.inc.INCLUDE key.inc.INCLUDE Dig.inc.IRAM.PUBLICsum;.VAR sum=0 .PUBLIC _IRQ5;.PUBLIC _IRQ6;/.external sum;.external _INTflag;.external F_Key_Scan .PUBLIC _IRQ4_IR

24、Q4:push r1,r5 to spr1 = C_IRQ4_1KHztest r1,P_INT_Ctrljnz ?L_IRQ4_1KHzr1 = C_IRQ4_2KHztest r1,P_INT_Ctrljnz ?L_IRQ4_2KHz?L_IRQ4_4KHz:call F_DIG_Drive r1 = C_IRQ4_4KHzP_INT_Clear = r1pop r1,r5 from spreti?L_IRQ4_2KHz:P_INT_Clear = r1pop r1,r5 from spreti?L_IRQ4_1KHz:P_INT_Clear = r1pop r1,r5 from spre

25、ti _IRQ5:push r1,r4 to sp;r1 =0x0008;test r1,P_INT_Ctrl;jnzL_4Hz;/ Timer A FIQ entrence r1 = 0x0004; P_INT_Clear = r1; r1 = sum r1 += 1; cmp r1,2; je loop0; sum=r1 pop r1,r4 from sp; reti; loop0: r1 = 0x0001;_INTflag = r1; r1 = 0 sum = r1pop r1,r4 from sp; reti; L_4Hz: r1 = 0x0008; P_INT_Clear = r1;

26、 pop r1,r4 from sp; reti; /_IRQ6: push r1,r4 to sp;r1=0x0001;test r1,P_INT_Ctrl;jnz _IRQ6_TMB2;r1=0x0002;P_INT_Clear=r1;pop r1,r4 from sp; reti; _IRQ6_TMB2:P_INT_Clear=r1;call F_Key_Scan; pop r1,r4 from sp; reti; :开始判断键码数字键对应的键码键值为09键值为11键值为12键值为13键值为0xff返回键码为0X18键码为0X11键码为0X81其他情况3.7 键值转换子程序流程图键盘转换

27、子程序代码:unsigned int KeyDataChange(unsigned int Key_Data)switch(Key_Data)case KEY_0: Key_Data = 7;break;case KEY_1: Key_Data = 8;break;case KEY_2: Key_Data = 9;break;case KEY_3: Key_Data = 13;break;case KEY_4: Key_Data = 4;break;case KEY_5: Key_Data = 5;break;case KEY_6: Key_Data = 6;break;case KEY_7:

28、 Key_Data = 0xff;break;case KEY_8: Key_Data = 1;break;case KEY_9: Key_Data = 2;break;case KEY_A: Key_Data = 3;break;case KEY_B: Key_Data = 0xff;break;case KEY_C: Key_Data = 11;break;case KEY_D: Key_Data = 0;break;case KEY_E: Key_Data = 0xff;break;case KEY_F: Key_Data = 12;break;default: Key_Data = 0xff;break;return Key_Data;4. 仿真调试图4.1闹钟响铃图4.2仿真调试图4.3闹钟对时间的调整总结本系统是通过4*4键盘的数

温馨提示

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

评论

0/150

提交评论