简易电子钟的设计(程序仿真+电路图+任务书+说明书)_第1页
简易电子钟的设计(程序仿真+电路图+任务书+说明书)_第2页
简易电子钟的设计(程序仿真+电路图+任务书+说明书)_第3页
简易电子钟的设计(程序仿真+电路图+任务书+说明书)_第4页
简易电子钟的设计(程序仿真+电路图+任务书+说明书)_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

第1页目录绪论.2摘要.3第1章总体设计方案.41.1数字电子钟的电路概述.41.2电路的设计方案.41.3总体简易设计电路图.5第2章系统的硬件设计.62.1系统的硬件构成及功能.62.2单元电路的分析与设计.62.2.1AT89C51单片机及其引脚说明.62.2.2晶体振荡器.102.2.3LED数码管.102.2.474LS373的功能及引脚说明.12第3章系统的软件设计.153.1软件编程要点.153.2项目程序流程图.153.2项目的源程序.18第4章系统调试.274.1常用调试工具.274.1.1keil软件.274.1.2Proteus软件.284.1.3系统调试.28第5章总结.29附录整机电路图.30参考资料.31第2页摘要计算机的产生加快了人类改造世界的步伐,但是它毕竟体积大。单片机在这种情况下诞生了。截止今日,单片机应用技术飞速发展,纵观我们现在生活的各个领域,从导弹的导航装置,到飞机上各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各种智能IC卡、电子宠物等,这些都离不开单片机。单片计算机即单片微型计算机。(Single-ChipMicrocomputer),是集CPU,RAM,ROM,定时,计数和多种接口于一体的微控制器。它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。而51系列单片机是各单片机中最为典型和最有代表性的一种。这次毕业设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。本文通过对一个基于单片机的能实现定时,秒表,万年历,闹钟等功能的多功能电子时钟的设计学习,详细介绍了单片机应用中的数据转换显示,液晶显示原理,键盘扫描原理,单片机的定时中断原理。从而达到学习、了解单片机相关指令在各方面的应用。系统由AT89S52、温度检测芯片、时钟芯片、液晶显示器、存储器、稳压电源等部分构成,能实现时钟日历显示的功能,能进行时、分、秒的显示和实时温度显示。也具有日历计算和时钟、日历的校准,定时时间的设定和闹铃等功能。文章后附有电路原理图、PCB板图和程序清单,以供读者参考。因水平有限,难免有疏落不足之处,敬请老师和同学能给与批评指正。关键字:定时秒表闹钟万年历第3页绪论在信息技术急速发展的今天,计算机科学日新月异。而单片机作为计算机科学的一个分支,在微机控制领域得到长足的发展。随着单片机的发展与科学技术的提高,单片机已经成为人类生产生活中不可缺少的工具。现在,单片机的应用已经渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置、飞机上各种仪表的控制、计算机的网络通讯与数据传输、工业自动化过程的实时控制和数据处理、广泛使用的各种智能IC卡、民用豪华轿车的安全保障系统、录象机、摄象机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。单片机要解决的问题多数是仍是老问题,新颖之处是比以前用较少的元件。尤其是设计逻辑关系复杂的控制系统,过去用通用的逻辑门集成电路芯片将需要几十片甚至上百片,而现在只用几片就能够实现,而且方便灵活,做设计修改或改动功能时,只消改写软件原文件重写芯片,免去了在硬件线路上大动干戈的苦差事。大连减少芯片个数主要是靠单片机的可编程性和高度集成化。使开发周期更短,制造成本更低,用电更省和可靠性更高。要求用各种逻辑门芯片实现的逻辑电路,可以用一片单片机芯片加上相应的控制软件就可以实现。第4页第1章总体设计方案1.1数字电子钟的电路概述数字钟是一个将“时”,“分”,“秒”显示于人的视觉器官的计时装置。它的计时周期为24小时,显示满刻度为23时59分59秒,另外应有校时功能和报时功能。因此,一个基本的数字钟电路主要由译码显示器、“时”,“分”,“秒”计数器、校时电路、报时电路和振荡器组成。干电路系统由秒信号发生器、“时、分、秒”计数器、译码器及显示器、校时电路、整点报时电路组成。秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,一般用石英晶体振荡器加分频器来实现。将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累计60秒发现胡一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。“分计数器”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时计数器”。“时计数器”采用24进制计时器,可实现对一天24小时的累计。译码显示电路将“时”、“分”、“秒”计数器的输出状态菁七段显示译码器译码,通过六位LED七段显示器显示出来。整点报时电路时根据计时系统的输出状态产生一脉冲信号,然后去触发一音频发生器实现报时。校时电路时用来对“时”、“分”、“秒”显示数字进行校对调整的。1.2电路的设计方案根据功能和指标要求,本系统选用AT89C51单片机为主控机。通过扩展必要的外围接口电路,实现对数字电子钟的设计。具体设计考虑如下:(1)由于此次所要设计的是简单的数字电子钟显示时、分、秒功能,因此需要用LED数码管作为显示器。(2)同时用于调时、分的调时电路分别接引脚P1.1、P1.2。(3)用并行口P0.0-P0.7作为段选码,P2.0-P2.5作为位选码,相应的驱动芯片用74LS373。(4)同时还需晶体振荡电路,复位电路及中断电路。第5页该数字电子钟可以完成以下功能:(1)能准确的显示023小时59分59秒;(2)具有方便的校时功能;(3)具有特定作息报时功能;通过将以上电路组合起来实现本次我所要设计完成的简易数字电子钟及其功能。1.3总体简易设计电路图单片机AT89C51复位电路晶振电路LED数码显示器74LS373芯片图1-1总体结构框图工作原理:数字钟一般由振荡器、分频器、计数器、译码器、显示器等几部分组成。这些都是数字电路中应用最广的基本电路。石英晶体振荡器产生的时标信号送到分频器,分频电路将时标信号分成每秒一次的方波秒信号。秒信号送入计数器进行计数,并把累计的结果以“时”、“分”、“秒”的数字显示出来。“秒”的显示由两级计数器和译码器组成的六十进制计数电路实现:“分”调时电路中断电路第6页的显示电路与“秒”相同,“时”的显示由两级计数器和译码器组成的二十四进制计数电路来实现。所有计时结果由六位数码管显示。第7页第2章系统的硬件设计2.1系统的硬件构成及功能根据总体要求分析,数字电子钟的电路系统由秒信号发生器、“时、分、秒”LED数码管显示电路、校时电路、复位电路等组成。秒信号发生器是整个系统的时基信号,它直接决定计时系统的精度,一般用石英晶体振荡器加分频器来实现。“时、分、秒”分别通过不同进制的计数器来实现。74LS373将“时、分、秒”的输出状态经LED数码管显示出来。电路是根据计时系统的输出状态产生一脉冲信号。校时电路是用来对“时、分、秒”显示数字进行校对调整的。根据实际情况,硬件的主要单片机为AT89C51芯片,它能够满足数据的采集、控制和数据处理的需求。调试时间时,有相应的调试时、分的按钮。2.2单元电路的分析与设计2.2.1AT89C51单片机及其引脚说明AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROMFalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。AT89C51单片机如图2-1:第8页图2-1AT89C51单片机功能特性及引脚说明:AT89C51提供以下标准功能:4K字节FLASH闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0HZ的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。1、主电源引脚(2根)(1)VCC:电源输入,接+5V电源;(2)GND:接地线。2、外接晶振引脚(2根)(1)XTAL1:片内晶振电路的输入端;(2)XTAL2:片内晶振电路的输出端。第9页3、控制引脚(4根)(1)RST/VPP:复位引脚,引脚上出现2个机器周期的高电平将使单片机复位;(2)ALE/PROG:地址所存允许信号。当访问外部程序存储器或数据存储器时,ALE输出脉冲用于锁存地址的低8位字节。即使不访问外部存储器。ALE仍以时钟振荡频率的1/6输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。对FLASH存储器编程期间,该引脚还用于输入编程脉冲(/PROG)。如有必要,可通过对特殊功能寄存器区中的8EA单元的DO位置位,可禁止ALE操作。该置位后,只有一条MOVX和MOVC指令ALE才会被激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE无效;(3)PSEN:外部存储器读选通讯信号。当AT89C51由外部程序存储器取指令(或数据)时,每个机器周期两次/PSEN有效,即输出两个脉冲。在此期间,当访问外部数据存储器,这两次有效的/PSEN信号不出现;(4)EA/VPP:程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。4、可编程输入/输出引脚(32根)AT89C51单片机有4组8为可编程I/O口,分别为P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。每一根引脚都可以编程,比如用来控制电机、交通灯等,开发产品时就是利用这些可编程引脚来实现我们想要的功能。(1)P0口:8位双向I/O口线,名称为P0.0-P0.7,作输入口时,应先软件置“1”。是一组8位漏双向极开路型I/O口,即地址/数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动8位TTL逻辑门电路,对端口写1可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。在FLASH编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻;(2)P1口:8位准双向I/O口线,名称为P1.0-P1.7,作输入口时,应先软件置“1”。是一个带有内部上拉电阻的8位双向I/O口,P1的输出缓冲第10页级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。FLASH编程和程序校验期间,P1接收低8位;(3)P2口:8位准双向I/O口线,名称为P2.0-P2.7,作输入口时,应先软件置“1”。是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。FLASH编程和程序校验期间,P1接收低8位。在访问外部程序存储器或16位地址的外部地址存储器(例如执行MOVXDPTR指令)时,P2口送出高8位地址数据。在访问8位地址的外部数据存储器(例如执行MOVXR1指令)时,P2口线上的内容(即特殊功能寄存器SFR区中R2寄存器的内容),在整个访问期间不改变。FLASH编程和校验时,P2亦接收高位地址和其他控制信号;(4)P3口:8位准双向I/O口线,名称为P3.0-P3.7,作输入口时,应先软件置“1”。是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,被外部拉低的P3口将用上拉电阻输出电流。P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,如下表2-1所示:表2-1P3口的第二功能端口引脚第二功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2INT0(外部中断0)P3.3INT1(外部中断1)P3.4T0(定时/计数器1外部输入)P3.5T1(定时/计数器1外部输入)第11页P3.6WR(外部数据存储器写选通)P3.7RD(外部数据存储器读选通)P3口还接收一些用于FLASH闪速存储器编程和程序校验的控制信号。2.2.2晶体振荡器石英晶体振荡器的特点是振荡频率准确、电路结构简单、频率易调整,作用是为系统提供基本的时钟信号。我们在晶体某一方向加一电场,从而在与此垂直的方向产生机械振动,有了机械振动,就会在相应的垂直面上产生电场,从而使机械振动和电场互为因果,这种循环过程一直持续到晶体的机械强度限制时,才达到最后稳定,这种压电谐振的频率即为晶体振荡器的固有频率。振荡器特性,XTAL1和XTAL2分别为反向放大器的输入和输出。该反晶体向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。在XTAL1和XTAL2引脚上外接定时元件就能构成自激振荡电路。定时元件通常采用石英晶体和电容组成的并联谐振电路。电容器C1和C2主要起频率微调作用。石英晶体振荡器,如下图2-2:X1CRYSTALC122nFC222nF图2-2石英晶体振荡器第12页2.2.3LED数码管LED数码管示,如下图2-3:图2-3LED数码管LED数码管的性能特点、简易检测及使用注意事项:1.性能特点(1)能在低电压、小电流条件下驱动发光,能与CMOS、ITL电路兼容;(2)发光响应时间极短(#defineucharunsignedchar#defineuintunsignedintsbitdule=P10;/定义段选信号sbitwele=P10;/定义位选信号sbitkey_minu=P12;/定义调时开关(分钟)sbitkey_hour=P13;/定义调时开关(小时)sbitkey=P32;/定义外部中断0开关ucharaa;/定义定时器中断控制变量uchartemp_hour;/定义调时开关的暂存变量(分钟)uchartemp_minu;/定义调时快关的暂存变量(小时)uchartemp_key;/定义外部中断0的暂存变量ucharhour;ucharminu;ucharsec;ucharhour_sw;/小时的十位ucharhour_gw;/小时的个位ucharminu_sw;/分钟的十位ucharminu_gw;ucharsec_gw;ucharsec_sw;ucharcodetable=第20页0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;voidinit()TMOD=0X01;/设定定时器工作方式为工作方式1EA=1;/开启总中断位ET0=1;/开启定时器0中断TH0=(65536-50000)/256;/给定时器0的高8位装数TL0=(65536-50000)%256;/给定时器0的低8位装数TR0=1;/允许计数器0工作IT0=0;/设置外部中断0的触发方式位低电平触发EX0=1;/开启外部中断0PX0=1;/将外部中断0的优先级设位最高aa=0;/初始化定时器中断0的控制位hour=0;minu=0;sec=0;key_hour=1;/将开关控制置高电平key_minu=1;/将开关控制置高电平key=1;/将开关控制置高电平temp_key=key;/将开关控制变量的值赋给开关暂存变量temp_hour=key_hour;/将开关控制变量的值赋给开关暂存变量第21页temp_minu=key_minu;/将开关控制变量的值赋给开关暂存变量/拆数函数voidnumber()hour_sw=hour/10;hour_gw=hour%10;minu_sw=minu/10;minu_gw=minu%10;sec_sw=sec/10;sec_gw=sec%10;/延时函数微妙级voiddelay(uintz)uintx,y;for(x=z;x0;x-)for(y=124;y0;y-);/显示函数voiddisplay()number();/调用拆数函数dule=1;/打开段选信号wele=1;/打开位选信号第22页P2=0x3e;/使第一个数码管亮及数码管的位选位P0=tablehour_sw;/给数码管的P0口赋值及数码管的段选位dule=0;/关闭段选信号wele=0;/关闭位选信号delay(5);/调用延时函数延时5MSdule=1;wele=1;P2=0x3d;P0=tablehour_gw;dule=0;wele=0;delay(5);dule=1;wele=1;P2=0x3b;P0=tableminu_sw;dule=0;wele=0;delay(5);dule=1;wele=1;P2=0x37;P0=tableminu_gw;dule=0;wele=0;delay(5);第23页dule=1;wele=1;P2=0x2f;P0=tablesec_sw;dule=0;wele=0;delay(5);dule=1;wele=1;P2=0x1f;P0=tablesec_gw;dule=0;wele=0;delay(5);/主函数voidmain()init();/调用初始化函数while(1);/死循环,等待中断/定时器中断服务函数void_TR0_()interrupt1TH0=(65536-50000)/256;/给定时器0的高8位装初值TL0=(65536-50000)%256;/给定时器0的低8位装初值50ms产生一次中断第24页aa+;/中断控制变量自加if(aa=20)/判断控制变量是否位20及计时达到1Saa=0;/清0sec+;/秒自加1if(sec=60)/判断是否到60Ssec=0;/清0minu+;/分自加1if(minu=60)/判断分是否到60minu=0;/清0hour+;/小时自加1if(hour=24)hour=0;display();/调用显示函数/外部中断0服务函数void_EX0_()interrupt0temp_minu=key_minu;/将开关控制变量的值赋给开关暂存变量temp_hour=key_hour;/将开关控制变量的值赋给开第25页关暂存变量temp_key=key;/将开关控制变量的值赋给开关暂存变量while(temp_key=0)/判断中断开关是否按下若按下执行下面的循环temp_key=key;/将开关控制变量的值赋给开关暂存变量temp_minu=key_minu;/将开关控制变量的值赋给开关暂存变量temp_hour=key_hour;/将开关控制变量的值赋给开关暂存变量display();/调用显示函数/调分钟if(temp_minu=0)/判断调时开关(分钟)是否按下delay(5);/延时5毫秒软件消除机械误差temp_minu=key_minu;/将开关控制变量的值赋给开关暂存变量if(temp_minu=0)/判断调时开关(分钟)是否真的按下display();/调用显示函数while(temp_minu=0)/松手检测temp_minu=key_minu;/如果开关一直处于按下状态,则死在这里(死循环)第26页if(temp_minu=1)/判断调时开关(分钟)是否松开delay(5);/延时5MS软件消除机械误差temp_minu=key_minu;/将开关控制变量的值赋给开关暂存变量if(temp_minu=1)/判断调时开关(分钟)是否真的松开minu+;/分钟自加1if(minu=60)/判断分钟是否为60minu=0;/清0hour+;/小时自加1if(hour=24)hour=0;/调小时temp_hour=key_hour;if(temp_hour=0)第27页delay(5);temp_hour=key_hour;if(temp_hour=0)display();while(temp_hour=0)temp_hour=key_hour;if(temp_hour=1)delay(5);temp_hour=key_hour;if(temp_hour=1)hour+;if(hour=24)hour=0;第28页第4章系统调试调试是一个必不可少的环节,它将会验证你的成果,是否实现了所要完成的功能。系统调试仿真时首先要在使用Keil编译器,把所写的程序进行编译,同时在仿真器里设置生成“HEX”文件,编译无错误时还要进行Proteus仿真,查看功能是否能够实现。下面就将仿真将会用到的软件进行简单的介绍,并对仿真过程予以简介。4.1常用调试工具4.1.1keil软件Keil软件是集成调试环境,集成了编缉器、编译器、调试器,支持软件模拟,支持项目管理功能强大的观察窗口,支持所有的数据类型。树状结构显示,一目了然,支持ASM(汇编)、C语言,多语言多模块源程序混合调试,在线直接修改、编译、调试源程序,错误指令定位。功能很强大。用于对程序的调试和编辑。第29页4.1.2Proteus软件系统仿真还用到了Proteus软件,可通过仿真可以完全显示出所设计系统的功能,对于程序的调试等有很大的帮助。首先要新建一个文档是DNS型的找出需要的器件,可以使用搜索功能。接着把各个器件放到合适的位置都要放到蓝色框内。然后根据自己的设计要求连线。把所有的元件都连接好,做出完整的电路图。4.1.3系统调试系统的调试开始是把Keil编译生成的无错误后缀名为HEX的文件加载到AT89C51单片机中,方法是双击单片机弹出一个对话框,在progra

温馨提示

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

评论

0/150

提交评论