23. DS1302实时时钟
-
23.1. DS1302介绍
•DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片。它可以对年、月、日、周、时、分、秒进行计时,且具有闰年补偿等多种功能
•RTC(Real Time Clock):实时时钟,是一种集成电路,通常称为时钟芯片
-
23.2. DS1302引脚定义和应用电路
-
23.3. DS1302内部结构框图
-
23.4. 寄存器定义
-
23.5. 时序定义
-
23.6. BCD码
•BCD码(Binary Coded Decimal),用4位二进制数来表示1位十进制数
•例:0001 0011表示13,1000 0101表示85,0001 1010不合法
•在十六进制中的体现:0x13表示13,0x85表示85,0x1A不合法
•BCD码转十进制:DEC=BCD/1610+BCD%16; (此公式只有2位BCD可用)
•十进制转BCD码:BCD=DEC/1016+DEC%10; (此公式只有2位BCD可用) -
23.7. Proteus中仿真环境搭建
-
在目前的仿真环境中插入 DS1302时钟芯片,其引脚连接如图,同时注意晶振直接搜索Crystal找到通用晶振插入,插入后将震动频率设置为32768Hz
-
-
-
为了防止后续程序仿真过程中调用LCD1602与之前一节8x8点阵屏出现问题,此处我在点阵屏接P0口之前加了一组8位DIPSW手动开关用于切断点阵屏参与本节实验;
-
-
-
23.8. 示例程序,指定一个初始的时间并显示在LCD1602屏上面,包括第一行的年月日,第二行开始的时分秒。需要之前程序样例中的LCD1602.c与LCD1602.h的模块化程序,并新建DS1302.c与DS1302.h的针对DS1302时钟芯片的模块化程序,用于时钟芯片初始化,写入数据函数,读入数据函数,设定时间,读取时间的操作
- DS1302.h的程序如下:
#ifndef _DS1302_H_
#define _DS1302_H_
extern unsigned char DS1302_Time[];//数组声明外部可调用
void DS1302_Init(void);
void DS1302_WriteByte(unsigned char Command,Data);
unsigned char DS1302_ReadByte(unsigned char Command); //返回
void DS1302_SetTime(void);
void DS1302_ReadTime(void);
#endif
- DS1302.c的程序如下:
#include <REGX52.H>
sbit DS1302_SCLK=P3^6;
sbit DS1302_IO=P3^4;
sbit DS1302_CE=P3^5;
#define DS1302_SECOND 0x80 //定义DS1302秒的写入地址
#define DS1302_MINUTE 0x82 //定义DS1302分钟的写入地址
#define DS1302_HOUR 0x84 //定义DS1302小时的写入地址
#define DS1302_DATE 0x86 //定义DS1302天的写入地址
#define DS1302_MONTH 0x88 //定义DS1302月份的写入地址
#define DS1302_DAY 0x8A //定义DS1302星期的写入地址
#define DS1302_YEAR 0x8C //定义DS1302年的写入地址
#define DS1302_WP 0x8E //定义DS1302清空
char DS1302_Time[]={24,04,06,22,56,56,6};//初始化时钟2024年4月6日22时56分56秒周六数组
void DS1302_Init(void) //DS130