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

上传人:逍*** 文档编号:186713497 上传时间:2021-07-20 格式:DOC 页数:10 大小:288.50KB
返回 下载 相关 举报
自-基于单片机的电子万年历的设计_第1页
第1页 / 共10页
自-基于单片机的电子万年历的设计_第2页
第2页 / 共10页
自-基于单片机的电子万年历的设计_第3页
第3页 / 共10页
自-基于单片机的电子万年历的设计_第4页
第4页 / 共10页
自-基于单片机的电子万年历的设计_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《自-基于单片机的电子万年历的设计》由会员分享,可在线阅读,更多相关《自-基于单片机的电子万年历的设计(10页珍藏版)》请在金锄头文库上搜索。

1、基于单片机的电子万年历的设计摘 要 本文以AT89C2051单片机为主控芯片,采用美国DALLAS公司的涓细充电时钟芯片DS1302为时钟控制芯片,设计了一个电子万年历,能够显示年、月、日、时、分、秒、星期信息。关键词 实时显示 AT89C2051 单片机目 录0、引言31、电子万年历的硬件电路设计32、主控制器AT89C205143、DSl302时钟芯片的工作原理43.1 引脚功能43.2 DSl302的控制字节43.3 DSl302的复位特征和时钟控制要求53.4 数据输入输出IO53.5 DSl302的寄存器54、DS1302与微控制器的连接及软件控制64.1 DSl302与AT89C2

2、051的连接64.2 软件控制64.3 根据在调试中出现的问题,作如下说明:95、总结90、引言日常生活生产中有许多地方需要电子时钟和日历,比如家庭,办公室,以及一些智能化仪表。目前的电子时钟日历系统多采用时钟芯片以简化系统的设计。DSl302是众多时钟芯片中一款性价比较高的产品。以AT89C2051单片机为主控芯片,采用美国DALLAS公司的实时时钟芯片DSl302为时钟控制芯片,设计并实现的各种时钟控制电路,应用于各种家电、实验设备等。其能够显示年、月、日、时、分、秒、星期。并且可根据需要对各个位进行调节。1、电子万年历的硬件电路设计硬件电路设计是电子时钟日历系统设计的第一步。系统由主控模

3、块,时钟芯片。显示电路、键盘扫描电路共四个部分组成,电路构成,框图如图l所示。图l 电子万年历系统的框架图主控芯片使用MCU-51系列的AT89C2051单片机,时钟芯片使用美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟DSl302。采用DSl302作为主要计时芯片,可以作到计时准确。更重要的是,DSl302可以在很小的后备电源(2.5-5.5V电源,在2.5V时耗电小于300Na)下继续计时,并可编程选择多种充电电源来对后备电源进行慢速充电,可以保证后备电源基本不耗电。显示电路采用普通的共阳极LED数码管,键输入采用独立式按键实现调整功能。2、主控制器AT89C2051AT

4、89C2051是一个有2k字节可编程EPROM的高性能的微控制器(Microchip).AT89C2051是一种功能强大的微控制器,它对很多嵌入式控制应用提供了一个高度灵活的有效的解决方案。它有以下特点:2k字节EPPROM、128字节RAM、15根I/O线、2个16位定时计数器、5个向量二级的中断结构、一个全双向的串行口、一个精密的模拟比较器、片内振荡器和时钟电路.3、DSl302时钟芯片的工作原理DSl302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟芯片,它可以对年、月、日、时、分、秒、星期等进行计时,且具有闰年补偿功能,工作电压范围2.05.5V。DSl302采用

5、三线接口与CPU进行同步通信,可一次传送一字节数据或采用突发方式一次传送最多达31字节的时钟数据或RAM数据。其内部有一个318的用于临时性存放数据的RAM寄存器。3.1 引脚功能DSl302的引脚如图1所示。VCC2为主电源供应引脚,VCCl连接在备份电源以便在没有主电源时保持正常走时和保存RAM中的数据。当VCC2大于VCCl+02V时,VCC2给DSl302供电,反之,由VCCl向DSl302供。X1、X2为外接32768KHz晶振引脚。SCLK为3线接口的时钟引脚。I/O为串行数据输入输出端(双向)引脚。GND共地引脚。RST是复位/片选线。图1 DSl302的引脚图3.2 DSl30

6、2的控制字节DSl302的一次数据传送是从发送控制字节开始的。DSl302的控制字节的最高有效位(位7)必须是逻辑l,如果它为0,则不能把数据写入到DSl302中;位6表示要读写的数据类型,如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示要操作单元的地址;最低有效位(位0) 表示命令类型,为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。3.3 DSl302的复位特征和时钟控制要求通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:RST接通控制逻辑,允许地址命令序列送入移位寄存器; RST提供了终止单字节或多字节数据的传送手段

7、。当RST为高电平时,所有的数据传送被初始化,允许对DSl302进行操作。如果在传送过程中置RST为低电平,则会终止此次数据传送,并且I/O引脚变为高阻态。上电运行时,在VCC25v之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。3.4 数据输入输出IO向DSl302写入数据时,数据在控制字节输入后的下一个SCLK周期的上升沿被写入,多余的SCLK将被忽略。数据写入时从低位(位0)开始;同样,从DS1302读取数据时,数据在紧跟控制字节后的下一个SCLK的下降沿读出 读出数据时也是从低位(位0)到高位(位7),只要RAT保持高电平,额外的SCLK将导致数据字节的持

8、续读出,这个特性用于实现该芯片的突发读模式。突发模式下,可以一次性读出所有日历时钟数据或RAM数据。3.5 DSl302的寄存器DSl302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字如表1所列。表1 DSl302的日历、时钟寄存器及其控制字此外,DSl302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。Dsl302与RAM相关的寄存器分为两类,一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0HFDH,其

9、中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。4、DS1302与微控制器的连接及软件控制4.1 DSl302与AT89C2051的连接DSl302与AT89C2051的连接仅需要三条线,即SCLK、I/O、RST。如图2所示,其中时钟的显示用LCD显示。图2 DSl302与CPU的电路连接4.2 软件控制DSl302的实时时间流程图如图3所示。图3 DSl302的实时时间流程图下面结合流程图对DSl302基本操作进行编程:# include “Intrinsh”sbit t_clk=P33;

10、sbit t_io=P34;sbit t_rst=P35;sbit BIT7=ACC7;sbit BITO=ACCO;void inputbyte(unsigned char ucda)/八位数据写入函数unsigned char i;ACC=ucda;/将要写入的数放入ACCt_rst=l;/启动数据传送for(i=8;i0;i-)/循环八次,写入八位数据,从低位到高位t_io=BIT0;/将Accn0的值赋给时钟数据线t_clk=0;t_clk=l;/在时钟线的上升沿写入一位数据ACC=ACC1;/将高一位数据移至ACC“0unsigned char outputbyte(void)/八位

11、数据读出函数unsigned char i;t_rst-1;/启动数据传送for(i=8;i0;i一)/读出八位数据,从低位到高位ACC=ACC1;/将前一下降沿读出的数据右移一位,从而该次读出的数放入ACC7t_io=l;P1口输入之前置lt_clk=l;t_clk=0;/时钟线下降沿读出一位数据BIT7=t_io;/can not use P17=t_io for P17 not a varientreturn(ACC);/将指令或数据写入对应寄存器void wr_l302(unsigned char add,unsigned char ucda)t_rst=0;t_clk=O;t_rst

12、=l;inputbyte(add);/delayl5(1);inputbyte(ucda);t_rst=O;t_io=l;unsigned char re_1302(unsigned char add)/读出对应寄存器内容unsigned char ucda;t_rst=0;t_clk=0;t_rst =1;inputbyte(add);/delayl5(1);ucda=outputbyte();t_rst=0;return(ucda);void setl302(unsigned char *pda)/设置时间初值unsigned char i;unsigned char add=0x80;w

13、r_1302(0x8e,Ox00);/将控制寄存器值设为零,最高位WP=0允许写for(i=7;i0;i-)/将七个时问初值写入对应寄存器wr_1302(add,*pda);/写对应时钟寄存器的值pda+;add+=2;wr_1302(0x8e,0x80);/写保护,防止干扰影响时间值void get_l302(unsigned char curtilne)/读取当前时间值unsigned char i,j;unsigned char add=Ox8l;bdata unsigned char sec;for(i=0;i4;/将BCD码转化成对应十进制数j*=10;sec=sec0xOf;sec

14、+=j;cuItinlei=sec;add+=2;4.3 根据在调试中出现的问题,作如下说明:(1)DSl302与微处理器作数据交换时,首先由微处理器向芯片发送命令字节,命令字节最高位MSB(D7)必须为逻辑1,如果D7=0,则禁止写DSl302,即写保护;D6=0,指定时钟数据,D6=1,指定RAM数据;D5D1指定输入或输出的特定寄存器;最低位LSB(D0)为逻辑0,指定写操作(输入),D0=1,指定读操作(输出)。(2)在DSl302的时钟日历或RAM进行数据传送时,DSl302必须首先发送命令字节。若进行单字节传送,8位命令字节传送结束之后,在下2个SCLK周期的上升沿输入数据字节,或在下8个SCLK周期的下降沿输出数据字节。(3)要特别说明的是备用电源B1,可以用电池或者超级电容(01F以上)。虽然DSl302在主电源掉电后,耗电很小,但如果要保证时钟长时间正常,最好选用小型充电电池。可以用老式电脑主板上的36v充电电池。如果断电时间较短(几小时或几天)时,就可以用漏电较小的普通电解电容代替。100心就可以保证l小时的正常走时。DSl302在第一次加电后,须进行初始化操作。初始化后就可以按正常方法调整时间。5、总结D

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 社会学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号