项目12简易万年历分析_第1页
项目12简易万年历分析_第2页
项目12简易万年历分析_第3页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、工程12简易万年历学习目标1、 通过对万年历的设计,进一步熟练掌握单片机编程的方法和思想;2、 通过对万年历的设计,掌握时钟芯片DS1302的使用方法;3、 通过对万年历的设计,增强对单片机的兴趣及动手能力, 并在此过程中学会对程序的 逐步调试;工程导入t:Stc89c51图1总体框架图8位8段数码管作为显利用DS1302芯片进行计时,并且可以与单片机进行数据交换;示局部。相关知识DS1302是DALLAS公司推出的涓流充电时钟芯片,内含有一个实时时钟、日历和 31字 节静态RAM,通过简单的串行接口与单片机进行通信实时时钟/日历电路。提供秒分时日日,仅需用期?月年的信息,每月的天数和闰年的天

2、数可自动调整时钟操作可通过AM/PM指示决定采用 24或12小时格式。DS1302与单片机之间能简单地米用同步串行的方式进行通信到三个口线:1-RES复位,2-I/O数据线,3-SCLK串行时钟。时钟/RAM的读/写数据以一 个字节或多 达31个字节的字符组方式通信。DS1302应用原理图如图2所示:GNDvccS1 mAI I1%ll 1Il J 节Y1If7 pdJ扌of P3.64* PJRST图2DS1302原理图各引脚功能如下:Vcc1 :主电源;Vcc2 :备份电源。当 Vcc2Vcc1+0.2V 时,由 Vcc2 向 DS1302 供电,当 Vcc2 Vcc1 时,由Vcc1向D

3、S1302供电;SCLK :串行时钟,输入,控制数据的输入与输出;I/O:三线接口时的双向数据线;CE :输入信号,在读、写数据期间,必须为高。该引脚有两个功能:第一,CE开始控制字访问移位存放器的控制逻辑;其次,CE提供结束单字节或多字节数据传输的方法。表-1 DS1302管脚X1 X232.758KHZ晶振管脚GND地RST复位I/O数据输入/输出引脚SCLK串行时钟Vcc1 Vcc2电源供电管脚(1)时钟芯片DS1302的工作原理:DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置 “ C接着把RST端置“1最后才给予SCLK脉冲;读/写时序如下列图所示。为DS1302的控

4、制字,此控制字的位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时,写保护位防止对任一存放器的写操作。DS1302的

5、控制字节DS1302的控制字如表-1所示。控制字节的高有效位位7必须是逻辑1 ,如果它为0,那么不能把数据写入 DS1302中,位6如果0,那么表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位位0如为0表示要进行写操作,为3数据输入输出I/O在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入1表示进行读操作,控制字节总是从最低位开始输出8位的控制指令字后的下一个SCLK脉冲的下降沿读出从低位即位0开始。同样,在紧跟DS1302的数据,读出数据时从低位0位到高位7。如下列图1所示単字节谀d5CJUE.小TLrJ bJJTLTL

6、T VI/OAO-A2A3MDID2年字节写h.i b| “ u I m_rJ1/3/MJALA2A3A4丄乂。ClDZ图3DS1302读/写时序图DS1302的存放器BCDDS1302有12个存放器,其中有 7个存放器与日历、时钟相关,存放的数据位为码形式,其日历、时间存放器及其控制字见表-3。表-3 DS1302的日历、时间存放器写寄存器读寄存器Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit080H81HCH10秒秒82H83H10分分84H85H12 / 24010时时AM /PM86H87H0010日日88H89H00010月月8AH8BH00000星期8CH8DH10

7、年年8EH8FHWP0000000此外,DS1302还有年份存放器、控制存放器、充电存放器、时钟突发存放器及与RAM相关的存放器等。时钟突发存放器可一次性顺序读写除充电存放器外的所有存放器内容。DS1302与RAM相关的存放器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为COH- FDH其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM存放器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH 写、FFH 读。任务实施1硬件设计工作原理最根本局部是利用DS1302芯片的时钟功能,单片机只需要给DS1302初值,然后不断的从DS130

8、2中读取数据并在数码管中显示,减少了单片机内部资源的占用卜narkTT图4系统硬件原理图(2)软件设计程序文件1 : / 1)-DS1302.H#ifndef DS1302 H #define DS1302 H/-包含头文件-/#in clude#in clude/-重定义关键词-/#if ndef uchar#defi ne uchar un sig ned char#en dif#if ndef uint#defi ne uint un sig ned int#en dif/-定义 ds1302 使用的 10 口 -/sbit DSIO=P3 A4;sbit RST=P3A5;sbit S

9、CLK=P3A6;/- 定义全局函数 -/void Ds1302Write(uchar addr, uchar dat); uchar Ds1302Read(uchar addr);void Ds1302Init();void Ds1302ReadTime();/- 参加全局变量 -/ extern uchar TIME7; / 参加全局变量#endif程序文件 2 :/ 2)-DS1302.c#includeds1302.h/-DS1302 写入和读取时分秒的地址命令-/- 秒分时日月周年 最低位读写位 ; /uchar codeuchar code READ_RTC_ADDR7 = 0x8

10、1, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d; WRITE_RTC_ADDR7 = 0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c;-/-DS1302 时钟初始化 2021 年 1 月 1 日星期二 12 点 00 分 00 秒。 - - 存储顺序是秒分时日月周年 ,存储格式是用 BCD 码 -/ uchar TIME7 = 0, 0, 0x12, 0x01, 0x01, 0x02, 0x13;* 函 数 名: Ds1302Write* 函数功能: 向 DS1302 命令地址 +数据* 输 入: addr , dat* 输 出:

11、无*void Ds1302Write(uchar addr , uchar dat) uchar n;RST = 0;_nop_();SCLK = 0;/先将SCLK置低电平 _nop_();RST = 1; /然后将RST(CE置高电平 _nop_();for (n=0; n= 1;SCLK = 1;/数据在上升沿时,DS1302读取数据_nop_(); SCLK = 0;_nop_();for (n=0; *8; n+)/ 写入 8 位数据DSIO = dat & 0x01;dat = 1;SCLK = 1;/数据在上升沿时,DS1302读取数据_nop_();SCLK = 0;_nop_

12、();RST = 0;/传送数据结束_nop_();* 函数名:Ds1302Read*函数功能:读取一个地址的数据*输入:addr*输出:dat* /uchar Ds1302Read(uchar addr)uchar n ,dat,dat1;RST = 0;_nop_();SCLK = 0;/先将SCLK置低电平。_nop_();RST = 1;/然后将RST(CE置高电平。_nop_();for(n=0; *8; n+)/ 开始传送八位地址命令DSIO = addr & 0x01 ;/数据从低位开始传送 addr = 1; SCLK = 1;/数据在上升沿时,DS 1 302读取数据_nop

13、_();SCLK = 0;/DS1302 下降沿时,放置数据_nop_();_nop_();for(n=0; *8; n+) 读取 8 位数据datl = DSIO;/从最低位开始接收dat = (dat1) | (dat17);SCLK = 1;_nop_();SCLK = 0;/DS1302 下降沿时,放置数据 _nop_();RST = 0;_nop_(); /以下为DS1302复位的稳定时间,必须的SCLK = 1;_nop_();DSIO = 0;_nop_();DSIO = 1;_nop_();return dat;*函数名Ds1302l nit函数功能初始化DS1302*void

14、 Ds1302l nit()uchar n;Ds1302Write(0x8E,0X00);/禁止写保护,就是关闭写保护功能for (n=0; *7; n+) 写入7个字节的时钟信号:分秒时日月周年Ds1302Write(WRITE_RTC_ADDR n,TIME n );/翻开写保护功能Ds1302Write(0x8E,0x80);*函数名函Ds1302ReadTime数功能输读取时钟信息*/void Ds1302ReadTime()uchar n;for (n=0; *7; n+) 读取7个字节的时钟信号:分秒时日月周年TIME n = Ds1302Read(READ_RTC_ADDR n)

15、;程序文件3 :/ 2)-mai n.c*实验名:DS1302时钟显示试验*实验说明:数码管显示时钟信息*连接方式:见连接图*注意:*#in clude#i ncludeds1302.h/-定义使用的10-/#defi ne GPI0_DIG P0 sbit LSA=P2 A2;sbit LSB=P2A3;sbit LSC=P2A4;/-定义全局变量 -/un sig ned char code DIG_CODE17= 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71; 0、1、2、3

16、、4、5、6、7、8、9、A b、C、d、E、F 的显示码 unsigned char DisplayData8;/用来存放要显示的8位数的值 /-声明全局变量-/ void DigDisplay();*函数名:mai n*函数功能:主函数*输入:无*输出:无*void mai n()Ds1302I ni t(); while(1)Ds1302ReadTime();DisplayData0DIG_CODETIME2/16;/时= DisplayData1DIG_CODETIME2&0x0f;= DisplayData20x40;= DisplayData3DIG_CODETIME1/16;/分

17、= DisplayData4DIG_CODETIME1&0x0f;DisplayData5 = 0x40;DisplayData6 = DIG_CODETIME0/16;/ 秒DisplayData7 = DIG_CODETIME0&0x0f;DigDisplay();* 函 数 名* 函数功能* 输入* 输出: DigDisplay: 使用数码管显示: 无: 无*void DigDisplay()unsigned char i;unsigned int j; for(i=0;i8;i+)switch(i) / 位选,选择点亮的数码管,case(0):LSA=O;LSB=O;LSC=O; br

18、eak; 显示第 0 位 case(1):LSA=1;LSB=0;LSC=0; break;显示第1 位case(2):LSA=0;LSB=1;LSC=0; break;显示第2 位case(3):LSA=1;LSB=1;LSC=0; break;显示第3 位case(4):LSA=0;LSB=0;LSC=1; break;显示第4 位case(5):LSA=1;LSB=0;LSC=1; break;显示第5 位case(6):LSA=0;LSB=1;LSC=1; break;显示第6 位case(7):LSA=1;LSB=1;LSC=1; break;显示第7 位GPIO_DIG=Displ

19、ayDatai; 发送段码j=50;/ 扫描间隔时间设定while(j-);GPIO_DIG=0x00; 消隐知识拓展DS12887 是美国达拉斯半导体公司推出的并行时钟芯片,采用 片所需的晶振和外部锂电池相关电路集于芯片内部,同时它与目前 钟芯片 MC146818B 和 DS1287 管脚兼容,可直接替换。采用CMOS 技术制成,把时钟芯IBM AT 计算机常用的时DS12887 芯片设计的时钟电路勿需任何外围电路并具有良好的微机接口DS12887 芯片具有微功耗、外围接口简单、精度高、工作稳定可靠等优点,可广泛用于各种需要较高精度的实时时钟场合中。其主要功能如下:(1) 内含一个锂电池,断电情况

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论