版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、项目12 简易万年历学习目标1、 通过对万年历的设计,进一步熟练掌握单片机编程的方法和思想;2、 通过对万年历的设计,掌握时钟芯片DS1302的使用方法;3、 通过对万年历的设计,增强对单片机的兴趣及动手能力,并在此过程中学会对程序的逐步调试;项目导入图1 总体框架图利用DS1302芯片进行计时,并且可以与单片机进行数据交换;8位8段数码管作为显示部分。相关知识DS1302是DALLAS 公司推出的涓流充电时钟芯片,内含有一个实时时钟、日历和31 字节静态RAM,通过简单的串行接口与单片机进行通信实时时钟/日历电路。提供秒分时日日期.月年的信息,每月的天数和闰年的天数可自动调整时钟操作可通过A
2、M/PM 指示决定采用24 或12 小时格式。DS1302 与单片机之间能简单地采用同步串行的方式进行通信,仅需用到三个口线:1-RES 复位,2-I/O 数据线,3-SCLK串行时钟。时钟/RAM 的读/写数据以一个字节或多达31 个字节的字符组方式通信。DS1302应用原理图如图2所示:图2 DS1302原理图各引脚功能如下:Vcc1:主电源;Vcc2:备份电源。当Vcc2>Vcc1+0.2V时,由Vcc2向DS1302供电,当Vcc2< Vcc1时,由Vcc1向DS1302供电;SCLK:串行时钟,输入,控制数据的输入与输出;I/O:三线接口时的双向数据线; CE:输入信号,
3、在读、写数据期间,必须为高。该引脚有两个功能:第一,CE开始控制字访问移位寄存器的控制逻辑;其次,CE提供结束单字节或多字节数据传输的方法。表-1 DS1302管脚X1 X232.758KHz晶振管脚GND地RST复位I/O数据输入/输出引脚SCLK串行时钟Vcc1 Vcc2电源供电管脚(1) 时钟芯片DS1302的工作原理: DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置 “0”,接着把RST端置“1”,最后才给予SCLK脉冲;读/写时序如下图所示。为DS1302的控制字,此控制字的位7必须置1,若为0则不能把对DS1302进行读写数据。对于位6,若对程序进行读/写时RAM
4、=1,对时间进行读/写时,CK=0。位1至位5指操作单元的地址。位0是读/写操作位,进行读操作时,该位为1;该位为0则表示进行的是写操作。控制字节总是从最低位开始输入/输出的。表6为DS1302的日历、时间寄存器内容:“CH”是时钟暂停标志位,当该位为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位为0时,时钟开始运行。“WP”是写保护位,在任何的对时钟和RAM的写操作之前,WP必须为0。当“WP”为1时,写保护位防止对任一寄存器的写操作。(2) DS1302的控制字节DS1302的控制字如表-1所示。控制字节的高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,
5、位6如果0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出表-2 DS1302的控制字格式 RAM RD 1 A4 A3 A2 A1 A0 / CK /WR (3) 数据输入输出(I/O) 在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。如下图1所示 图3 DS1302读/写时序图(4) DS1302的寄存器DS
6、1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表-3。表-3 DS1302的日历、时间寄存器写寄存器读寄存器Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit080H81HCH10秒秒82H83H10分分84H85H12/010时时/PM86H87H0010日日88H89H00010月月8AH8BH00000星期8CH8DH10 年年8EH8FHWP0000000此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄
7、存器内容。 DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0HFDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。 任务实施(1)硬件设计工作原理最基本部分是利用DS1302芯片的时钟功能,单片机只需要给DS1302初值,然后不断的从DS1302中读取数据并在数码管中显示,减少了单片机内部资源的占用。图4 系统硬件原理图(2)软件设计程序文件1:/ 1)-DS1302.H#ifndef _DS1302_H_#def
8、ine _DS1302_H_/-包含头文件-/#include<reg51.h>#include<intrins.h>/-重定义关键词-/#ifndef uchar#define uchar unsigned char#endif#ifndef uint #define uint unsigned int#endif/-定义ds1302使用的IO口-/sbit DSIO=P34;sbit RST=P35;sbit SCLK=P36;/-定义全局函数-/void Ds1302Write(uchar addr, uchar dat);uchar Ds1302Read(uch
9、ar addr);void Ds1302Init();void Ds1302ReadTime();/-加入全局变量-/extern uchar TIME7;/加入全局变量#endif程序文件2:/ 2)-DS1302.c#include"ds1302.h"/-DS1302写入和读取时分秒的地址命令-/-秒分时日月周年 最低位读写位;-/uchar code READ_RTC_ADDR7 = 0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d; uchar code WRITE_RTC_ADDR7 = 0x80, 0x82, 0x84, 0x86
10、, 0x88, 0x8a, 0x8c;/-DS1302时钟初始化2013年1月1日星期二12点00分00秒。-/-存储顺序是秒分时日月周年,存储格式是用BCD码-/uchar TIME7 = 0, 0, 0x12, 0x01, 0x01, 0x02, 0x13;/* 函 数 名 : Ds1302Write* 函数功能 : 向DS1302命令(地址+数据)* 输 入 : addr,dat* 输 出 : 无*/void Ds1302Write(uchar addr, uchar dat)uchar n;RST = 0;_nop_();SCLK = 0;/先将SCLK置低电平。_nop_();RST
11、 = 1; /然后将RST(CE)置高电平。_nop_();for (n=0; n<8; n+)/开始传送八位地址命令DSIO = addr & 0x01;/数据从低位开始传送addr >>= 1;SCLK = 1;/数据在上升沿时,DS1302读取数据_nop_();SCLK = 0;_nop_();for (n=0; n<8; n+)/写入8位数据DSIO = dat & 0x01;dat >>= 1;SCLK = 1;/数据在上升沿时,DS1302读取数据_nop_();SCLK = 0;_nop_(); RST = 0;/传送数据结束
12、_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; n<8; n+)/开始传送八位地址命令DSIO = addr & 0x01;/数据从低位开始传送addr >>= 1;SCLK = 1;/数据在上升沿时,DS1302读
13、取数据_nop_();SCLK = 0;/DS1302下降沿时,放置数据_nop_();_nop_();for(n=0; n<8; n+)/读取8位数据dat1 = DSIO;/从最低位开始接收dat = (dat>>1) | (dat1<<7);SCLK = 1;_nop_();SCLK = 0;/DS1302下降沿时,放置数据_nop_();RST = 0;_nop_();/以下为DS1302复位的稳定时间,必须的。SCLK = 1;_nop_();DSIO = 0;_nop_();DSIO = 1;_nop_();return dat;/* 函 数 名 :
14、Ds1302Init* 函数功能 : 初始化DS1302.* 输 入 : 无* 输 出 : 无*/void Ds1302Init()uchar n;Ds1302Write(0x8E,0X00); /禁止写保护,就是关闭写保护功能for (n=0; n<7; n+)/写入7个字节的时钟信号:分秒时日月周年Ds1302Write(WRITE_RTC_ADDRn,TIMEn);Ds1302Write(0x8E,0x80); /打开写保护功能/* 函 数 名 : Ds1302ReadTime* 函数功能 : 读取时钟信息* 输 入 : 无* 输 出 : 无*/void Ds1302ReadTim
15、e()uchar n;for (n=0; n<7; n+)/读取7个字节的时钟信号:分秒时日月周年TIMEn = Ds1302Read(READ_RTC_ADDRn);程序文件3:/ 2)-main.c-* 实 验 名 : DS1302时钟显示试验* 实验说明 : 数码管显示时钟信息* 连接方式 : 见连接图* 注 意 : */#include<reg51.h>#include"ds1302.h"/-定义使用的IO-/#define GPIO_DIG P0sbit LSA=P22;sbit LSB=P23;sbit LSC=P24;/-定义全局变量-/un
16、signed char code DIG_CODE17=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码unsigned char DisplayData8;/用来存放要显示的8位数的值/-声明全局变量-/void DigDisplay();/* 函 数 名 : main* 函数功能 : 主函数* 输 入 : 无* 输 出 : 无*/void main()Ds1302Init();while(1)Ds1302Re
17、adTime();DisplayData0 = DIG_CODETIME2/16;/时DisplayData1 = DIG_CODETIME2&0x0f; DisplayData2 = 0x40;DisplayData3 = DIG_CODETIME1/16;/分DisplayData4 = DIG_CODETIME1&0x0f;DisplayData5 = 0x40;DisplayData6 = DIG_CODETIME0/16;/秒DisplayData7 = DIG_CODETIME0&0x0f;DigDisplay();/* 函 数 名 : DigDisplay
18、* 函数功能 : 使用数码管显示* 输 入 : 无* 输 出 : 无*/void DigDisplay()unsigned char i;unsigned int j;for(i=0;i<8;i+)switch(i) /位选,选择点亮的数码管,case(0):LSA=0;LSB=0;LSC=0; break;/显示第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
19、;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=DisplayDatai;/发送段码j=50; /扫描间隔时间设定while(j-);GPIO_DIG=0x00;/消隐知识拓展DS12887是美国达拉斯半导体公司推出的并行时钟芯片,采用CMOS技术制成,把时钟芯片所需的晶振和外部锂电池相关电路集于芯片内部,同时它与目前 IBM AT计算机常用的时钟芯片MC146818B和DS1287管脚兼容,可直接替换。采用DS12887芯片设计的时钟电路勿需任何外围电路并具有良好的微机接口。DS12887芯片具有微功耗、外围接口简单、精度高、工作稳定可靠等优点,可广泛用于各种需要较高精度的实时时钟场合中
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 备战期中 2026-2027学年第一学期初三生物人教版上学期期末测试卷(含答案)
- 2027年宁夏回族自治区语文中考仿真模拟卷(含答案)
- 2027年河南省英语初三查漏补缺卷(含答案)
- 2027年山东省道德与法治中考仿真模拟卷(含答案)
- 突破自我 2026-2027学年第一学期八年级道德与法治部编版11月月考试卷(含答案)
- 巩固提高 2026年秋季初三历史部编版第六单元单元测试卷(含答案)
- 2027届湖南省英语中考北师大版查缺补漏专练(含答案)
- 2027年湖北省道德与法治九年级真题拓展卷(含答案)
- 四川事业编融媒体宣传岗 2026 易错题试卷 含答案解析
- 湖南事业编财会岗 2026 历年真题试卷 含解析
- 四川省泸州市泸县第五中学2026-2027学年高一上学期9月考试英语试卷
- 海南省海口市2027届高三年级摸底考试生物试题(含解析)
- 2026年物业管理条例考核试题及答案
- 公共娱乐场所电气消防安全培训
- 2026岳阳观盛投资发展有限公司及下属管理企业秋季联合招聘25人笔试备考题库及答案详解
- 第5课 中国人民站起来了 第1课时 课件(内嵌视频)2026-2027学年道德与法治五年级上册统编版
- 制造业公司绩效考核含全套KPI指标库
- 2026年《资料员》考试题库带答案(考试直接用)
- 人大代表知识培训课件
- 环卫作业车辆安全驾驶培训课件
- 神经源性肠道治疗讲课件
评论
0/150
提交评论