当前位置:文档之家› 简易万年历论文

简易万年历论文

基于单片机简易万年历的设计

设 计 项 目: 单片机简易万年历的设计 专 业: 电子信息工程技术 年 级: 11级

2012年12月08日

姓名:陈 伟 锋

E _ mail :

943485595@https://www.doczj.com/doc/ed17397944.html,

摘要

本文借助电路仿真软件Protues对基于AT89S51单片机的电子万年历的设计方法及仿真进行了全面的阐述。该电子万年历在硬件方面主要采用AT89C51单片机作为主控核心,由DS1302时钟芯片提供时钟、数码管显示屏显示、按键电路、和复位电路等部分构成,能实现时钟日历显示的功能,能进行年、月、日、时、分、秒的显示。所有程序编写完成后,在Keil软件中进行调试,确定没有问题后,在Proteus 软件中嵌入单片机内进行仿真。

论文主要研究了数码管显示及时钟芯片DS1302,74HC154单片机之间的硬件互联及通信,对各种硬件连接方案进行了详尽的比较,在软件方面对日历算法也进行了论述。

研究结果表明,由于万年历的应用相当普遍,所以其设计的核心在于硬件成本的节约软件算法的优化,力求做到物美价廉,才能拥有更广阔的市场前景。

关键词:单片机;DS1302;7SEG、74HC154

目录

摘要 (Ⅲ)

绪论........................................................................................................错误!未定义书签。

第一章系统基本方案选择和论证.......................................................错误!未定义书签。

第一节系统基本方案选择和论证 (2)

1.1统设计方案及分析 (2)

1.2单片机芯片的选择 (2)

1.3 显示模块选择方案和论证 (2)

1.4 时钟芯片的选择方案和论证 (2)

第二章电路设计最终方案决定 (3)

第三章系统的硬件电路设计 (3)

3.1 电路设计框图......................................

错误!未定义书签。

3.2 逻辑总框图.........................................

错误!未定义书签。

3.3系统硬件概述 (4)

(1)单片机主控制模块的设计 (4)

(2)时钟芯片DS1302 (6)

3.4调整时间程序设计 (9)

3.5复位电路选择 (10)

3.6主要显示单元电路的设计 (10)

3.7 系统硬件设计所需的器材 (11)

第四章系统的软件设计....................................................................错误!未定义书签。

第一节程序流程总框图...............................错误!未定义书签。

第二节部分程序设计 (15)

第五章系统测试 (16)

5.1 硬件测试........................................错

误!未定义书签。

5.2 软件测试........................................错

误!未定义书签。

第六章结论、展望和总结 (20)

致谢词 (21)

参考文献 (22)

附录:仿真图、程序.....................................错误!未定义书签。

绪论

随着人们生活水平的提高和生活节奏的加快,对时间的要求越来越高,精准数字计时的消费需求也是越来越多。

二十一世纪的今天,最具代表性的计时产品就是电子时钟,它是近代世界钟表业界的第三次革命。第一次是摆和摆轮游丝的发明,相对稳定的机械振荡频率源使钟表的走时差从分级缩小到秒级,代表性的产品就是带有摆或摆轮游丝的机械钟或表。第二次革命是石英晶体振荡器的应用,发明了走时精度更高的石英电子钟表,使钟表的走时月差从分级缩小到秒级。第三次革命就是单片机数码计时技术的应用,使计时产品的走时日差从分级缩小到1/600万秒,从原有传统指针计时的方式发展为人们日常更为熟悉的夜光数字显示方式,直观明了,并增加了全自动日期、星期的显示功能,它更符合消费者的生活需求!因此,电子时钟的出现带来了钟表计时业界跨跃性的进步……

我国生产的电子时钟有很多种,总体上来说以研究多功能电子时钟为主,使万年历除了原有的显示时间,日期等基本功能外,还具有闹铃,报警等功能。商家生产的电子万年历更从质量,价格,实用上考虑,不断的改进电子时钟的设计,使其更加的具有市场。

本设计为软件,硬件相结合的一组设计。在软件设计过程中,应对硬件部分有相关了解,这样有助于对设计题目的更深了解,有助于软件设计。基本的要了解一些主要器件的基本功能和作用。

除了采用集成化的时钟芯片外,还有采用MCU的方案,利用STC89系列单片微机制成电子电路,采用软件和硬件结合的方法,控制LED数码管输出,分别用来显示年、月、日、时、分、秒,其最大特点是:硬件电路简单,安装方便易于实现,软件设计独特,可靠。文介绍了基于STC89C52RC单片机设计的电子时钟。

首先我们在绪论中简单介绍了单片机的发展与其在中低端

领域中的优势以及课题的开发意义;接着介绍了STC89C52RC单片机的硬件结构和本毕业设计所要外扩的LED显示及其驱动方

法,并在此基础上实现了时钟基本电路的设计;然后使用单片机C语言进行时钟程序的设计,程序采用模块化结构,使得逻辑关系简单明了,维护方便。

第一章系统基本方案选择和论证

1.1系统设计方案及分析

(1)具有年、月、日、星期、时、分、秒显示并能进行断电自动保存等功能;

(2)能对时间进行调整设定;

1.2 单片机芯片的选择

本设计采用AT89S51芯片作为硬件核心,该芯片内部具有4KB ROM存储空间,相对于本设计而言程序空间完全够用。能在3.6V的超低压工作,而且与MCS-51系列单片机完全兼容。

1.3 显示模块选择方案和论证

方案一:

采用排阵式数码管显示,对于显示文字比较适合。

方案二:

采用LED数码管动态扫描,LED数码管价格虽适中,对于显示数字也最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少。

方案三:

采用数码管显示屏,数码管的主要特点就是发光响应时间极短(<0.1μs),高频特性好,单色性好,亮度高、体积小,重量轻,抗冲击性能好。因此它被广泛用作数字仪器仪表、数控装置、计算机的数显器件。

1.4 时钟芯片的选择方案和论证

方案一:

直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然可以减少时钟芯片的使用,节约成本,但是,实现的时间误差比较小。所以不采用此方案。

方案二:

采用DS1302时钟芯片实现时钟,DS130是一种高性能、低功耗的实时时钟电路,它可以对年、月、日、日、时、分、秒进行计时,工作电压为2.5V~5.5V。因此,本设计中采用DS1302提供时钟。

第二章电路设计最终方案决定

综上各模块的选择方案与论证,确定最后的主要硬件资源如下:采用AT89S51作为主控制系统、DS1302提供时钟、74HC154作为传输、LED数码管动态扫描作为显示为显示。

第三章系统硬件电路设计

3.1图1所示为电子万年历电路设计原理图,系统由主控制器AT89C51、时钟电路DS1302、显示驱动74HC154电路,显示电路及键扫描电路组成。

图1万年历电路原理图

3.2逻辑总框图:

3.3系统硬件概述

(1)单片机主控制模块的设计 1. 主控制器STC89C52RC

AT89S52单片机为40引脚双列直插芯片,有四个I/O 口P0,P1,P2,P3, MCS-51单片机共有4个8位的I/O 口(P0、P1、P2、P3),每一条I/O 线都能独立地作输出或输入。

STC89C52RC 单片机是宏晶科技推出的新一代高速、低功耗、超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟、机器周期和6时钟、机器周期可以任意选择。

单片机的最小系统如下图所示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出.第9引脚为复位输入端,接

上电容,电阻及开关后够

AT89C51 单 片 机 主控系统模块

开 关 控制 模块

数码管 显示模块

DS1302 时钟模块

复位 电

上电复位电路,20引脚为接地端,40引脚为电源端. 如图-1 所示

如图-1 AT89C51

AT89S51具有PDIP,TQFP和PLCC三种封装形式。上图就是PDIP 封装的引脚排列,有40个引脚,32个外部双向输入/输出(I/O)端口;具有两个16位可编程定时器;中断系统是具有6个中断源、5个中断矢量、2级中断优先级的中断结构;震荡器频率0到33MHZ,因此我们在此选用12MHZ的晶振是比较合理的;具有片内看门狗定时器;具有断电标志POF等等。

P0口可作为通用I/O口,但须外接上拉电阻;

作为输出口,每各引脚可吸收8各TTL的灌电流。作为输入时,首先应将引脚置1。P0也可用做访问外部程序存储器和数据存储器时的低8位地址/数据总线的复用线。在该模式下,P0口含有内部上拉电阻。在FLASH编程时,P0口接收代码字节数据;在编程效验时,P0口输出代码字节数据(需要外接上拉电阻)。

P1口:8位、双向I/0口,内部含有上拉电阻。

P1口可作普通I/O口。输出缓冲器可驱动四个TTL负载;用作输入时,先将引脚置1,由片内上拉电阻将其抬到高电平。P1口的引

脚可由外部负载拉到低电平,通过上拉电阻提供电流。

P2口:具有内部上拉电阻的8位双向I/O口。

P2口用做输出口时,可驱动4各TTL负载;用做输入口时,先将引脚置1,由内部上拉电阻将其提高到高电平。若负载为低电平,则通过内部上拉电阻向外部输出电流。

CPU访问外部16位地址的存储器时,P2口提供高8位地址。当CPU用8位地址寻址外部存储时,P2口为P2特殊功能寄存器的内容。P3口:具有内部上拉电阻的8位双向口。

P3口用做输出口时,输出缓冲器可吸收4各TTL的灌电流;用做输入口时,首先将引脚置1,由内部上拉电阻抬位高电平。若外部的负载是低电平,则通过内部上拉电阻向输出电流。

P3口除了通用I/O口功能外,还有替代功能如表2-1所示。

表2-1 P3口的第二功能

端口引

各个功能

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(外部数据存储器读选通信号输出端,

低电平有效)

(2)、时钟芯片DS1302

1.DS1302的结构及工作原理

<1>DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电)路,DS1302可以增加主电源/后背电源双电源引脚,同时提供了对后背

电源进行涓细电流充电的功能。

引脚功能及结构

图中所示出DS1302 的引脚排列,其中Vcc1 为后备电源,VCC2 为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302 由Vcc1 或Vcc2 两者中的较大者供电。当Vcc2 大于Vcc1+0.2V 时,Vcc2 给DS1302供电。当Vcc2 小于Vcc1 时,DS1302 由Vcc1 供电。

DS1302在任何数据传送时必须先初始化,把RST脚置为高电平,然后把8

位地址和命令字装入移位寄存器,数据在SCLK的上升沿被访问到。在开始8个

时钟周期,把命令字节装入移位寄存器后,另外的时钟周期在读操作时输出数据,

在写操作时写入数据。时钟脉冲的个数在单字节方式下为8+8,在多字节方式下

为8+字节数,最大可达248字节数。如果在传送过程中置RST脚为低电平,则

会终止本次数据传送,并且I/O引脚变为高阻态。上电运行时,在Vcc≥2.5V

之前,RST脚必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电

平。

为了提高对32个地址寻址能力(地址/命令位1~5=逻辑1),可以把时钟/

日历或RAM寄存器规定为多字节(burst)方式。位6规定时钟或RAM,而位0

规定读或写。在时钟/日历寄存器中的地址9~31或RAM寄存器中的地址31不能

存储数据。在多字节方式下,读或写从地址0的位0开始。必须按数据传送的次

序写最先的8个寄存器。但是,当以多字节方式写RAM时,为了传送数据不必写

所有的31字节,不管是否谢了全部31字节,所写的每一字节都将传送至RAM。

表2.1 DS1302控制字

DS1302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。其日历、时间寄存器及其控制字如上表所示,其中奇数为读操作,偶数为写操作。

DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置“0”,接着把RST端置“1”,最后才给予SCLK脉冲;读/写时序如下图4所示。图5为DS1302的控制字,此控制字的位7必须置1,若为0则不能把对DS1302进行读写数据。对于位6,若对程序进行读/写时RAM=1,对时间进行读/写时,CK=0。位1至位5指操作单元的地址。位0是读/写操作位,进行读操作时,该位为1;该位为0则表示进行的是写操作。控制字节总是从最低位开始输入/输出的。表6为DS1302的日历、时间寄存器内容:“CH”是时钟暂停标志位,当该位为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位为0时,时钟开始运行。“WP”

是写保护位,在任何的对时钟和RAM的写操作之前,WP必须为0。当“WP”为1时,写保护位防止对任一寄存器的写操作。

<2>数据输入输出(I/O)

在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK 脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。如下图-4所示

图-4 DS1302读/写时序图

<3> DS1302的寄存器

DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表-2。

表-2 DS1302的日历、时间寄存器

此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。

DS1302的晶振选用32768Hz。如图-2所示

如图二 DS1302时钟模块

3.4调整时间程序设计

调整时间用三个调整按钮,一个作为设置时间,分别定义为加按钮,减按钮,设置钮,还有两个作为加,减用在调整时间过程中要调整的位与别的位应该有区

别。按键电路的连接如图-3所示:

图-3 按键电路连接

3.5复位电路的选择

复位是单片机的初始化操作。单片机启运运行时,都需要先复位,其作用是使CPU和系统中其他部件处于一个确定的初始状态,并从这个状态开始工作。因而,复位是一个很重要的操作方式。但单片机本身是不能自动进行复位的,必须配合相应的外部电路才能实现。

复位电路的基本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。如图-4所示

如图-4 RC复位电路

3.6主要显示单元电路的设计

显示部分采用普通的共阴数码管显示,采用动态扫描,以减少硬件电路。考

虑到一次扫描15位数码管显示时会出现闪烁情况,故采用动态扫描,可将数码

管数量减少至8位,显示时采用串行口输出段码。如图-5所示

图-五数码管

3.7系统硬件设计所需的器材

AT89S51芯片 1个

74HC154芯片 1个

数码管显示器 7个

DS1302 1个

LED 4个

开关 4个

电阻 10 K 1个

100K 2个

导线若干

排阻 1个

晶振 12M 1个

32768K 1个

电容 30pF 2个

点解电容 22uF 1个

第四章、电子万年历软件设计一、(1)程序流程总框图

图(1)程序流程总框图

(2)阳历程序流程图

图(2)阳历流程图

开始

初始化

读、写日期、时间

分离日期时间 显示值

显示子程序

日期、时间修改

子程序 返回

(3)、时间调整程序流程图

图(3)时间调整程序流程图

二、部分程序的设计

(1)、用AT89C51模拟DS1302发送控制字的时序过程Void write_byte(uchar cmd)

{

uchar i=0;

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

DS_IO=(cmd&1);

DS_sclk=0;

_nop_( ),_nop_( );

DS_SCLK=1;

_NOP_( ),_NOP_( );

Cmd>>=1;

}

}

(2)、用AT89C51模拟DS1302读取单字节数据的时序过程uchar read_byte(void)

{

uchar i=0;

uchar dat=0;

uchar tmp=0;

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

{

DS_SCLK=1;

_nop_( ),_nop_( );

DS_SCLK=0;

_nop_( ),_nop_( );

tmp=DS_IO;

dat>>=1;

dat|=(tmp<<7);

}

return(dat);

}

(3)、用AT89C51模拟DS1302读取单字节数据的完整时序

uchar read_ds1302(uchar addr)

{

uchar tmp;

DS_rst=0;

DS_sclk=0;

DS_rst=1;

write_byte(addr);

tmp=read_byte();

DS_SCLK=0;

DS_RST=0;

Return(tmp);

}

(4)、用AT89C51模拟DS1302写单字节数据的完整时序(包括控制字) Void write_ds1302( uchar addr, uchar dat)

{

uchar tmp =0;

tmp=dat;

DS_RST=0;

DS_SCLK=0;

DS_RST=1;

write_byte(addr);

write _byte(tmp);

DS_SCLK=0;

相关主题
文本预览
相关文档 最新文档