《数字电子时钟说明书_毕业论文(16页).doc》由会员分享,可在线阅读,更多相关《数字电子时钟说明书_毕业论文(16页).doc(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-数字电子时钟说明书_毕业论文-第 16 页湄洲湾职业技术学院数字电子时钟说明书系 别: 电子工程系 2012年 6 月 11 日目录1 前言42 设计要求与方案论证52.1 设计要求52.2 系统基本方案选择和论证52.2.1 单片机芯片的选择方案和论证52.2.2 显示模块选择方案和论证52.2.3 时钟芯片的选择方案和论证62.3 电路设计最终方案决定63 主要元件介绍73.1 STC89C52介绍73.1.1 STC89C52最小系统73.2 DS1302时钟芯片介绍83.2.1 DS1302概述83.3 1602字符液晶介绍93.3.1 1602液晶概述94 系统硬件设计104.1
2、电路设计框图104.2 系统硬件概述105 系统的软件设计105.1程序概述105.2延时函数115.3 对DS1302读写操作函数125.3.1 向DS1302写数据125.3.2 从DS1302读数据135.4 显示函数135.4.1向1602液晶中写一个指令145.4.2向液晶写数据145.4.3初使化1602液晶145.4.4 如何在液晶上显示时间、日期及周155.5按键函数165.5.1 12/24小时显示模式切换键185.5.2 调整键函数185.5.3 确定键18结束语19参考文献20致谢词21附录221 前言时间,对人们来说是非常宝贵的,准确的掌握时间和分配时间对人们来说至关重
3、要。因此自从时钟发明的那刻起,就成为人类的好朋友。随着时间的流逝,科学技术的不断发展和提高,人们对时间计量的精度要求越来越高,应用越来越广。怎样让时钟更好、更方便、更精确的显示时间,这就要求人们不断设计研发出新型的时钟。 高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调校。数字式电子钟用集成电路计时时,译码代替机械式传动,用LCD显示器代替指针进而显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工
4、作的基础。在单片机的应用系统中,时钟有两个方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用单片机内部的可编程定时器/计数器来实现;二是用专门的时钟芯片实现 。 2 设计要求与方案论证2.1 设计要求1.具有年、月、日、星期、时、分、秒显示功能;2.具备年、月、日、星期、时、分、秒校准功能;3.具有12/24小时切换显示功能。2.2 系统基本方案选择和论证2.2.1 单片机芯片的选择方案和论证方案一: 采用STC89C52芯片作为硬件核心。S
5、TC89C52内部具有8KB ROM 存储空间,512字节数据存储空间,带有2K字节的EEPROM存储空间,与MCS-51系列单片机完全兼容,STC89C52可以通过串口下载。方案二:采用AT89S52。AT89S52片内具有8K字节程序存储空间,256字节的数据存储空间没有EEPROM存储空间,也与MCS-51系列单片机完全兼容,具有在线编程可擦除技术。两种单片机都完全能够满足设计需要,STC89C52相对ATS89C52价格便宜,且抗干扰能力强。考虑到成本因素,因此选用STC89C52。2.2.2 显示模块选择方案和论证方案一:采用点阵式数码管显示。点阵式数码管是由八行八列的发光二极管组成
6、,可用来显示数。但体积较大,且价格也相对较高,从便携实用的角度出发,不采用此种方案。方案二:采用LED数码管动态扫描。LED数码管价格便宜,对于显示数字最合适,但功耗较大,且显示容量不够,所以也不用此种方案。方案三:采用LCD液晶显示屏。液晶显示屏的显示功能强大,可显示大量文字,显示多样,清晰可见,且价格适中,所以采用了LCD数码管作为显示。2.2.3 时钟芯片的选择方案和论证方案一:直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。所以不采用此方案。方案二:采用DS1302时钟芯片实现时钟,D
7、S1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,工作电压2.5V5.5V范围内,2.5V时耗电小于300nA.2.3 电路设计最终方案决定综上各方案所述,对此次作品的方案选定: 采用STC89C52单片机作为主控制系统;采用DS1302作为时钟芯片;采用1602 LCD液晶作为显示器件3 主要元件介绍3.1 STC89C52介绍3.1.1 STC89C52最小系统 最小系统是指能进行正常工作的最简单电路。STC89C52最小应用系统电路如图2-1所示。它包含五个电路部分:电源电路、时钟电路、复位电路、片内外程序存储器选择电路、输入/
8、输出接口电路。其中电源电路、时钟电路、复位电路是 保证单片机系统能够正常工作的最基本的三部分电路,缺一不可。1.电源电路 芯片引脚VCC一般接上直流稳压电源+5V,引脚GND接电源+5V的负极,电源电压范围在45.5之间,可保证单片机系统能正常工作。为提高电路的抗干扰性能,通常在引角Vcc与GND之间接上一个10uF的电解电容和一个0.1uF陶片电容,这样可抑制杂波串扰,从而有效确保电路稳定性。2.时钟电路 单片机引脚18和引脚19外接晶振及电容, STC89C52芯片的工作频率可在233MHz范围之间选,单片机工作频率取决于晶振XT的频率,通常选用11.0592MHz晶振。两个小电容通常取值
9、3pF,以保证振荡器电路的稳定性及快速性。3.复位电路 一般若在引脚RST上保持24个工作主频周期的高电平,单片机就可以完成复位,但为了保证系统可靠地复位,复位电路应使引脚RST保持10ms以上的高电平。如图复位电路带有上电自动复位功能,当电路上电时,由于C1电容两端电压值不能突变,电源+5V会通过电容向RST提供充电电流,因此在RST引脚上产生一高电平,使单片机进入复位状态。随着电容C1充电,它两端电压上升使得RST电位下降,最终使单片机退出复位状态。正常运行时,可按复位按钮对单片机复位图3-1 STC89C52最小系统3.2 DS1302时钟芯片介绍3.2.1 DS1302概述DS1302
10、 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟芯片,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用双电源供电(主电源和备用电源),同时提供了对后背电源进行涓细电流充电的能力。采用三线接口与CPU进行同步通信。图3-2 DS1302封装图3.3 1602字符液晶介绍3.3.1 1602液晶概述工业字符型液晶,1602是指显示的内容为16*2,能同时显示两行,每行16个字符。常见的1602字符液晶有两种,一种显示绿色背光黑色字体,另一种显示蓝色背光白色字体,目前市面上绝大多数基于HD44780液晶芯片控制,原理是完全相同的。本
11、课题所用1602液晶模块,显示屏是蓝色背光白色字体。如图2-3所示图3-3 1602字符液晶4 系统硬件设计4.1 电路设计框图4.2 系统硬件概述本电路以STC89C52单片机为控制核心,以STC89C52最小系统为基础。时钟电路由高精度低功耗的DS1302提供,采用三线接口与CPU进行同步通信,输入部分采用四个独立式按键S1、S2、S3、S4。1602液晶显示部分,D0D7口与单片机P0口相连。具体线路连接,详见附录25 系统的软件设计5.1程序概述DS1302时钟芯片具有通电自动计时的功能。向DS1302中写入一个初值,如写入20110501 00:00:00 星期日,在通电时,时间就会
12、自动走:过60秒分加1;过60分时加1;过24小时天加1,星期日变成星期一;一周有7天,芯片内的周信息每7天一循环;芯片能够自动判断每月有多少天,5月有31天,31天后,月加1。采用DS1302时钟芯片的单片机时钟,其实质就是读取时钟芯片内的时钟信息并把它显示出来。只要时间初值正确,时钟就能一直精准的走下去。调整时间日期,实质就是向DS1302时钟芯片重新写入初值。电子时钟的主程序框图如图5-1所示图5-1 主程序框图5.2延时函数void delay(uint z) uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);由for循环构成的延时函数,z的取值为这个函数
13、的延时ms数,如delay(200);大约延时200ms. delay(500);大约延时500ms。因下文多次用到,固在此先作说明。5.3 对DS1302读写操作函数在对DS1302时钟芯片操作前,应对其操作时序有所了解,参看前文DS1302介绍。DS1302采用串行方式与单片机进行通信,一个机器周期只能读写一个字节的一位,因此,在单片机与DS1302芯片间传输一字节(8位)数据,要分8次进行,且先从低位开始传输。5.3.1 向DS1302写数据/*写数据字节子函数*/void write_1302_byte(uchar temp)/用来发送8位数据信息uchar i;for(i=0;i=1
14、;/右移一位sck=1;/在SCK上升沿的时候字节写入DS1302/*1302写数据子函数*/void write_1302(uchar addd,uchar dat)rst=0;_nop_();sck=0;_nop_();rst=1;_nop_();write_1302_byte(addd);/发送地址write_1302_byte(dat);/发送数据rst=0;5.3.2 从DS1302读数据/*读DS1302数据函数*/uchar read_1302(uchar add)/输入地址add,返回读取的数据uchar i,temp=0x00;rst=0;sck=0;rst=1;write_
15、1302_byte(add);for(i=0;i=1;/右移一位sck=1;/sck被置高,在其下一次变为0时,数据被写入rst=0;/以下为DS1302复位的稳定时间sck=0;sck=1;sda=0;sda=1;return(temp);/将temp值返回5.4 显示函数对1602进行操作前要对其进行初使化,初使化完成后它才能正常显示。如果想在1602液晶的某一个位置显示一个内容,要先对其写入一个指令:在什么地方显示。然后再对其写入一个数据:要显示什么内容。对1602的液晶初使化,需要用写入指令的方式完成。5.4.1向1602液晶中写一个指令void write_com(uchar com
16、)lcdwr=0;/lcdwr为读写控制端,lcdwr=0,这里可不写lcdrs=0; /液晶rs接口为0时,写指令,rs为1时写数据P0=com; /将要写的指令赋给P0口,delay(5); /由1602读写操作时序图,先将指令赋给P0口,延时后将使能lcden=1; 端lcden置高,再延时一段时间,然后将lcden置低,这样指令delay(5); 就写入到LCD了lcden=0;5.4.2向液晶写数据void write_data(uchar date),与写指令类似,这里lcdrs设为1lcdrs=1;P0=date;delay(5);lcden=1;delay(5);lcden=0
17、;5.4.3初使化1602液晶此函数首先对液晶进行初使化,使其处于待命状态,然后将时钟框架显示出来:年月日之间的“”,时分秒之间的“:”,还有世纪年的高两位。void init_1602()uchar num;lcdwr=0;lcden=0;write_com(0x38);/设置LCD为16*2显示、5*7点阵、8位数据接口模式write_com(0x0c);/开显示、不显示光标write_com(0x06);/写一个字符后,地址指针加1write_com(0x01);/显示清0write_com(0x80);/将指针指向初始位置for(num=0;num14;num+)/循环函数,用于将 2
18、0 - - 写入液晶write_data(tablenum);write_com(0x80+0x40+4);/将指针指向1602液晶的第二行,第四个字段for(num=0;num8;num+)/功能与上同,用于将 : : 写入write_data(table1num);5.4.4 如何在液晶上显示时间、日期及周DS1302中的时间、日期等信息是以BCD码的形式存放的,要先将从1302中读取的数据转化成10进制,然后显示在液晶上相应的位置。/*显示时间、日期子函数*/void write_sfm(uchar add,uchar time)/用于在1602上显示年、月、日、时、分、秒。 Add为显
19、示位置,time为要显示的内容uchar shi,ge;shi=time/16; /将从DS1302中读取的BCD码数据转化成10进制个位和10 ge=time%16; 进制十位write_com(add+0x80);/定义显示在液晶的什么位置write_data(0x30+shi);/由1602液晶字库可知,09的数据码分别对应0x300x39write_data(0x30+ge);/初使化中设定了写一个字符后,地址指针加1,因此这里 不用重新光标定位/*显示周子函数*/void write_zhou(uchar time1),用于在1602上显示周信息,与显示 时间日期子函数类似uchar
20、 ge;ge=time1%16;/一周七天,因此只需个位write_com(0x80+13);write_data(0x30+ge);5.5按键函数此电子时钟共有4个按键,S1、S2、S3与调时有关图按键程序如图11,S4为12小时切换键。S1功能键:在24小时显示模式下,该键被第一次按下后进入秒调整,液晶显示器上的时间停止走动。模式,再次按下后进入分调整模式,接着是调时模式、调年模式、调月模式、调日模式、调周模式,当第八次按下该键后退出。S2 调整键:在调整模式下,该键每按一次,相应时间或日期加1。S3 确定键:在调整模式下,该键被按下后,退出调整模式,并将调整后的时间、日期写入DS1302
21、。S4 显示模式调整键:用于对时间的12/24小时模式的切换。图5-2 按键程序图5.5.1 12/24小时显示模式切换键时钟默认在24小时模式下运行,定义一个标志位flag1。第一次按下切换键,把瞬时时间转化成12小时制,令flag1=1。并写入DS1302芯片,此后DS1302芯片在12小时模式下运行。第二次按下切换键,即返回24小时显示模式,令flag1=0,把瞬时时间转化成24小时模式并写入DS1302芯片。有关DS1302的时间寄存器存放形式参阅前文。如24小时模式下的22:00,存放的形式为00100010。12小时模式下的22点,也就是10:00PM,存放形式为10110000,
22、在切换的一瞬间,我们只需要把小时数据0xb0写入到DS1302,这样就能让时钟芯片在12小时模式下运行了。需要注意的是,12小时模式下,只用到后5位来表示时间,第6位用来表示AM或PM信息,如果真接用24小时模式下的显示方法是会出错的,这里我们需要对时进行转化。首先提取AM/PM信息,让其显示。然后提取其后5位时间,显示时间。在主函数部分如果检测到flag1=1,就进行转换。12转24小进模式与其类似,不再赘述。if(s1num=0&s4=0)/ 设置键没被按下,且12/24小时模式切换键被按下后5.5.2 调整键函数每按一次此键,相应的时间或日期加1,但是时间、日期是以BCD码的形式存放在D
23、S1302时钟芯片的,如果直接对其进行操作,如秒,假如秒的初始时间是00,它在DS1302芯片中存放的值为00000000,它的后4位代表秒的个位,在时钟芯片自动计时时,10秒后它的后四位为10时,它能自动进位,变为00010000。但是在调秒状态下按10次 S2键,我们希望秒变成00010000,实际上其值为00001010。因此我们引入X1和X2,分别代表秒的十位和个位,每按一次S2键,x2加1,每当X2为10时,X1加1,X2重新为0.这样便不会出现上面的错误了。在调节日期的过程中,我们引入了防错机制,平年2月,你不可能调到29日,4月,你不可能调到31日。这一功能是如何实现的呢?首先判
24、断是平年还是闰年,本时钟的年调节区间为2010年2079年。在这一区间内,凡是能被4整除的年都是闰年,否则为平年。再判断是几月,4、6、9、11这四个月份有30天,平年2月28天,闰年2月29天,其他月份31天。正因为此,调节日期的顺序为年月日5.5.3 确定键在调时模式下,按下确写键后,把调好的时间写入DS1302时钟芯片并退出调整模式,时钟显示暂停标志位清0,时钟继续计时。结束语通过本次论文设计,使我加深了对单片机的认识,并且熟悉了单片机系统的设计流程,收获丰硕。功能上基本达标:时钟的显示,调时功能。时钟显示功能,精确度完全可以满足日常生活显示时间的需要;调时功能,方便快捷。硬件设施基本合
25、乎要求,软件设计可以配合硬件实现其功能。技术在不断进步,机械式时钟已经被淘汰,取而代之的是具有高度准确性和直观性且无机械装置,具有更长的使用寿命等优点的电子时钟。电子时钟更具人性化,更能提高人们的生活质量,更受人们欢迎。机械时代已经远去,电子时代已经到来。做为新时代的我们,更应该提高自身能力,适应新时代的发展。知识来自实践,多从生活中探寻所需要的。互联网成了我们生活中不可或缺的一部分,网络在本次设计中起到了很大作用,很多芯片资料,传统的纸质图书里是没有的。网络只是一个平台,正是由于大家的无私奉献,才使得它丰富多彩。从这次的论文设计中,我真正的体会到,知识的重要性,特别是要理论联系实际,把我们所
26、学的理论知识运用到实际生活当中,要用知识改变一切。参考文献【1】黄正谨. 电子设计竞赛赛题解析M. 北京:东南大学出版社,2003.【2】高吉祥. 电子技术基础实验与课程设计M. 北京:电子工业出版社,2002.【3】王法能. 单片机原理与应用M. 北京:科学出版社,2004.【4】阎石. 数字电子技术基础M. 北京:高等教育出版社,1998.【5】徐江海单片机实用教程北京:机械工业出版社,2006.12.【6】胡宴如模拟电子技术北京:高等教育出版社,2008.6.【7】刘宁单片机多功能时钟的设计浙江:浙江海洋学院,2009. 【8】汪文,陈林.单片机原理及应用湖北:华中科技大学出版社,200
27、7.【9】康华光电子技术基础数字部分北京:高等教育出版社,2008.【10】杨欣电子设计从零开始北京:清华大学出版社,2005.【11】唐勇基于单片机的电子钟的设计湖南:湖南工学院,2007.【12】邢小杰单片机电子时钟设计中国科技博览,2009.致谢词首先感谢我们的指导老师许振龙,他严谨细致、一丝不苟的作风一直是我工作、学习中的榜样;他循循善诱的教导和不拘一格的思路给予我们无尽的启迪。本次毕业论文设计是在许振龙老师的亲切关怀和悉心的指导下完成的,他精益求精的工作作风,深深地感染和激励着我,从课题的选择到项目的最终完成,许振龙老师都始终给予我细心的指导和不懈的支持,在完成论文的这段时间以来,由
28、于有许老师孜孜不倦的教诲及耐心的讲解和自己的努力,我才能完成好我所要设计的作品,在此特向许老师致以诚挚的谢意和崇高的敬意!此外还要感谢所有的电子系的课任老师和帮助过我的的同学们。在学习中,老师严谨的治学态度、丰富渊博的知识、敏锐的学术思维、精益求精的工作态度以及侮人不倦的师者风范是我终生学习的楷模,导师们的高深精湛的造诣与严谨求实的治学精神,将永远激励着我。这三年中还得到众多老师的关心支持和帮助。在此,谨向老师们致以衷心的感谢和崇高的敬意! 如果说许老师在专业知识(工作和学习)上给予我极大的帮助和激励的话,那么在我的幕后默默的支持我,鼓励我的父母也是使我能准时且成功的完成这次毕业设计的全过程的
29、不可缺少的一部分。他们虽然不懂专业知识,无法帮我解决在电路设计和程序编程过程中所遇到的困难,但是他们在我做论文时不怕辛苦为我准备好了一切,使我能够无后顾之忧的去做论文。我相信我父母的辛苦不会白费的,我成功了。这不只是我一个人的成功,是我的老师,我的父母共同努力而取得的成就! 此外,我还要感谢在一起度过愉快的大学生活的全班同学,正是由于你们的帮助和支持,我才能克服一个又一个的困难和疑惑,直至本次毕业设计的顺利完成,在编写程序的过程中,我想特别感谢我的一位学长正因为有他的不怕厌倦的帮助和对我的一次又一次的鼓励我才能成功的完成本次的设计,在硬件调试时,我同时也感谢和我一起调试的谢有财同学,他给予了我
30、很大的帮助。 谢谢大家! 附录附录一 程序void main() int ap;init_1602();/inital_1302();while(1)keyscan();if(flag=0)miao=read_1302(0x81);fen=read_1302(0x83);hour=read_1302(0x85);if(flag1=1)/flag1=1时 ,在12模式下显示ap=hour&0x20;/判断AM、PM位是0还是1if(ap=0x20)write_com(0x80+0x40+14);write_data(P);write_data(M);if(ap=0)write_com(0x80+
31、0x40+14);write_data(A);write_data(M);hour&=0x1f;/提取有效时间,用于显示if(flag1=0)/flag1=0,在24小时模式下显示write_com(0x80+0x40+14);write_data(0x20);/0x20是1602字库中的空字符,即不显示内write_data(0x20); /容,用来清空AM或PM的显示位置ri=read_1302(0x87);yue=read_1302(0x89);zhou=read_1302(0x8b);nian=read_1302(0x8d);write_sfm(10+0x40,miao);write_sfm(7+0x40,fen);write_sfm(4+0x40,hour);write_sfm(9,ri);write_sfm(6,yue);write_sfm(3,nian);write_zhou(zhou);附录二 原理图