基于AT89C51单片机的多功能电子万年历的方案设计书大学本科方案设计书已改.docx

上传人:b****8 文档编号:9980443 上传时间:2023-02-07 格式:DOCX 页数:31 大小:157.07KB
下载 相关 举报
基于AT89C51单片机的多功能电子万年历的方案设计书大学本科方案设计书已改.docx_第1页
第1页 / 共31页
基于AT89C51单片机的多功能电子万年历的方案设计书大学本科方案设计书已改.docx_第2页
第2页 / 共31页
基于AT89C51单片机的多功能电子万年历的方案设计书大学本科方案设计书已改.docx_第3页
第3页 / 共31页
基于AT89C51单片机的多功能电子万年历的方案设计书大学本科方案设计书已改.docx_第4页
第4页 / 共31页
基于AT89C51单片机的多功能电子万年历的方案设计书大学本科方案设计书已改.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

基于AT89C51单片机的多功能电子万年历的方案设计书大学本科方案设计书已改.docx

《基于AT89C51单片机的多功能电子万年历的方案设计书大学本科方案设计书已改.docx》由会员分享,可在线阅读,更多相关《基于AT89C51单片机的多功能电子万年历的方案设计书大学本科方案设计书已改.docx(31页珍藏版)》请在冰豆网上搜索。

基于AT89C51单片机的多功能电子万年历的方案设计书大学本科方案设计书已改.docx

基于AT89C51单片机的多功能电子万年历的方案设计书大学本科方案设计书已改

 

基于AT89C51单片机的多功能电子万年历的设计

 

AT89C51SCM-BASEDELCTRONICDESIGNCALENDAR

毕业论文

系部名称电子工程系

专业名称应用电子技术

指导教师龙舰涵

学生姓名张昌海

学号10010239

 

2012年12月10日

摘要

本文介绍了基于AT89C51单片机的多功能电子万年历的硬件结构和软硬件设计方法。

系统以AT89C51单片机为控制器,以串行时钟日历芯片DS1302记录日历和时间,利用proteus仿真,它可以对年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能。

万年历采用直观的数字显示,可以在1602上同时显示年、月、日、周日、时、分、秒,还具有时间校准等功能。

此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,具有广阔的市场前景。

关键字:

AT89C51;电子万年历;DS1302;1602

 

 

目录

摘要01

第一章绪论03

1.1课题研究的背景03

1.2课题解决的主要内容03

第二章系统的总体设计04

2.1系统硬件电路设计04

2.1.1系统硬件结构04

2.2单片机及其附属电路05

2.2.1MCS-51系列单片机05

2.1.2MCS-51系列单片机的工作条件电路08

2.1.3DS130209

2.1.4LCD1602显示电路10

2.1.5调节电路12

第三章系统的软件设计12

3.1主程序12

3.2LCD1602的驱动程序13

3.3DS1302的驱动程序14

第四章万年历的设计结论14

4.1万年历工作原理14

4.2万年历结构原理图15

致谢16

参考文献16

附录17

附录【1】仿真图片17

附录【2】程序代码17-25

 

第一章绪论

1.1课题研究的背景

随着科技的快速发展,时间的流逝,从观太阳、摆钟到现在电子钟,人类不断研究,不断创新纪录。

它可以对年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。

对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、时、分、秒和温度等信息,还具有时间校准等功能。

该电路采用AT89C51单片机作为核心,功耗小,能在3V的低压工作,电压可选用3~5V电压供电。

  此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。

1.2课题解决的主要内容

本课题所研究的电子万年历是单片机控制技术的一个具体应用,主要研究内容包括以下几个方面:

(1)选用电子万年历芯片时,应重点考虑功能实在、使用方便、单片存储、低功耗、抗断电的器件。

(2)根据选用的电子万年历芯片设计外围电路和单片机的接口电路。

(3)在硬件设计时,结构要尽量简单实用、易于实现,使系统电路尽量简单。

(4)根据硬件电路图,在开发板上完成器件的焊接。

(5)根据设计的硬件电路,编写控制AT89C51芯片的单片机程序。

(6)通过编程、编译、调试,把程序下载到单片机上运行,并实现本设计的功能。

(7)在硬件电路和软件程序设计时,主要考虑提高人机界面的友好性,方便用户操作等因素。

(8)软件设计时必须要有完善的思路,要做到程序简单,调试方便。

第二章系统的总体设计

单片机电子万年历的制作有多种方法,可供选择的器件和运用的技术也有很多种。

所以,系统的总体设计方案应在满足系统功能的前提下,充分考虑系统使用的环境,所选的结构要简单使用、易于实现,器件的选用着眼于合适的参数、稳定的性能、较低的功耗以及低廉的成本。

2.1系统硬件电路设计

2.1.1系统硬件结构

此系统由单片机主体电路、单片机工作条件电路、1602显示电路、时间条件电路、时钟芯片DS1302等几大部分组成,其中单片机工作条件电路又包含电源电路、时钟电路、复位电路等几大部分组成,单片机工作条件电路使单片机正常的工作,然后单片机通过程序设置,控制DS1302时钟芯片,从DS1302芯片读取数据处理后送1602显示,其显示的时间和日期可以通过时间条件按键电路来进行调整,此系统硬件结构框图如图2-1

图2-1系统硬件框图

2.2单片机及其附属电路

2.2.1MCS-51系列单片机

MCS-51系列单片机主要是指Intel公司生产的以51位内核的单片机芯片,具有8位CPU、4K字节ROM、128字节RAM、可扩展外部64K字节RAM和ROM、2个16位的定时器/计数器、4个8位并行I/O口、1个全双工串行I/O口、21字节的专用寄存器、5个中断源、片内自带振荡器、片内单总线等功能部件。

AT89C51单片机就是MCS-51系列单片机的一种,它的片内有4K字节的在线编程Flash存储器,可以擦写1000次,具有掉电模式,而且具有掉电状态下的中断恢复功能,对设计开发非常实用。

其引脚图如图2-2所示。

图2-2AT89C51单片机的引脚图

其引脚功能和内部结构如下:

1.单片机的引脚功能

AT89C51单片机有40个引脚。

(1)、Vcc:

电源电压+5V

(2)、GND:

接地

(3)、P0口:

P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。

作为输出口用时,每位能驱动8个TTL逻辑门电路,对端口写“1”可作为高阻抗输入端用。

(4)、P1口:

P1口是一个带内部上拉电阻的8位双向I/O,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。

对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。

作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。

(5)、P2口:

P2口是一个带内部上拉电阻的8位双向I/O,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。

对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。

作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。

(6)、P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。

表3-1P3口的第二功能图

端口引脚

第二功能

P3.0

RXD(串行输入口)

P3.1

TXD(串行输出口)

P3.2

INT0(外中断0)

P3.3

INT1(外中断1)

P3.4

T0(定时/计时器0外部输入)

P3.5

T1(定时/计时器1外部输入)

P3.6

WR(外部数据存储器写选通)

P3.7

RD(外部数据存储器读选通)

(7)、RST:

复位输入。

当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。

WDT溢出将使引脚输出高电平,设置SFRAUXR的DISRT0(地址8EH)可打开或关闭该功能。

DISRT0位缺省为RESET输出高电平打开状态。

(8)、ALE/PROG:

当访问外部程序存储器或数据存储器时,ALE(地址锁存器允许)输出脉冲用于锁存地址的低8位字节。

即使不访问外部存储器,ALE仍以时钟振荡频率的1/6输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。

要注意的是:

每当访问外部数据存储器时将跳过一个ALE脉冲。

(9)、XTAL1:

振荡器反相放大器及内部时钟发生器的输入端。

(10)、XTAL2:

振荡器反相放大器的输出端。

2、AT89C51单片机内部结构

看门狗(WDT):

WDT是一种需要软件控制的复位方式。

WDT由13位计数器和特殊功能寄存器中的看门狗定时器复位存储器(WDTRST)构成。

WDT在默认情况下无法工作;为了激活WDT,用户必须往WDTRST寄存器(地址:

0A6H)中依次写入01EH和0E1H。

当WDT激活后,晶振工作,WDT在每个机器周期都会增加。

WDT计时周期依赖于外部时钟频率。

除了复位(硬件复位或WDT溢出复位),没有办法停止WDT工作。

当WDT溢出,它将驱动RSR引脚输出一个高电平。

可编程串口(UART)在AT89C51中,UART的操作与AT89C51和AT89C52一样。

AT89C51系列单片机的串行通信口可以工作于同步和异步通信方式。

当工作于异步方式时,它具有全双工的操作功能,也就是说,它可以同时进行数据的发送和接收。

串行口内的接收器采用的是双缓冲结构,能够在接收到的第一个字节从接收寄存器读走之前就开始接收第二个字节(当然,如果第二个字节接收完毕,而第一个字节仍然没有被读走,那将会丢掉一个字节)。

串行口的发送和接收操作都是通过特殊功能寄存器中的数据缓冲寄存器SBUF进行的,但在SBUF的内部,接收寄存器和发送寄存器在物理结构上是完全独立的。

如果将数据写入SBUF,数据会被送入发送寄存器准备发送。

如果执行SBUF指令,则读出的数据一定来自接收缓存器。

因此,CPU对SBUF的读写,实际上是分别访问2个不同的寄存器。

这2个寄存器的功能决不能混淆。

振荡电路:

AT89C51系列单片机的内部振荡器,由一个单极反相器组成。

XTAL1反相器的输入,XTAL2为反相器的输出。

可以利用它内部的振荡器产生时钟,只要XTAL1和XTAL2引脚上一个晶体及电容组成的并联谐振电路,便构成一个完整的振荡信号发生器,此方式称为内部方式。

另一种方式由外部时钟源提供一个时钟信号到XTAL1端输入,而XTAL2端浮空。

在组成一个单片机应用系统时,多数采用这种方式,这种方式结构紧凑,成本低廉,可靠性高。

在电路中,对电容C1和C2的值要求不是很严格,如果使用高质的晶振,则不管频率为多少,C1、C2通常都选择30pF。

定时/计数器:

AT89C51单片机内含有2个16位的定时器/计数器。

当用于定时器方式时,定时器的输入来自内部时钟发生电路,每过一个机器周期,定时器加1,而一个机器周期包含有12个振荡周期,所以,定时器的技术频率为晶振频率的1/12,而计数频率最高为晶振频率的1/24。

为了实现定时和计数功能,定时器中含有3种基本的寄存器:

控制寄存器、方式寄存器和定时器/计数器。

控制寄存器是一个8位的寄存器,用于控制定时器的工作状态,方式寄存器是一个8位的寄存器,用于确定定时器的工作方式,定时器/计数器是16位的计数器,分为高字节和低字节两部分。

RAM:

高于7FH内部数据存储器的地址是8位的,也就是说其地址空间只有256字节,但内部RAM的寻址方式实际上可提供384字节。

的直接地址访问同一个存储空间,高于7FH的间接地址访问另一个存储空间。

这样,虽然高128字节区分与专用寄器,即特殊功能寄存器区的地址是重合的,但实际上它们是分开的。

究竟访问哪一区,存是通过不同的寻址方式加以区分的。

SFR:

SFR是具有特殊功能的所有寄存器的集合,共含有22个不同寄存器,它们的地址分配在80H~FFH中。

虽然如此,不是所有的单元都被特殊功能寄存器占用,未被占用的单元,其内容是不确定的。

如对这些单元进行读操作,得到的是一些随机数,而写入则无效,所以在编程时不应该将数据写入这些未确定的地址单元中,特殊功能寄存器主要有累加器ACC、B寄存器、程序状态字寄存器PSW、堆栈指针SP、数据指针DPTR、I/O端口、串行口数据缓冲器SBUF、定时器寄存器、捕捉寄存器、控制寄存器。

中断系统:

AT89C51单片机有6个中断源,中断系统主要由中断允许寄存器IE、中断优先级寄存器IP、优先级结构和一些逻辑门组成。

IE寄存器用于允许或禁止中断;IP寄存器用于确定中断源的优先级别;优先级结构用于执行中断源的优先排序;有关逻辑门用于输入中断请求信号。

在整个中断响应过程中CPU所执行的操作步骤如下:

(1)完成当前指令的操作

(2)将PC内容压入堆栈

(3)保存当前的中断状态

(4)阻止同级的中断请求

(5)将中断程序入口地址送PC寄存器

(6)执行中断服务程序

(7)返回

2.1.2MCS-51系列单片机的工作条件电路

MCS-51系列单片机的工作条件电路包括电源电路、时钟电路、复位电路;

1、电源电路:

其目的是为单片机提供电源电压,MCS-51系列单片机的电源引脚为Vcc在单片机的第40脚,本课题只采用仿真,直接用proteus自带的电源即可,在这里就不在多说。

2、时钟电路:

此电路的作用是为单片机提供12MHz时钟信号,是单片机有节奏的工作,它由两个谐振电容、一个晶振、和单片机内部的振荡电路构成,其电路如图2-3所示

图2-3时钟电路

3、复位电路:

其作用是使单片机回到初始状态,它由一个开关和一个上拉电阻构成,其电路如图2-4所示

图2-4复位电路

2.1.3DS1302

DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。

采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。

DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。

DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。

DS1302的引脚如图2-5所示

图2-5DS1302与单片机的连接图

Vcc2:

芯片主电源,其作用是为芯片提供电源电压。

Vcc1:

后备电源,其作用是在主电源关闭的情况下,也能保持时钟的连续运行。

X1和X2:

振荡源,外接32.768kHz晶振。

I/O:

串行数据输出端;

RST:

是复位/片选线,其作用有两个,

(1)RST接通控制逻辑,允许地址/命令序列送入移位寄存器;

(2)RST提供终止单字节或多字节数据的传送手段。

当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。

如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。

上电运行时,在Vcc≥2.5V之前,RST必须保持低电平。

只有在SCLK为低电平时,才能将RST置为高电平。

I/O为串行数据输入输出端(双向),后面有详细说明。

SCLK:

时钟是输入端,其作用是为芯片提供时钟信号。

2.1.4LCD1602显示电路

在此设计中其结果在1602液晶屏上显示出来,1602能显示16x2个字符,它的液晶芯片是HD44780,其芯片的引脚图如图2-6所示:

图2-6LCD1602的引脚图

1、各引脚的功能如下:

VSS:

电源地,即电源接地端;

VDD:

芯片电源端,为芯片提供电源电压,其工作电压可在4.5v~5.5v之间,通常为5v;

VEE:

背光灯电源,为1602液晶屏的背光灯提供电源,其电压与芯片的电源一样,可在4.5v~5.5v之间,通常为5v;

RS:

数据/指令选择端(H/L),通过控制该脚的电平,可选择是向芯片写入指令,还是向芯片写入数据;

RW:

读/写选择端(H/L),通过控制该脚的电平,可选择是向芯片传入指令数据或指令,还是从芯片中读取指令数据或指令;

E:

使能信号端,它的作用是为芯片提供使能信号;

D0~D7:

并行数据传送端;

2、LCD1602各引脚与单片机的连接如图2-7所示

图2-7LCD1602与单片机的连接

D0~D7数据端口连接在单片机的P0口,由于单片机的P0口是一组8位漏极开路型双向I/O口,所以需要在数据端口上接上拉电阻。

2.1.5调节电路

在该设计电路中,时间和日期的调节采用四个独立键盘构成,其原理和结构都非常简单在这里就不多做介绍,本系统它与单片机的连接如图2-8所示。

2-8独立按键与单片机的连接

图中K1为调节的“选择”即是调节时间、日期、还是星期;

K2为选择项目的“加”动作

K3为选择项目的“减”动作

K4为选择项目的“确定”动作和做加减动作的“确认”。

(K1接2.3口、K2接2.4口、K3接2.5口、K4接2.6口)

第三章系统的软件设计

该设计的软件采用模块化的设计方案,及各个硬件模块都对应相应的子程序,通过主函数调用各子函数和子函数之间的相互调用来完成电子万年历的功能。

3.1主程序

主程序主要完成独立键盘的扫描、液晶的初始化、1602送显等功能,其程序流程图如图3-1所示:

3-1主程序流程图

3.2LCD1602的驱动程序

1602分为两行显示,第一行显示DATE字符和当前的日期(年、月、日),第二行显示TIME字符和当前时间(时、分、秒)。

其程序流程图如图3-2所示:

图3-2LCD1602的驱动程序流程图

3.3DS1302的驱动程序

DS1302工作时为了对任何数据传送进行初始化,需要将复位脚(RST)置为高电平且将8位地址和命令信息装入移位寄存器。

数据在时钟(SCLK)的上升沿串行输入,前8位指定访问地址,命令字装入移位寄存器后,在之后的时钟周期,读操作时输出数据,写操作时输出数据。

时钟脉冲的个数在单字节方式下为8+8(8位地址+8位数据),在多字节方式下为8加最多可达248的数据。

图3-3DS1302的驱动程序流程图

第四章万年历的设计结论

本课题从理论到实际应用,用AT89C51单片机、DS1302、1602等一些电路的组合,成功的设计出了一个电子万年历。

而且所设计的电子万年历设计也按当初要求的能够在PROTEUS中进行仿真,并且能够很精确的显示年历。

可以说该电子万年历具有很高的实用价值。

4.1万年历工作原理

此系统由单片机主体电路、单片机工作条件电路、1602显示电路、时间条件电路、时钟芯片DS1302等几大部分组成,它具有年、月、日、星期、时、分、秒的显示功能,它的工作是是靠实时时钟DS1302这个芯片的强大功能来完成的,首先单片机通过程序设置,控制DS1302时钟芯片,从DS1302芯片读取数据处理后送1602显示,其显示的时间和日期可以通过按键来进行调整,这样可以使时间和日期更加的准确。

4.2万年历结构原理图

在软件设计的过程中,利用了Keil这个软件在程序录入和调试的时候的优越性,让我能够在编写软件的时候很方便的发现软件中的错误,现在已经能够使用Keil对所设计的程序进行调试。

对于PROTEUS这款软件,也能熟练掌握电路设计仿真。

由于平时没有接触过这两个软件,加上毕业设计的时间有限,对于他们的连接调试程序,未能熟练掌握,但以后有机会的话会再好好学习的。

本次设计的电子万年历也存在的不足的地方,有待于以后的改进。

 

致谢

经过三个多月的时间,毕业设计按照预期完成了,由于本人的知识水平有限,论文和设计中有遗漏和缺陷的地方恳请指正。

感谢我的导师龙舰涵老师给了我莫大的帮助,在他悉心的指导和严格的要求下,作品和论文顺利完成了。

论文从选题和最终完成,凝结着导师的辛勤的汗水,他不辞劳苦的教导、严谨的作风使我终生受益。

在此毕业设计完成之际,谨向导师和所有帮助过我的老师致以崇高的敬意和衷心的感谢。

还有感谢家人、朋友还有宿舍里所有的室友,是他们给我创造了良好的学习氛围,在学习和生活中给了我支持和帮助。

在以后的学习生活中我会时时敦促自己更加努力,不辜负师长、亲人、朋友对我的期望。

参考文献

[1]赵长德.微型计算机原理与接口技术[M].北京:

机械工业出版社,1999:

98-350.

[2]苏平.单片机的原理与接口技术[M].北京:

电子工业出版社,2006:

1-113.

[3]王忠民.微型计算机原理[M].西安:

西安科技大学出版社,2003:

15-55.

[4]胡戴明.计算机组成原理[M].北京:

经济科学出版社,2005:

43-56.

[5]纪宗南.单片机外围器件使用手册[M].北京:

北京航空航天大学出版社,622-655.

[6]周雪.模拟电子技术[M]西安:

西安电子科技大学出版社,2005:

81-95.

[7]左金生.电子与模拟电子技术[M].北京:

电子工业出版社,2004:

105-131.

[8]尹勇.单片机开发环境μVision2的开发指南[M].北京:

北京航空航天大学出版社,2004:

173-199.

[9]张斌武.单片机系统Proteus设计与仿真[M].北京:

电子工业出版社,2005:

52-89.

附录

附录【1】仿真图片

附录【2】程序代码

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitSDA=P1^0;//DS1302数据线

sbitCLK=P1^1;//DSB1302时钟线

sbitRST=P1^2;//DS1302复位线

sbitRS=P2^0;//LCD寄存器选择

sbitRW=P2^1;//LCD读/写控制

sbitEN=P2^2;//LCD启用

sbitK1=P2^3;//选择

sbitK2=P2^4;//加

sbitK3=P2^5;//减

sbitK4=P2^6;//确定

uchartCount=0;

//一年中每个月的天数,二月的天数由年份决定

ucharMonthsDays[]={0,31,0,31,30,31,30,31,31,30,31,30,31};

//周日,周一到周六{0,1-6}[读取DS1302时分别是1-7]

uchar*WEEK[]={"SUN","MON","TUS","WEN","THU","FRI","SAT"};

//LCD显示缓冲

ucharLCD_DSY_BUFFER1[]={"DATE00-00-00"};

ucharLCD_DSY_BUFFER2[]={"TIME00:

00:

00"};

ucharDateTime[7];//所读取的日期时间

charAdjust_Index=-1;//当前调节的时间对象:

秒,分,时,日,月,年(0,1,2,3,4,6)

ucharChange_Flag[]="-MHDM-Y";//(分,时,日,月,年)(不调节秒周)

//延时,向DS1302写、读一字节以及从DS1302指定位置度、写数据的程序

//延时----------------------------------------------------

voidDelayMS(uintx)

{

uchari;

while(x--)for(i=0;i<120;i++);

}

//向DS1302写入一个字节

voidWrite_A_Byte_TO_DS1302(ucharx)

{

uchari;

for(i=0;i<8;i++)

{

SDA=x&1;CLK=1;CLK=0;x>>=1;

}

}

//从DA1302读取一字节----------------------------------------

ucharGet_A_Byte_FROM_DS1302()

{

uchari,b,t;

for(i=0;i<8;i++)

{

b>>=1;t=SDA;b|=t<<7;CLK=1;CLK=0;

}

//BCD码转换

returnb/16*10+b%16;

}

//从DS1302指定的位置读数据---------------------------------------

ucharRead_Dat

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

当前位置:首页 > 解决方案 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1