基于51单片机电子万年历设计.docx

上传人:b****1 文档编号:10376973 上传时间:2023-05-25 格式:DOCX 页数:35 大小:134.61KB
下载 相关 举报
基于51单片机电子万年历设计.docx_第1页
第1页 / 共35页
基于51单片机电子万年历设计.docx_第2页
第2页 / 共35页
基于51单片机电子万年历设计.docx_第3页
第3页 / 共35页
基于51单片机电子万年历设计.docx_第4页
第4页 / 共35页
基于51单片机电子万年历设计.docx_第5页
第5页 / 共35页
基于51单片机电子万年历设计.docx_第6页
第6页 / 共35页
基于51单片机电子万年历设计.docx_第7页
第7页 / 共35页
基于51单片机电子万年历设计.docx_第8页
第8页 / 共35页
基于51单片机电子万年历设计.docx_第9页
第9页 / 共35页
基于51单片机电子万年历设计.docx_第10页
第10页 / 共35页
基于51单片机电子万年历设计.docx_第11页
第11页 / 共35页
基于51单片机电子万年历设计.docx_第12页
第12页 / 共35页
基于51单片机电子万年历设计.docx_第13页
第13页 / 共35页
基于51单片机电子万年历设计.docx_第14页
第14页 / 共35页
基于51单片机电子万年历设计.docx_第15页
第15页 / 共35页
基于51单片机电子万年历设计.docx_第16页
第16页 / 共35页
基于51单片机电子万年历设计.docx_第17页
第17页 / 共35页
基于51单片机电子万年历设计.docx_第18页
第18页 / 共35页
基于51单片机电子万年历设计.docx_第19页
第19页 / 共35页
基于51单片机电子万年历设计.docx_第20页
第20页 / 共35页
亲,该文档总共35页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于51单片机电子万年历设计.docx

《基于51单片机电子万年历设计.docx》由会员分享,可在线阅读,更多相关《基于51单片机电子万年历设计.docx(35页珍藏版)》请在冰点文库上搜索。

基于51单片机电子万年历设计.docx

基于51单片机电子万年历设计

 

基于51单片机的电子万年历设计

摘要

随着微电子技术的快速发展,单片机的应用越来越广泛。

它有着体积小、功能全、性价比高等诸多优点,在多个测控领域的应用中扮演着很重要的角色。

单片机开发技术已成为现代专业技术人员必须掌握的一门技术。

电子万年历,是一种被广泛应用的日常计时工具。

本设计目标是利用单片机设计一个电子万年历,要求可以实现日期和时间的显示并且具有可调整日期和时间的功能。

文章的主要部分是硬件设计和软件编程。

硬件部分主要由AT89C51单片机、晶振电路、复位电路、数码管显示电路以及调时按键电路等组成。

在本文中选择使用AT89C51单片机,该单片机功耗小、低成本,且适合于许多比较复杂的控制应用场合。

软件方面主要包括主程序、时间计时子程序、延时子程序、显示子程序、时间调整子程序等。

在KEIL软件中采用C语言编写程序及调试程序,编译成功后,生成HEX文件加载到Proteus软件中进行单片机仿真,经过多次调试后达到目的要求。

关键字:

电子万年历;单片机(AT89C51);数码管

 

Thedesignofelectroniccalendarbasedon51singlechipmicrocomputer

Abstract

Withtherapiddevelopmentofthemicroelectronicstechnology,SCMisusedmoreandmorewidely.Therearemanyadvantages,suchassmallsize,full-featured,highCost-effectiveandsoon.Itplaysaveryimportantroleinmanyfieldsofmeasurementandcontrol.Modernprofessionalandtechnicalpersonnelmustmastermicrocontrollerdevelopmenttechnology.Electroniccalendar,asmalltypicalelectronicsdesign,isacommondailytimingtool.

ThepurposeofthisdesignistodesignaelectroniccalendarbasedontheAT89C51microcontrollerwhichcanbedisplayedandadjusteddateandtime.Themaincoreofthearticleisthehardwaredesignandsoftwareprogram.ThehardwarepartiscomposedmainlyofAT89C51microcontroller,crystaloscillatorcircuit,resetcircuit,thedigitaldisplaycircuitandtimeadjustmentcircuit.Inthispaper,IchosetousetheAT89C51microcontroller,whichislow-power,lowcostandsuitableformanyofcomplexcontrolapplications.Softwareprogramincludesthemainprogram,timingsubroutine,delaysubroutine,adjustthetimesubroutines.CompilinganddebuggingtheprograminKEILsoftwarewithClanguage.Aftercompilingsuccessfully,theHEXfilewhichisgeneratedisloadedintoProteussoftware.Reachingtheobjectiverequirementsafterdebuggingseveraltimes.

keywords:

Electroniccalendar;Microcomputer(AT89C51);Nixietube

 

第一章引言

随着人们生活水平的提高和生活节奏的加快,对日常生活中方方面面的要求也越来越高,其中最为看重的就是日常精准计时。

于是为了满足生活需求,人们不断革新改进。

总体来说,近代世界钟表计时业界共经历了三次革命。

最早的是摆和摆轮游丝的发明,最具代表性的产品是带有摆或摆轮游丝的机械钟或表,它具有相对稳定的机械振荡频率源,从而使得钟表的走时差从分级缩小到了秒级[1]。

进而是对于石英晶体振荡器的应用,此次革命最具代表性的产品是走时精度更高的石英电子钟表,钟表的走时月差从分级缩小到了秒级[1]。

第三次革命是单片机数码计时技术的应用,也就是电子万年历的诞生,使得计时产品的走时日差从分级缩小到1/600万秒[1],传统的指针计时的方式变成了更加直观的数字显示方式,而且增加了精准且可调适日期、温度、闹铃、记事本、相册等其他日常附属信息的显示功能,更加贴近和方便生活的使用,可以说,电子万年历的出现带来了钟表计时业界跨跃性的进步。

国内生产的电子万年历产品有很多种,其中主要是以多功能电子万年历为主,使得万年历除了原有的显示时间和日期等基本功能外,还具有测温、闹铃、报警等日常所需的简易功能。

本文介绍了基于AT89C51单片机设计的电子万年历。

本设计采用直接使用单片机内部定时器的方案,利用AT89C51单片机制成电子万年历电路,利用锁存器进行分时传递,控制LED数码管的输出来显示年、月、日、时、分、秒,其最大特点是:

硬件电路简单,安装方便易于实现,软件设计可靠且独特。

  

 

第二章单片机

2.1什么是单片机

2.1.1概述

单片机是单片微型计算机的简称,是嵌入式微控制器(EmbeddedMicrocontrollerUnit,EMCU)的典型代表,常用英文字母缩写MCU来表示,其又称单片微控制器[2]。

它不是完成某一个逻辑功能的芯片,是把中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O端口和中断系统、定时器/计数器等功能集成到一块硅片上,从而形成的微型计算机系统[3]。

单片机是由仅有CPU的专用处理器芯片发展而来,最早的设计理念是通过将CPU和大量外围设备集成于一个芯片中,使计算机系统变得更小,更容易集成于较复杂且对体积要求比较严格的控制设备当中。

INTEL的8080是最早按照这种思想设计出的处理器,其中最成功的是INTEL的8051,此后在其基础上发展出了MCS51系列单片机系统。

其优点是简单可靠而且性能不错,因此被大众一致好评,基于这一系列的MCU系统直到现在还在广泛使用。

可以说人类的生活已经离不开单片机了。

手机、座机、计算器、家用电器设备、电子玩具器件、鼠标以及掌上电脑等电子产品中都含有单片机[4]。

汽车上一般配备40多片单片机,甚至复杂的工业控制系统上同时工作的单片机可能会有数百片之多。

2.1.2单片机的基本结构

运算器:

运算器由算术逻辑单元ALU、寄存器和累加器等组成。

ALU的作用是把传来的数据进行算术或逻辑运算,输入来源是2个8位数据,分别来自累加器和数据寄存器。

ALU能完成对这两个数据进行加、减、与、或、比较大小等操作,最后将结果存入累加器。

控制器:

控制器由程序寄存器、指令寄存器、指令译码器、时序发生器和操作控制器等组成,是发布命令的“指挥官”,整个微机系统的操作都由控制器来协调和指挥。

主要寄存器:

包括累加器A、指令寄存器IR和指令译码器ID、程序计数器PC、地址寄存器AR等。

2.2单片机的历史及发展趋势

单片机诞生于1971年,经历了SCM、MCU、SOC三大阶段,早期的SCM单片机都是8位或4位的。

90年代后单片机技术得到了巨大的提高,32位单片机迅速取代16位单片机的高端地位,并且进入主流市场。

而传统的8位单片机的性能也飞速提高,比起80年代处理能力提高了近数百倍[5]。

高端的32位SOC单片机主频已超过300MHz,性能堪比90年代中期的专用处理器,而普通型号的出厂价格竟跌落至1美元,最高端型号的出厂价格也只有10美元而已。

当代单片机系统已经不再只能开发和使用于裸机环境下,大量专用的嵌入式操作系统被广泛应用在全系列的单片机上。

而在作为掌上电脑和手机核心处理的高端单片机甚至可以直接使用专用的Windows和Linux操作系统。

2.2.1早期阶段

SCM即单片微型计算机(SingleChipMicrocomputer)阶段,主要是寻求单片形态嵌入式系统的最佳体系结构[6]。

此次创新成功,奠定了它必将拥有着和通用计算机完全不同的未来前景。

2.2.2早期发展

1971年霍夫于美国英特尔公司研制出世界上第一个4位的微处理器。

4004微处理器在4.2毫米×3.2毫米的硅片上集成了2250个晶体管。

另外加上一块256字节的只读存储器电路、一块32位的随机存取存储器和一块10位寄存器电路,构成了新一代计算机,被英特尔公司命名为MCS-4微型电子计算机。

微处理器和微机时代从此开始。

1973年8月,霍夫等人研制出8位微处理器Intel8080,以N沟道MOS电路取代了P沟道,第二代微处理器就此诞生[7]。

主频2MHz的8080芯片运算速度比8008快了10倍,可存取64KB存储器,使用了基于6微米技术的6000个晶体管,处理速度为0.64MIPS(MillionInstructionsPerSecond)[7]。

1975年4月,第一个通用型Altair8800,由MITS发布,此为世界上第一台微型计算机。

1976单片机诞生。

有英特尔公司研制成功。

同时,Zilog公司开发出了Z80微处理器。

当时,Zilog、Motorola和Intel在微处理器领域处于三足鼎立的显赫位置。

20世纪80年代初,英特尔公司推出了MCS-51系列8位高档单片机。

此系列单片机无论是片内RAM容量、I/O口功能,还是系统扩展方面都有了很大的提高。

2.2.3中期发展

MCU即微控制器(MicroControllerUnit)阶段,主要的技术发展方向是:

满足嵌入式应用时不断扩展对象系统要求的各种外围电路与接口电路,突显其对象的智能化控制能力[6]。

当时最著名的厂家Philips公司以其在嵌入式应用方面的巨大优势,将MCS-51从单片微型计算机迅速的发展到微控制器[6]。

极大地推动了嵌入式系统的发展。

2.2.4当前趋势

SOC嵌入式系统(SystemonChip)式的独立发展之路,寻求应用系统在芯片上的最大化解决是向MCU阶段发展的重要因素,于是随着单片机的发展自然就形成了SOC化趋势[8]。

随着微电子技术、IC设计、EDA工具的发展,基于SOC的单片机应用系统设计会有很大的发展前景。

因此,对单片机的理解可以从单片微型计算机、单片微控制器延伸到单片应用系统[6]。

2.3应用范围

单片机的使用遍布我们生活中的各个领域。

导弹的导航装置,飞机的仪表控制,计算机的网络通讯和数据传输,工业自动化过程的实时控制和数据处理,自动化控制领域的机器人、智能仪表、医疗器械以及各种智能机械这些都离不开单片机[9]。

甚至智能IC卡,民用豪车的安保系统,录像机、摄像机、智能一体化洗衣机的控制,以及电子玩具、电子宠物等等也都用到了单片机。

因此,可见单片机对于我们生活的重要性无可取代。

单片机广泛应用大致可分如下几个范畴:

1.智能仪器仪表;2.实时工业控制;3.家用电器;4.网络和通信;5.设备领域;6.模块化系统;7.汽车电子。

此外,单片机在工商、金融、科研、教育、电力、通信、物流和国防航空航天等领域都有着十分广泛的用途[10]。

2.4主流的单片机产品

目前市场上有几种比较主流的单片机,如PIC、AT89S与AVR单片机、STC单片机、Motorola单片机、MSP430单片机、台湾MDT20XX系列单片机、EM78系列OTP型单片机、Scenix单片机、LG公司GMS90系列单片机、华邦单片机、Zilog单片机、NS单片机、COP8单片机、AX1001单片机等等。

这些单片机都有着自己独有的特点,在单片机市场上享有自己的一足之地!

第三章设计要求及方案选定

3.1设计要求

本课题主要内容是利用51单片机设计一个电子万年历,应满足以下要求:

1.尽可能的节省成本;

2.具有显示年、月、日、时、分、秒、周的时钟基本功能;

3.能够通过键盘设定和调整日期和时间。

3.2系统基本方案

3.2.1单片机芯片的选择

对于单片机芯片的选择有两个方案,分别是:

方案一:

采用AT89S52,片内ROM全都采用FlashROM;能以3V的超低压工作;同时与MCS-51系列单片机完全兼容;具有在线编程可擦除技术。

但因为价格昂贵,不利于实验。

方案二:

采用AT89C51,此芯片与MCS-51兼容;寿命可支持1000写/擦循环;数据保留10年;在0Hz-24Hz频率下全静态工作;三级程序存储器锁定;128*8位内部RAM;32可编程I/O线;两个16位定时器/计数器;5个中断源;可编程串行通道;低功耗的闲置和掉电模式;片内振荡器和时钟电路[11]。

价格低廉功能强大。

所以本着低成本的设计理念,本设计最终决定选择方案二,采用AT89C51芯片作为主控芯片。

3.2.2显示模块的选择

对于显示模块分别有以下三种方案:

方案一:

采用LED液晶显示屏,支持大量文字图片显示,清晰美观,但是价格太高。

方案二:

采用点阵式数码管显示,比较适合显示文字,但是用来显示数字太过于浪费,且价格也相对较高。

方案三:

采用LED数码管动态扫描,其价格适中,需要的接口线少,对于显示数字最合适。

所以综上考虑最终决定选择方案三,采用LED数码管进行显示。

3.2.3时钟芯片的选择

对于时钟芯片的选择有两种方案,分别是:

方案一:

采用DS1302时钟芯片实现时钟,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V[12]。

但是,成本较高。

方案二:

利用AT89C51单片机内部的定时/计数器进行中断计时。

该方案极大的节省了成本,且在定时/计数器的使用、中断及程序设计方面能够得到很好的锻炼,对单片机的指令系统进行更进一步的了解。

对比之后选择低成本比较适合本实验的方案,所以最终决定选择方案二,利用单片机内部定时器计时。

3.2.4电路设计最终方案决定

综上各方案最后对照设计要求决定:

采用AT89C51作为主控制芯片,直接使用单片机内部定时器计时,利用锁存器驱动LED数码管动态显示。

 

第四章系统的硬件设计

4.1总的设计框架

在本设计中,AT89C51作为主控制芯片,外接晶振电路,提供其外部时钟频率,复位电路可在上电或必要时对其进行复位,51单片机内部的16位定时器定时,数码管显示模块则显示出时间日期,按键电路的设置可方便用户对时间日期进行调整。

硬件设计框图如下:

 

4.2晶振电路模块

每个单片机系统里都有晶振,全称是叫晶体振荡器,在单片机系统里晶振的作用非常大,其作用是为系统提供基本的时钟信号,它结合单片机内部的电路,产生单片机所必须的时钟频率,单片机一切指令的执行都是建立在这个基础上的[13]。

晶振提供的时钟频率越高,那单片机的运行速度也就越快。

通常一个系统共用一个晶振,便于各部分保持同步[14]。

51单片机的引脚XTAL1和XTAL2分别为反向放大器的输入和输出。

本设计采用外接晶振的方式。

具体的工作过程是:

外接晶振以及电容C1、C2构成并联谐振电路,接在放大器的反馈回路中,内部振荡器产生自激振荡,从而为CPU提供时钟频率。

具体电路图如下所示:

图2晶振电路电路图

4.3复位电路模块

系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。

为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位[15]。

在单片机运行过程中,如需对单片机进行复位操作,可按下复位电路的复位按键。

具体的复位电路如下图所示:

图3复位电路电路图

4.4显示模块

本设计采用数码管动态显示方式,利用锁存器74HC573,进行信号的分时传递,具体的连线如下:

锁存器U2输入端与单片机P0端口相连,输出端与每一个数码管的8个段选端口相连,选择端LE与单片机P3^0端口相连。

锁存器U3的输入端也与单片机的P0端口相连,输出端与显示星期、时、分、秒的7个数码管的位选端口相连,选择端LE与单片机P3^1端口相连。

锁存器U4的输入端也与单片机的P0端口相连,输出端与显示年、月、日的8个数码管的位选端口相连,选择端LE与单片机P3^2端口相连。

具体的工作过程如下:

对P3^0端口置高电平,锁存器U2有效,P0端将需要显示的数字的相应二进制码输出,如要数码管显示数字1,则P0输出0x06,再对P3^0端口置低电平,锁存器U2相应二进制码锁存住。

如果需要显示星期、时、分、秒,则对P3^1端口置高电平,P0端将需要选择显示的数码管的相应二进制码输出,如要选择秒的各位显示数字,则P0输出0x01,再对P3^1端口置低电平,锁存器U3将相应二进制码锁存住。

如果需要显示年、月、日,则对P3^2端口置高电平,P0端将需要选择显示的数码管的相应二进制码输出,如要选择日的个位显示数字,则P0输出0x01,再对P3^2端口置低电平,锁存器U4将相应二进制码锁存住。

将上述过程反复执行就可以实现时间日期的显示。

图4显示模块:

锁存器及其端口连接电路图

图5显示模块:

数码管及其端口连接电路图

4.5按键电路模块

为了方便用户对时间日期进行调整,本设计设置了时间日期调整模块,硬件电路连接为:

选择键一端与P3^5端口相连,另一端接地;加键与P3^6端口相连,另一端接地;减键与P3^7端口相连,另一端接地。

单片机上电后,首先对P3^5、P3^6和P3^7三个端口初始化置为高电平,然后反复检查这三个端口的电平是否发生变化,若有则调转到相应的子程序中执行。

图6按键电路电路图

 

第五章系统的软件设计及仿真

5.1系统的软件设计

在执行主程序之前,先对全局变量和端口进行定义。

定义一个无符号数组“codetable[]”,将共阳极数码管七段码数据加入其中,以便调用。

显示的数字分别为0、1、2、3、4、5、6、7、8、9,其对应的编码如下:

0xc0、0xf9、0xa4、0xb0、0x99、0x92、0x82、0xf8、0x80、0x90、0x88、0x83、0xc6、0xa1、0x86、0x8e。

为了方便对数码管位选,进行相应编码,并存入数组中,相应程序如下:

unsignedcharcodetable1[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

5.1.1主程序

图7主程序框图

主程序执行流程如图7所示,主程序先对定时器和显示单元进行初始化,设定定时器T0、T1工作方式都为1,开启总中断、T0和T1的中断允许,并开启定时器T0。

程序如下:

TMOD=0x11;

EA=1;

ET0=1;

ET1=1;

TR0=1;

8051片内振荡器输出经12分频后的脉冲,即每个机器周期使定时器的数值加1直至计满溢出。

本实验采用12M晶振,一个机器周期为1μm,计数频率1MHz,要实现50ms中断一次,可用如下程序对定时器T0赋初值:

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

T1同理:

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

然后循环调用时间计时子程序、显示子程序和时间调整子程序。

当有键按下,则转入相应的功能程序。

已知年月日可以通过公式推算出周,具体的程序如下:

week=(ri+2*yue+3*(yue+1)/5+nian+nian/4-nian/100+nian/400)%7+1;

5.1.2时间计时子程序

时间计时子程序如图8所示。

定时器/计数器T0用于时间计时。

选择方式1,重复定时,定时时间设为50ms,即50ms中断一次。

对定时器T0赋初值。

在中断服务程序中定义一个变量J对50ms计数,计20次则对秒单元加1,秒单元加到60则对分单元加1,同时秒单元清0。

程序如下:

uintj;

j++;

if(j==20)

{

j=0;

miao++;

if(miao==60)

{

miao=0;

fen++;

后面依此类推,分单元加到60则对时单元加1,同时分单元清0。

时单元加到24则对日单元加1,同时时单元清0。

日单元加到29天判断此月是否为2月,若是则再次判断此年是闰年还是平年,若是平年则月单元加1同时日单元变为1;若是闰年则日单元加到30再对月单元加1,同时日单元变为1。

若不是2月份则判断是1、3、5、7、8、10、12月还是4、6、9、11月。

若是前者则日单元加到32时对月单元加1,同时日单元变位1;若是后者则日单元加到31时对月单元加1,同时日单元变为1。

月单元加到13则对年单元加1,同时月单元变为1。

相应程序如下:

ri++;

if(ri==32&&yue==1|3|5|7|8|10|12)ri=1;

elseif(ri==31&&yue==4|6|9|11)ri=1;

elseif(yue==2)

{

runnian();//闰年

if(i==1)

{

if(ri==30)ri=1;

}

else//平年

{

if(ri==29)ri=1;

}

}

yue++;

if(yue==13)

{

yue=1;

nian++;

在对各单元计数的同时,把它们的值放到存储单元的指定位置。

5.1.3显示子程序

本系统共用15个数码管,第二排从右到左依次显示秒个位、秒十位、分个位、分十位、时个位、时十位、周。

第一排从右到左依次显示日个位、日十位、月个位、月十位、年个位、年十位、年百位和年千位。

采用软件译码动态显示。

实际连接电路时,从上往下第一块锁存器(74HC573)的输出端分别和所有数码管的段选端口相连,控制数字数值的显示(0、1、2、3......9)。

下面两个锁存器的输出端分别和数码管的位选端口相连,控制哪个数码管进行显示。

详见附录电路图。

显示时,先取内存地址中的数据,然后查得对应的显示用段码从P0口输出,P0端口将对应的数码管选中供电,就能显示该地址单元的数据值。

例如对秒的个位显示时,P30端口置1,第一片74HC573有效,将段选数据写入并将P30清0锁存,然后P31端口置1,第二片74HC573有效,将位选数据写入并将P31清0锁存,具体程序如下:

P30=1;

P0=table[gewei];

P30=0;

P31=1;

P0=table1[b];

P31=0;

delay

(2);

P

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2