《基于单片机的数字电子钟-毕业论文.doc》由会员分享,可在线阅读,更多相关《基于单片机的数字电子钟-毕业论文.doc(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、CHANGZHOU INSTITUTE OF TECHNOLOGY科研实践题目:基于单片机的数字电子钟二级学院(直属学部): 延陵学院 专业: 电气工程及其自动化 班级:学生姓名: 学号:指导教师姓名:职称: 副教授 目 录一、绪 论31.1课题研究的背景和意义31.2 课题研究的目的3二、课题设计概况42.1 课题主要实现功能42.2 课题功能分析42.3 课题功能实现过程的描述4三、总体设计方案53.1 单片机的选择53.2数字电子钟显示方案论证5四、硬件设计64.1 总体设计结构图64.2 单片机最小系统的设计64.3 输入电路的设计74.4 输出电路的设计8五、软件设计105.1 主程
2、序结构图105.2 主程序流程图105.3 主要程序模块分析125.3.1 延时程序125.3.2 计24小时程序125.3.3 暂停/继续程序145.3.4 校时灯闪程序145.3.5 16进制转BCD码程序15六、Protues和keil仿真166.1 proteus软件的介绍及使用166.2 Keil软件的介绍及使用166.3 数字电子钟的仿真16七、实物制作217.1电路板焊接217.2电路板调试21八、总结和展望228.1科研实践总结228.2对未来的展望22附 录23参考文献23元器件清单23原理图和PCB图24C语言程序代码25实物图30一、绪 论1.1课题研究的背景和意义 20
3、世纪末,电子技术获得了飞速发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力的推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记时间,忘记了要做的事情,但是,一旦重要的事情,一时的耽误可能酿成大祸。目前,单片机正朝着高性能和多品种方向发展,发展趋势将是进一步向着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。单片机模块中最常见的是数字钟,数字钟是一种利用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性
4、,且无机械装置,具有更长的使用寿命,因此得到了广泛使用。数字电子钟是采用数字电路对时、分、秒数字显示的计时装置,广泛用于个人家庭、车站、码头、办公室等公共场所,成为人们日常生活中不可缺少的必需品。由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度远远超过老式钟表,钟表的数字化给人们的生产生活带来了极大的方便,而且大大的扩展了钟表原来的报时功能,因此研究数字钟及扩大其应用,有着日常现实的意义。1.2 课题研究的目的复习KEIL软件的使用方法;学会编写数字电子钟的C语言程序;学会画数字电子钟的PROTEUS图;学会稳压电源的制作方法;学会制作相应的实物。二、课题设计概况2.1 课题
5、主要实现功能 1、该单片机数字电子钟能在LED数码管准确显示24小时(显示格式为:时时,分分,秒秒);2、可暂停时间的变动, 同时在暂停的时候可以通过调秒、调分和调时按钮校正时间,继续计时的时候按调整后的时间变动。每调整一次时间相对应的LED灯会亮三次,计时的时候灯不亮;3、每次上电的时候数码管显示“000000”,校时之后方可正常使用。2.2 课题功能分析 1、为了实现计时功能,必须有合适精确的秒源; 2、通过进位的方法可以实现分钟和小时的显示; 3、时、分、秒计到24、60、60要清零; 4、给暂停和校时功能分别设置按钮,每按一次校时按钮相应的数码管显示加1,相应的LED灯亮; 5、通过软
6、件编程课实现上述功能。2.3 课题功能实现过程的描述 给单片机上电之后,数码管显示时间为00时00分00秒,按下暂停/继续键后,通过三个校时按钮把时间校准到实际时间,再次按下暂停/继续键恢复计时。每一次校时的时候相应的灯就会闪,不调时的时候灯就灭。 三、总体设计方案3.1 单片机的选择 AT89C51是一种带4K字节FLASH存储器(FPEROMFlash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复
7、擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪速存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。而ATMEL公司的89C52单片机,是增强型RISC内载Flash的单片机。由于单片机的种类很多,在选择单片机时要依据实际设计要求选择合适的单片机。本数字电子钟产生的数据量并不大,但是为了确保程序的运行,所以选择C51单片机。 表3-1 51和52的比较 数据存储器程序存储器
8、定时器中断51系列128B4KB2552系列256B8KB383.2数字电子钟显示方案论证 本设计可以选择的方案有数码管显示和LCD显示。 由于只要实现时分秒的显示,LCD的显示尽管多,但无论在软件上还是硬件上都需要添加其它部件,比较复杂,因此选择数码管即可。四、硬件设计4.1 总体设计结构图数字电子钟总体设计结构图如下: 图4-1 数字电子钟的总体设计结构图4.2 单片机最小系统的设计1、时钟电路如下:单片机必须在时钟的驱动下才能工作.由之前所学的单片机原理最小系统内容,在单片机内部有一个时钟振荡电路,只需要外接一个振荡源就能产生一定的时钟信号送到单片机内部的各个单元,决定单片机的工作速度。
9、典型的晶振取11.0592MHz(因为可以准确地得到9600波特率和19200波特率,用于有串口通讯的场合)。为了匹配单片机的频率,经过试验选择匹配电容为30pF。时钟电路如下(注意接的是单片机18、19引脚): 图4-2 时钟电路 2、 复位电路 51单片机通常有两种复位方式,上电复位和按钮复位,本论文采用上电复位。由于本设计的晶体振荡器采用的是12M,因此RC采用典型值。复位时间计算:当取100us时为高电平,所以可以达到复位作用。复位电路图如下(请忽略时钟电路): 图4-3 复位电路4.3 输入电路的设计1、暂停和校时电路如下:由于在P0口,所以要选择上拉电阻.参照总体结构设计图,最多顾
10、及LED参数 (2.2V,10mA),计算(5-2.2)/0.01=280,为了保证完全满足参数要求,选一定可以满足条件的500,电流10mA。各个按钮的功能已经在下图中标明(按钮选择常见的TD-03B即可)。 图4-4 暂停和校时电路2、稳压电源计算如下: 在实际做硬件实物的时候制作出实际的5V直流稳压电源也是必要的一部分。由于主屏幕上的空间不够,所以并没有接稳压电源的线,让其参与仿真。 图4-5 稳压电路4.4 输出电路的设计1、校时时灯闪电路如下:上拉电阻选择同上。LED选择5的T1型红色灯就行了(电流从参数已在上文叙述)。 图4-6 校时时灯闪电路2、数码管显示电路如下:本电子钟设计只
11、牵涉到6位数码管的显示,因此采用6个7SEG-COM-CATHODE就够了。此数码管共阴极接地。端口引出还要加74LS48译码器接单片机,这样软件编程的内容就能清楚地显示了。 图4-7 数码管显示电路五、软件设计5.1 主程序结构图 系统初始化模块按键模块计时模块校时模块数码管显示模块暂停继续模块灯闪模块 图5-1 主程序结构图5.2 主程序流程图 流程图是使用图形表示算法的思路是一种极好的方法,不论采用何种程序设计方法,程序总体结构确定后,一般以程序流程图的形式对其进行描述。总体框图中的各个子模块或各个子任务也应该结合具体的教学模型和算法画出较详细的程序流程图,供后面编写具体程序和阅读程序使
12、用。 开始定义输入输出端口开始计时显示按暂停继续按钮YN按调秒按钮YN调秒闪灯按调分按钮YN调分闪灯时间暂停YN调分闪灯按调时按钮按暂停继续钮就继续计时YN继续暂停结束 图5-2 主程序流程图5.3 主要程序模块分析 所有的程序详见附录。5.3.1 延时程序通过软件和晶振电路的配合实现提供1ms的延时程序,当调用ms函数时,通过嵌套调用100us、50us、5us的乘法关系来实现1ms的输出。当晶振为12MHz时,由可知程序的确可以延时5us乃至1ms。考虑误差程序用的是11.0592MHz。流程图如下: 图5-3 延时程序流程图5.3.2 计24小时程序 由得到的10ms乘以100次可以得到
13、1s,然后进行加法运算,满60秒进1清零,满60分进1清零,满24时清零。流程图如下: Y是否满24h?显示缓冲单元清0返回NY是否满60m?小时加1分值加1N计数器重新加载循环次数加1是否满1s?是否满60s?秒值加1N开始 图5-4 计24小时程序5.3.3 暂停/继续程序 通过确认暂停/继续键是否松开这样的去抖程序可以使得按下这一键以及按暂停键之后的动作得以完美执行。 流程图如下: 再按一次恢复运行确认暂停键低电平开始去抖暂停 图5-5 暂停/继续程序5.3.4 校时灯闪程序参照上一个模块,在去抖之后可以执行相应的程序。校时模块:时分秒的思路其实是一样的,按下相应的键一次,把相应端口的值
14、加1,时的端口时加1,分的端口分加1,秒的端口秒加1。只要在暂停的情况下按几下校对时间的键相应端口的数码管就加几。灯闪模块:在端口加1之后,通过延时程序让LED亮0.1秒灭0.1秒,重复2次,以表明在校时。 流程图如下: 开始按校秒分时键后去抖秒分时值加1 送相应的端口显示 相应的灯闪烁3次结束暂停的时候灭灯结束 图5-6 秒分时校时闪灯程序 5.3.5 16进制转BCD码程序 用十位乘以16加个位得到。 流程图省略。六、Protues和keil仿真6.1 proteus软件的介绍及使用Proteus软件是Labcenter Electronics公司的一款电路设计与仿真软件,它包括ISIS、
15、ARES等软件模块,ARES模块主要用来完成PCB的设计,而ISIS模块用来完成电路原理图的布图与仿真。Proteus的软件仿真基于VSM技术,它与其他软件最大的不同也是最大的优势就在于它能仿真大量的单片机芯片,比如MCS-51系列、PIC系列等等,以及单片机外围电路,比如按键、LED、数码管等等。通过Proteus仿真软件的使用我们能够轻易地获得一个功能齐全、实用方便的单片机实验室。 Proteus仿真时只需在AT89C52单片机中加载Keil软件生成的.HEX格式文件,即可启动仿真。6.2 Keil软件的介绍及使用Keil C51是美国Keil Software公司出品的51系列兼容单片机
16、C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境、将这些部分组合在一起。运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。如果你使用C语言编程,那么Keil几乎就是你的不二之选,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。本设计使用的keil软件是keil uvision4版本的,protues仿真前要通过工程选项,在output选项卡把生成.HEX文件勾选上,然后编译生成.HEX
17、文件供protues软件仿真使用。6.3 数字电子钟的仿真 根据设计思路做好以下几步: 查找所需的元器件; 摆好元器件的位置; 连线; 添加KEIL生成的HEX文件进行仿真。仿真图如下: 图6-1 整体仿真图按下暂停/继续键,如下: 图6-2 按下暂停/继续键的图按下秒校时键: 图6-3 按下秒计时键按下分校时键: 图6-4 按下分校时键按下时校时键 图6-5 按下时校时键连续校时也可以满足: 图6-6 连续校时按下暂停/继续键继续走时 图6-7 继续走时 七、实物制作7.1电路板焊接一般来说,造成硬件问题的首要问题就是焊接了,也就是说焊接的好与坏直接响产品的正常运行。造成焊接质量不高的常见原
18、因是:焊锡用量过多,形成焊点的锡堆积;焊锡过少,不足以包裹焊点。冷焊。焊接时烙铁温度过低或加热时间不足,焊锡未完全熔化、浸润、焊锡表面不光亮(不光滑),有细小裂纹(如同豆腐渣一样!)。夹松香焊接,焊锡与元器件或印刷板之间夹杂着一层松香,造成电连接不良。若夹杂加热不足的松香,则焊点下有一层黄褐色松香膜;若加热温度太高,则焊点下有一层碳化松香的黑色膜。对于有加热不足的松香膜的情况,可以用烙铁进行补焊。对形成的黑膜,要吃净焊锡,清洁被焊元器件或印刷板表面,重新进行焊接才行。焊锡连桥。指焊锡量过多,造成元器件的焊点之间短路。这在对超小元器件及细小印刷电路板进行焊接时要尤为注意。焊剂过量,焊点明围松香残
19、渣很多。当少量松香残留时,可以用电烙铁再轻轻加热一下,让松香挥发掉,也可以用蘸有无水酒精的棉球,擦去多余的松香或焊剂。焊点表面的焊锡形成尖锐的突尖。这多是由于加热温度不足或焊剂过少,以及烙铁离开焊点时角度不当浩成的内。7.2电路板调试 最小系统的电路不工作,首先应该确认电源电压是否正常。用电压表测量接地引脚跟电源引脚之间的电压,看是否符合电源电压,常用的是5V左右。接下来就是检测复位引脚的电压是否正常,EA引脚的电压要正常为5V左右。如果补焊电源后最小系统还是不能工作,有可能是AT89C51单片机坏掉了,重新选择一个AT89C51单片机焊接。如果是工作但是不能按需要的功能执行,也可用更换AT8
20、9C51单片机方法调试,但在此之前可以选择检查对应的模块是否有焊接问题,若没有再进行更换。八、总结和展望8.1科研实践总结 经过近两周的的努力,在老师和同学的商讨和帮助下,我较好的完成了设计任务,通过此次课程设计,我重新认识到了自学的重要性,以及学以致用的道理。我在图书馆查阅了大量的资料,同时也认识到了图书馆的重要作用。通过此次的抢答器的设计,让我重新拾起了以前所学习的电子知识,及我觉得此次设计让我更加巩固了所学的知识并在设计的过程中学会了与时俱进,克服了编程的枯燥感,让我受益匪浅。在学习单片机这门课程的时候,我们应该好好你的记笔记,课下好好的做练习题才能把C程序设计灵活的运用到单片机程序的设
21、计上,在单片机这门课程的学习上,我们还应该知道一种常用的仿真软件proteus软件,可以让你我们更为清晰的掌握AT89C51单片机的实际应用上的设计。在今后的学习过程中,应该多到图书馆看一些专业方面的书籍,以丰富自己的知识。也使我加深了对单片机及接口技术的理解和应用,由于知识水平的局限,设计中可能会存在着一些不足,我真诚的接受老师和同学的批评和指正。8.2对未来的展望 经过两周的科研实践,我深刻明白了理论知识与社会实践相结合的道理,也得到了以前书本知识所不曾得到的知识,更加明白了如今信息时代电子技能知识的重要性。 本设计增强了我对单片机、C语言等技能方面的认识,掌握了分析、处理问题的方法、逻辑
22、思维能力等基本技能的训练,具有了一定程度的实际工作能力。 面对如此激烈的市场竞争体系,只有努力掌握好单片机知识方可在竞争中立于不败之地,我对从事电子设计、C语言编程和研究产生了浓厚的兴趣。希望自己以后能通过自己的不懈努力取得更大的进步。 附 录参考文献1高伟.单片机原理及应用M.北京:国防工业出版社,2008年.2范力旻.单片机原理及应用技术.电子工业出版社.3胡文金 杨健.单片机应用技术实训教程.重庆大学出版社. 4杨加国.单片机原理与应用及C51程序设计.清华大学出版社,2006年.5齐 朱宁西.单片机应用系统设计实验(C51).电子工业出版社,2013年. 元器件清单序号名称型号规格数量
23、元件编号1直流电源9V1V12电解电容220uF和10uF1和1C3C43瓷片电容0.022uF和30pF1和2C5、C1C24三端稳压器78051U85电阻500,1k8,1R1R7,R86晶振11.0592MHz1X17单片机STC89C511U18LED-RED53LED1LED39轻触按钮TD-03B4S1S410数码管7SEG-COM-CATHODE6DIG1DIG611译码器74LS486U2U7原理图和PCB图C语言程序代码#include /片内寄存器定义#include/ 输入输出函数库#include/内部函数库sbit pauseButton=P00; /暂停 /继续按钮
24、 sbit secButton=P01; /调秒按钮sbit minButton=P02; /调分按钮sbit houButton=P03; /调时按钮sbit Led1=P04;/调分的时候闪灯sbit Led3=P06;/调时的时候闪灯void time(unsigned int ucMs);/延时单位:ms/*HEXtoBCD*/unsigned char HEXtoBCD (unsigned char hex) return (hex/10)*16+(hex%10);/*main C*/void main(void) int i; unsigned char uc10ms=0,uc1s
25、=0,uc60s=0,uc1h=0; while(1) P1=HEXtoBCD(uc1s); /显示秒 P2=HEXtoBCD(uc60s); /显示分 P3=HEXtoBCD(uc1h); /显示时 time(10); /延时0.01秒 uc10ms+; if(uc10ms=100) uc10ms=0;uc1s+; if(uc1s=60) /满60秒,即一分 uc1s=0;uc60s+; P1=HEXtoBCD(uc1s); if(uc60s=60) /满60分,即一小时 uc60s=0;uc1h+; P2=HEXtoBCD(uc60s); if(uc1h=24)/满一天,归零 uc1h=0
26、; P3=HEXtoBCD(uc1h); Led1=1; Led2=1; Led3=1; if(!pauseButton) /暂停/继续,用来校时 while(!pauseButton); while(pauseButton) if(!secButton)/校准秒 while(!secButton); uc1s+; if(uc1s=60)uc1s=0; P1=HEXtoBCD(uc1s); for(i=0;i2;i+)/校准秒时led1亮 Led1=1;time(100);Led1=0;time(100); if(!minButton) /校准分 while(!minButton); uc60
27、s+; if(uc60s=60)uc60s=0; P2=HEXtoBCD(uc60s); for(i=0;i2;i+)/校准分时led2亮 Led2=1;time(100);Led2=0;time(100); if(!houButton)/校准时 while(!houButton); uc1h+; if(uc1h=24)uc1h=0; P3=HEXtoBCD(uc1h); for(i=0;i2;i+)/校准时时led3亮 Led3=1;time(100);Led3=0;time(100); while(!pauseButton); /*晶振11.0592MHz要2个_nop_(),22.1184MHz要4个*/void delay_5us(void) _nop_(); _nop_(); /_nop_(); /_nop_();/*delay_50us*/void delay_50us(void) unsigned char i; for(i=0;i0) for(j=0;j10;j+) delay_100us(); ucMs-; 实物图- 30 -