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

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1基于单片机的电子万年历的设计摘要本文以AT89C2051单片机为主控芯片,采用美国DALLAS公司的涓细充电时钟芯片DS1302为时钟控制芯片,设计了一个电子万年历,能够显示年、月、日、时、分、秒、星期信息。关键词实时显示AT89C2051单片机2目录0、引言............................................................................................................................................31、电子万年历的硬件电路设计.....................................................................................................32、主控制器AT89C2051................................................................................................................33、DSl302时钟芯片的工作原理...................................................................................................43.1引脚功能...........................................................................................................................43.2DSl302的控制字节...........................................................................................................43.3DSl302的复位特征和时钟控制要求...............................................................................43.4数据输入输出I/O..........................................................................................................53.5DSl302的寄存器...............................................................................................................54、DS1302与微控制器的连接及软件控制...................................................................................54.1DSl302与AT89C2051的连接..........................................................................................54.2软件控制...........................................................................................................................64.3根据在调试中出现的问题,作如下说明:....................................................................95、总结............................................................................................................................................930、引言日常生活生产中有许多地方需要电子时钟和日历,比如家庭,办公室,以及一些智能化仪表。目前的电子时钟日历系统多采用时钟芯片以简化系统的设计。DSl302是众多时钟芯片中一款性价比较高的产品。以AT89C2051单片机为主控芯片,采用美国DALLAS公司的实时时钟芯片DSl302为时钟控制芯片,设计并实现的各种时钟控制电路,应用于各种家电、实验设备等。其能够显示年、月、日、时、分、秒、星期。并且可根据需要对各个位进行调节。1、电子万年历的硬件电路设计硬件电路设计是电子时钟日历系统设计的第一步。系统由主控模块,时钟芯片。显示电路、键盘扫描电路共四个部分组成,电路构成,框图如图l所示。图l电子万年历系统的框架图主控芯片使用MCU-51系列的AT89C2051单片机,时钟芯片使用美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟DSl302。采用DSl302作为主要计时芯片,可以作到计时准确。更重要的是,DSl302可以在很小的后备电源(2.5-5.5V电源,在2.5V时耗电小于300Na)下继续计时,并可编程选择多种充电电源来对后备电源进行慢速充电,可以保证后备电源基本不耗电。显示电路采用普通的共阳极LED数码管,键输入采用独立式按键实现调整功能。2、主控制器AT89C2051AT89C2051是一个有2k字节可编程EPROM的高性能的微控制器(Microchip).AT89C2051是一种功能强大的微控制器,它对很多嵌入式控制应用提供了一个高度灵活的有效的解决方案。它有以下特点:2k字节EPPROM、128字节RAM、15根I/O线、2个16位定时/计数器、5个向量二级的中断结构、一个全双向的串行口、一个精密的模拟比较器、片内振荡器和时钟电路.43、DSl302时钟芯片的工作原理DSl302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟芯片,它可以对年、月、日、时、分、秒、星期等进行计时,且具有闰年补偿功能,工作电压范围2.0~5.5V。DSl302采用三线接口与CPU进行同步通信,可一次传送一字节数据或采用突发方式一次传送最多达31字节的时钟数据或RAM数据。其内部有一个31×8的用于临时性存放数据的RAM寄存器。3.1引脚功能DSl302的引脚如图1所示。VCC2为主电源供应引脚,VCCl连接在备份电源以便在没有主电源时保持正常走时和保存RAM中的数据。当VCC2大于VCCl+0.2V时,VCC2给DSl302供电,反之,由VCCl向DSl302供。X1、X2为外接32.768KHz晶振引脚。SCLK为3线接口的时钟引脚。I/O为串行数据输入输出端(双向)引脚。GND共地引脚。RST是复位/片选线。图1DSl302的引脚图3.2DSl302的控制字节DSl302的一次数据传送是从发送控制字节开始的。DSl302的控制字节的最高有效位(位7)必须是逻辑l,如果它为0,则不能把数据写入到DSl302中;位6表示要读写的数据类型,如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示要操作单元的地址;最低有效位(位0)表示命令类型,为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。3.3DSl302的复位特征和时钟控制要求通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:①RST接通控制逻辑,允许地址/命令序列送入移位寄存器;②RST提供了终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DSl302进行操作。如果在传送过程中置RST为低电平,则会终止此次数据传送,并且I/O引脚变为高阻态。上电运行时,在VCC≥2.5v之前,RST必须保持低电平。只有在SCLK为低5电平时,才能将RST置为高电平。3.4数据输入输出I/O向DSl302写入数据时,数据在控制字节输入后的下一个SCLK周期的上升沿被写入,多余的SCLK将被忽略。数据写入时从低位(位0)开始;同样,从DS1302读取数据时,数据在紧跟控制字节后的下一个SCLK的下降沿读出读出数据时也是从低位(位0)到高位(位7),只要RAT保持高电平,额外的SCLK将导致数据字节的持续读出,这个特性用于实现该芯片的突发读模式。突发模式下,可以一次性读出所有日历时钟数据或RAM数据。3.5DSl302的寄存器DSl302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字如表1所列。表1DSl302的日历、时钟寄存器及其控制字此外,DSl302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。Dsl302与RAM相关的寄存器分为两类,一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。4、DS1302与微控制器的连接及软件控制4.1DSl302与AT89C2051的连接DSl302与AT89C2051的连接仅需要三条线,即SCLK、I/O、RST。如图2所示,其中时钟的显示用LCD显示。6图2DSl302与CPU的电路连接4.2软件控制DSl302的实时时间流程图如图3所示。7图3DSl302的实时时间流程图下面结合流程图对DSl302基本操作进行编程:#include“Intrins.h”sbitt_clk=P3^3;sbitt_io=P3^4;sbitt_rst=P3^5;sbitBIT7=ACC^7;sbitBITO=ACC^O;voidinputbyte(unsignedcharucda)//八位数据写入函数{unsignedchari;ACC=ucda;//将要写入的数放入ACCt_rst=l;//启动数据传送for(i=8;i0;i--)//循环八次,写入八位数据,从低位到高位{t_io=BIT0;//将Accn0的值赋给时钟数据线t_clk=0;t_clk=l;;;//在时钟线的上升沿写入一位数据ACC=ACC1;//将高一位数据移至ACC“0}}unsignedcharoutputbyte(void)//八位数据读出函数{unsignedchari;t_rst-1;//启动数据传送8for(i=8;i0;i一)//读出八位数据,从低位到高位{ACC=ACC1;//将前一下降沿读出的数据右移一位,从而该次读出的数放入ACC^7t_io=l;P1口输入之前置lt_clk=l;t_clk=0;;;//时钟线下降沿读出一位数据BIT7=t_io;//cannotuseP1^7=t_ioforP1^7notavarient}return(ACC);}//将指令或数据写入对应寄存器voidwr_l302(unsignedcharadd,unsignedcharucda){t_rst=0;t_clk=O;t_rst=l;;;inputbyte(add);//delayl5(1);inputbyte(ucda);t_rst=O;t_io=l;}unsignedcharre_1302(unsignedcharadd)//读出对应寄存器内容{unsignedcharucda;t_rst=0;t_clk=0;t_rst=1;;;inputbyte(add);//delayl5(1);ucda=outputbyte();t_rst=0;re

1 / 10
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功