心博天下娱乐平台 > 模拟技术 > 接口/时钟/PLL > 正文

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

? 2018年01月26日 10:08 ? 次阅读

心博天下娱乐平台 www.syycw.cn 目前家用的数字电子钟,多数只能显示小时、分钟等信息,功能单一,而且大都采用LED数码管作为显示器件,功耗大,不能令消费者满意。

DS1307简介

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

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

特点:

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

56字节非失性的RAM

两线串行接口

可编程方波输出

自动掉电检测和切换电路

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

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

8脚DIP和SOIC封装

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

下面分享一下基于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

技术专区

关注电子发烧友微信

有趣有料的资讯及技术干货

下载发烧友APP

打造属于您的人脉电子圈

关注发烧友课堂

锁定最新课程活动及技术直播
收藏 人收藏
分享:

评论

相关推荐

基于DS1307的可调实时时钟系统设计

DS1307是一款具有I2C总线接口的实时时钟芯片,要驱动具有I2C总线接口的DS1307芯片,一种...

发表于 2018-01-26 16:47 ? 419次阅读
基于DS1307的可调实时时钟系统设计

ds1307的iic读写心得

由于是个初学者,对I2C总线从来没有接触过,看了几遍I2C总线规则后,有了点了解,觉的在单片机这样I...

发表于 2018-01-26 11:03 ? 160次阅读
ds1307的iic读写心得

ds1307怎么使用(ds1307引脚图及功能_...

DS1307是低功耗、两线制串行读写接口、日历和时钟数据按BCD码存取的时钟/日历芯片。它提供秒、分...

发表于 2018-01-26 10:52 ? 454次阅读
ds1307怎么使用(ds1307引脚图及功能_...

单片机与串行时钟DS1307的接口设计

本文介绍DS1307的应用及其接口设计,该时钟系统用RS485接口,采用SN75176差分平衡驱动接...

发表于 2018-01-26 10:24 ? 253次阅读
单片机与串行时钟DS1307的接口设计

基于ARM和DS1307的实时时钟系统设计

DS1307是I2C接口的8引脚实时时钟芯片,片内含有8个特殊功能寄存器和56bit的SRAM。它是...

发表于 2018-01-26 10:01 ? 216次阅读
基于ARM和DS1307的实时时钟系统设计

DS1307在太阳能电池控制装置中的应用

很多控制系统都需要借助于时间和日期,太阳能电池(发电系统)的电池板控制就是其中最典型的一例。介绍了美...

发表于 2018-01-26 09:40 ? 255次阅读
DS1307在太阳能电池控制装置中的应用

基于DS1307的多功能时钟系统设计方案

目前家用的数字电子钟,多数只能显示小时、分钟等信息,功能单一,而且大都采用LED数码管作为显示器件,...

发表于 2018-01-26 09:27 ? 275次阅读
基于DS1307的多功能时钟系统设计方案

ds1302和ds1307区别_ds1302和d...

ds1302和ds1307区别:ds1302是半SPI接口,ds1307是I2C接口;ds1302和...

发表于 2017-08-26 20:18 ? 1707次阅读
ds1302和ds1307区别_ds1302和d...