基于DS1307的简易时钟显示程序分享

2018-01-27 20:50:01编辑:王磊 关键字:DS1307

目前家用的数字电子钟,多数只能显示小时、分钟等信息,功能单一,而且大都采用LED数码管作为显示器件,功耗大,不能令消费者满意。

DS1307简介

AM/PM 标志位决定时钟工作于24小时或12小时模式,芯片有一个内置的电源感应电路,具有掉电检测和电池切换功能。

是一款低功耗,具有56字节非失性RAM的全BCD码时钟日历实时时钟芯片,地址和数据通过两线双向的串行总线的传输,芯片可以提供秒,分,小时等信息,每一个月的天数能自动调整。并且有闰年补偿功能

特点:

可对秒,时,分,每月的天数,月份,每周的天数进行计数,并具有闰年补偿功能。计年上限2100。

56字节非失性的RAM

两线串行接口

可编程方波输出

自动掉电检测和切换电路

在电池备份模式下,功耗小于500nA

工业级的工作温度: -40 到80

8脚DIP和SOIC封装

下面分享一下基于DS1307的简易时钟显示程序给大家:

* Coder:NUIST_XKFYT

* E-mail:weilun_fong@nuist.edu.cn(Welcome to get help info about this program)

* Date:2016-7-17

*

* Device:STC89C54RD,DS1307Z+

* FuncTIon:简易时钟显示

* Note:

* 1.DS1307四位固定地址位为1101,三位可编程地址位为000

*/

#include 《STC89C5xRC.h》 /* 可更换为《reg52.h》或《AT89x52.h》 */

#include 《intrins.h》

//#include 《TIme.h》 /* Keil v4中无法调用该标准库函数 */

#define uchar unsigned char

#define uint unsigned int

/* DS1307操作指令 */

#define DS1307_WRITE 0xD0

#define DS1307_READ 0xD1

#define DS1307_DISABLE 0x80

#define DS1307_ENABLE 0x7F

#define DS1307_12HOUR_MODE 0x20

#define DS1307_24HOUR_MODE 0xDF

/* DS1307内部寄存器地址 */

#define ADDR_SEC 0x00

#define ADDR_MIN 0x01

#define ADDR_HOUR 0x02

#define ADDR_DAY 0x03

#define ADDR_DATE 0x04

#define ADDR_MONTH 0x05

#define ADDR_YEAR 0x06

#define ADDR_COR 0x07

/* 模块自带AT24C02》》预留接口 */

//#define AT24C02_WRITE 0xA0

//#define AT24C02_READ 0xA1

sbit I2C_SCL = P1^0;

sbit I2C_SDA = P1^1;

uchar min = 0;

uchar sec = 0;

uchar code tab[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

/* 重新自定义《TIme.h》中的tm结构体 */

struct tm

{

uchar tm_sec; /* 秒 – 取值区间为[0,59] */

uchar tm_min; /* 分 - 取值区间为[0,59] */

uchar tm_hour; /* 时 - 取值区间为[0,23] */

uchar tm_mday; /* 一个月中的日期 - 取值区间为[1,31] */

uchar tm_mon; /* 月份(从一月开始,0代表一月) - 取值区间为[1,12] */

uchar tm_year; /* 年份 */

uchar tm_wday; /* 星期 – 取值区间为[1,7] */

};

/* delay 5us */

void delay_5us(void)

{

_nop_();

}

/* delay par*1ms */

void delay_ms(uint par)

{

uchar cnt = 0;

while(par--)

for(cnt = 120;cnt 》 0;cnt--);

}

void I2C_Start(void)

{

I2C_SDA = 1;

I2C_SCL = 1;

delay_5us(); /* 实际延时4.7us即可 */

I2C_SDA = 0; /* SCL为高电平时,SDA为下降沿表示起始信号 */

delay_5us();

}

void I2C_Stop(void)

{

I2C_SDA = 0;

I2C_SCL = 1;

delay_5us();

I2C_SDA = 1; /* SCL为高电平时,SDA为上升沿表示结束信号 */

delay_5us();

}

void I2C_Ack(void)

{

uchar cnt = 0;

I2C_SCL = 0; /* 在SCL为高电平期间等待应答 */

delay_5us();

while((I2C_SDA == 1)&&(cnt 《 250)) /* 若为应答0即退出,从机向主机发送应答信号 */

cnt++; /* 等待一段时间 */

I2C_SCL = 0;

delay_5us();

}

void I2C_noAck(void)

{

I2C_SCL = 1; /* 在scl为高电平期间,由主机向从机发送一个1,非应答信号 */

delay_5us();

I2C_SDA = 1;

I2C_SCL = 0;

delay_5us();

}

void I2C_sendByte(uchar dat)

{

uchar cnt = 0;

uchar dat_buf = 0;

dat_buf = dat;

for(cnt = 0;cnt 《 8;cnt++)

{

dat_b

关键字:DS1307

来源: 互联网 引用地址:http://www.eeworld.com.cn/mndz/article_2018012726924.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:基于ARM和DS1307的实时时钟系统设计
下一篇:基于DS1307的多功能时钟系统设计方案

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

DS1302时钟与LCD1602液晶显示

    DS1302是一个实时时钟芯片,它在实时显示时间中应用。它可以对年、月、日、周、时、分、秒进行计时。DS1302的引脚及原理图如下:    它与CPU的连接需要SCLK(7)、I/O(6)和RST(5)三个引脚,VCC2和VCC1分别为主电源和备份电源,X1和X2分别接外部振荡器。在于CPU的通信中I/O用来传输数据,RST作为复位信号,SCLK用来控制数据字节的读写。DS1302的读写时序如下:    程序中对芯片的操作主要是参考芯片的时序状态,时序中说明只要有对数据的操作RST就需要置1,在读数据的前8个时钟中在SCLK处于高电平的过程中会获取控制字信息
发表于 2018-06-25 21:56:15
DS1302时钟与LCD1602液晶显示

stm32+DS1302+TM1638驱动程序

number which has been pressed*params       : none*return       : the number of the key. 0-8.  "return 0" represents no key has been pressed.***********************************************************************************************/2.DS1302与STM322.1硬件连接   Vcc--
发表于 2018-06-25 21:52:54

STM32与DS1302的接口电路

(1)硬件 CLK---PA4,  DAT--- PA5, RST--- PA6(2)硬件初始化 CLK与RST均为输出,而DAT是开漏型的输出。因为在这种方式下,IO口的读仍然存在,因此是真正的双向IO模式。/*DSCK -PA4 DAT PA5 RST DAT*/#define ds1302Clk GPIO_Pin_4   //与时钟线相连的芯片的管脚#define ds1302Dat GPIO_Pin_5   //与数据线相连的芯片的管脚#define ds1302Rst GPIO_Pin_6   //与复位端相连的芯片的管脚/* PA 4,6,为输出*/ 
发表于 2018-06-25 21:52:13

一个完整的DS1302时钟在STM32上的应用实例

一个完整的DS1302时钟在STM32上的应用    /*DS1302时钟芯片*/  uint8_t read[] = {0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};//读秒、分、时、日、月、周、年的寄存器地址   uint8_t write[] = {0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};//写秒、分、时、日、月、周、年的寄存器地址  uint8_t start_time2[8]={0,0,10,5,5,6,18};//初始化时间:2018年5月5号10:00:00星期六   
发表于 2018-06-25 21:51:37

STM32与DS1302设计时钟芯片,超详细

DS1302 是DALLAS 公司推出的涓流充电时钟芯片,内含有一个实时时钟/日历和31 字节静态RAM ,通过简单的串行接口与单片机进行通信。实时时钟/日历电路提供秒、分、时、日、周、月、年的信息,每月的天数和闰年的天数可自动调整。时钟操作可通过AM/PM 指示决定采用24 或12 小时格式。DS1302 与单片机之间能简单地采用同步串行的方式进行通信,仅需用到三个口线:(1)RES 复位(2)I/O 数据线(3)SCLK串行时钟。时钟/RAM 的读/写数据以一个字节或多达31 个字节的字符组方式通信。DS1302 工作时功耗很低保持数据和时钟信息时功率小于1mWDS1302 是由DS1202 改进而来增加了以下的特性:双电源
发表于 2018-06-25 21:50:57
STM32与DS1302设计时钟芯片,超详细

基于STM32的DS1302时钟芯片驱动

/************************************************************************************************************************** 函数 : DS1302.H* 功能 :  DS1302头文件* 参数 :  无* 返回 :  无* 依赖 :  底层读写函数* 最后修改时间 : * 说明 : DS1302采用GPIO模拟SPI的方式DS1302 LSB格式,上升沿写 下降沿读  BCD码存储* 参考
发表于 2018-06-25 21:49:52

小广播

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2018 EEWORLD.com.cn, Inc. All rights reserved