1.介绍
DS1302是一种串行接口的实时时钟,芯片内部具有可编程的日历时钟和31个字节的静态RAM。
2.内部结构
(1)SCLK:串行时钟输入端,控制数据输入与输出。
(2)I/O:双向输入线
(3)CE:使能端,CE为高时允许DS1302读写数据,CE端为低时DS1302数据不可读写
(4)X1与X2:外接32.768的圆形晶振,给时钟芯片提供晶振频率。
3.时钟日历控制寄存器

(1)秒寄存器(0X81,0X80): 当CH=1秒位停止关闭。
(2)小时寄存器(0x85,0x84):当BIT7为1时为12小时制,当BIT7为0时为24小时制。
(3)控制寄存器(0x8f,0x8e):当WP为1时,不能对Ds1302做任何操作。
4.DS130231字节的RAM寄存器

就是断电后仍然存在的数据区域
5.DS1302的工作模式寄存器

突发模式就是一次性转输多个字节的的数据到时钟或RAM
6.DS1320的通信时序
(1)从最低位开始
(2)读写数据:都是CE端由低到高,然后前8位,写命令字节,后8位,写数据字节。(上升沿时为写入,下降沿时为读出)
7.BCD码转换
(1)解释
因为我们时间是按一位一位来记录的,例如个位秒,十位秒,个位分…
所以我们用4位2进制就可以表示0-9的数字,(即8421任意选择加)
所以8421为 0000 0000,前四位表示10位,后四位表示个位
(2)BCD转8421码(BCD码)
例如45这个十进制数,先把十位与个位分开得到4与5,4是属于高四位的所以要再乘与16到高四位,所以45 = 416+5= 69 = 0100 0101
(3)8421转BCD码
如69这个8421码,先69/16得到高四位的值为4,再69%16得到低四位的值5,然后4
10+5=45,就是十进制数。

#include <reg52.h>
#include <intrins.h>
sbit LA=P2^2;
sbit LB=P2^3;
sbit LC=P2^4;
sbit TSCLK = P3^6;     //时钟线
sbit TIO = P3^4;       //数据线
sbit TRST = P3^5;       //CE端,使能
//以下为显示函数
unsigned int miao;
unsigned char smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay2(unsigned int z)
{unsigned int x,y;for(x=z;x>0;x--)for(y=120;y>0;y--);
}
void timefrist()
{EA = 1;ET0 = 1;TR0 = 1;TMOD |= 0x01;TH0 = 0xED;TL0 = 0xFF;
}
void DigDisplay(unsigned int h)
{unsigned int a = h % 60 % 10;unsigned int b = h % 60 / 10;unsigned int c = h / 60 % 10;unsigned int d = h / 60 / 10;static unsigned char wei=0;switch(wei){case 0: LA=1;LB=1;LC=1;P0 = smgduan[d];break;case 1:   LA=0;LB=1;LC=1;P0 = smgduan[c];break;case 2: LA=1;LB=0;LC=1;P0 = smgduan[b];break;case 3: LA=0;LB=0;LC=1;P0 = smgduan[a];break;}wei++;if(wei==4){wei = 0;}
}
void timer0() interrupt 1
{TH0 = 0xED;TL0 = 0xFF;DigDisplay(miao);
}
//以下为时钟函数
//写入数据
unsigned char Write_DS1302_DAT(unsigned char cmd,unsigned char dat)
{unsigned  char i;TRST = 0;TSCLK = 0;TRST = 1;     //CE端产生上升沿启动读写for(i=0;i<8;i++){TSCLK = 0;TIO = cmd & 0x01;  //由最低位开始TSCLK = 1;       //产生上升沿,直接写入数据cmd >>= 1;       //数据不断左移,把最低位提上}for(i=0;i<8;i++){TSCLK = 0;TIO = dat & 0x01;TSCLK = 1;dat >>= 1;}}
//读数据
char Read_DS1302_DAT(unsigned char cmd)
{unsigned char i,dat;TRST = 0;TSCLK = 0;TRST = 1;         //CE端拉高,启动读或写for(i=0;i<8;i++)    //写入指命,找位置与功能{TSCLK = 0;TIO = cmd & 0x01;TSCLK = 1;cmd >>= 1;}for(i=0;i<8;i++)  {TSCLK = 0;  //前面TSCLK已经被拉高了,现在拉低,数据读出dat >>= 1;  //数据右移动if(TIO) dat |= 0x80;  //转出数据为高电平,就最高位加一然后不断右移动到最低位TSCLK = 1;  //重新拉高回来}return dat; //返回数据
}
//10位变BCD
unsigned char Dat_Chg_BCD(unsigned char dat)
{unsigned char dat1,dat2;dat1 = dat /10;dat2 = dat % 10;dat2 = dat1*16 + dat2;return dat2;
}
//BCD为10位
unsigned char BCD_Chg_Dat(unsigned char dat)
{unsigned char dat1,dat2;dat1 = dat / 16;dat2 = dat2 %16;dat2 = dat2 + dat1*10;return dat2;
}
void main()
{unsigned char a,b,c;timefrist();Write_DS1302_DAT(0x8e,0);               //打开0x8e上WE置位为0Write_DS1302_DAT(0x80,Dat_Chg_BCD(10)); //写秒0x80指命,后写入数据Write_DS1302_DAT(0x82,Dat_Chg_BCD(50)); //写秒0x82指命,后写入数据Write_DS1302_DAT(0x84,Dat_Chg_BCD(11)); //写秒0x84指命,后写入数据Write_DS1302_DAT(0x8e,0x80);         //打开0x8e上WE置位为1,不可读写while(1){Write_DS1302_DAT(0x8e,0); //打开0x8e上WE置位为0a = BCD_Chg_Dat(Read_DS1302_DAT(0x81));//读取指命0x81,时间秒b = BCD_Chg_Dat(Read_DS1302_DAT(0x83));//读取指命0x83,时间秒c = BCD_Chg_Dat(Read_DS1302_DAT(0x85));//读取指命0x85,时间秒Write_DS1302_DAT(0x8e,0x80); 打开0x8e上WE置位为1,不可读写miao = a + b*60;  //这里只用到了秒与分,全部化为秒后给全局变量delay2(1000);}
}

DS1302实时时钟相关推荐

  1. 关于STM32驱动DS1302实时时钟的一点思考

    关于STM32驱动DS1302实时时钟的一点思考 之前用51驱动过DS1302,没用多久就输出了正确的时间.当时以为这块芯片其实没啥,很简单.但是现在用STM32做项目,用到同样的芯片,以为这有何难, ...

  2. 4.7 51单片机-DS1302 实时时钟芯片

    4.7 DS1302 实时时钟芯片 4.7.1 原理图介绍 图4-7-1 图4-7-2 驱动DS1302之前,实验板上需要将JP595跳线帽和J11跳线帽断开.JP1302跳线帽接上. 4.7.2 D ...

  3. 基于51单片机的DS1302实时时钟

    本讲内容: 介绍DS1302实时时钟芯片基本知识,演示DS1302例程. DS1302实时时钟: DS1302能提供包括秒.分.时.日期.月份和年份信息.闰年可自行调整,可选择12小时制和24小时制, ...

  4. 51单片机学习笔记-8 DS1302实时时钟

    8 DS1302实时时钟 [toc] 注:笔记主要参考B站江科大自化协教学视频"51单片机入门教程-2020版 程序全程纯手打 从零开始入门". 注:工程及代码文件放在了本人的Gi ...

  5. DS1302实时时钟芯片

    DS1302 是 DALLAS(达拉斯) 公司推出的一款涓流充电时钟芯片, 2001 年 DALLAS 被 MAXIM(美信) 收购,因此我们看到的 DS1302 的数据手册既有 DALLAS 的标志 ...

  6. 树莓派基础实验32:DS1302实时时钟模块实验

    一.介绍   现在有很多流行的串行时钟芯片,如DS1302,DS1307,PCF8485等,由于简单的接口,低成本和易用性,他们被广泛应用于电话.传真.便携式仪器等产品领域.在本实验中,我们将使用DS ...

  7. 一看就会!DS1302实时时钟原理和程序

    DS1302介绍 一款高性能.低功耗的日历时钟 DS1302是一种串行接口的实时时钟,内部有可编程的日历时钟和31个字节的静态RAM,可以自动进行闰年补偿 工作电压范围宽(2.5V~5.5V),还有对 ...

  8. 51单片机DS1302实时时钟

    一.DS1302介绍 DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片.它可以对年.月.日.周.时.分.秒进行计时,且具有闰年补偿等多种功能.        RTC( ...

  9. 基于51单片机的DS1302实时时钟程序

    DS1302概述 DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片.它可以对年.月.日.周.时.分.秒进行计时,且具有闰年补偿等多种功能. 工作原理 DS1302 是 ...

最新文章

  1. 27年前被Nature拒稿,如今斩获诺贝尔奖!学术投稿模式再引热议:都有神奇的评审2...
  2. access实验报告体会_Access实验报告 - 图文
  3. linux mktime函数会受当前环境变量设置的时区影响
  4. GPU(CUDA)学习日记(九)------ CUDA存储器模型
  5. SAP License:SAP中的报表利器Report Painter
  6. 696.计数二进制子串(力扣leetcode) 博主可答疑该问题
  7. 微信小程序商城搭建小程序服装购物商城+后台
  8. 云计算十字真言及其在小博无线的实践
  9. 前端 - base64原理浅析
  10. 在消费决策上,读懂当代年轻人的B面!
  11. 惩罚函数将有约束优化转化为无约束优化问题
  12. 旅游系统(SSM框架 结构+效果图)
  13. 收藏!从十篇顶会论文解读计算机视觉的未来之路!
  14. 2021总结:万千热爱,初心不负,三餐烟火暖,四季皆安然。
  15. Foreda Workstation 36安装搜狗拼音输入法
  16. (P57-P61)正则表达式
  17. 组队学习-动手学数据分析-第二章第2、3节
  18. html中绘制渐变伞,CorelDRAW X8快速制作雨伞教程
  19. asynctaskdemo(Info)5
  20. 经典算法应用之七----10亿数据中取最大的100个数据

热门文章

  1. 系统开发视角下的诊断 ———— 动力系统(P)诊断故障6
  2. Luogu P5416 [CTSC2016]时空旅行
  3. 【五】 C语言基础知识学习回顾 | 一篇搞定C语言基础 | 内附详细代码以及注释
  4. 项目经理证书PMP怎么考
  5. Matlab答疑五:使用微分定义求解微分方程的数值解
  6. 手机免流开热点教程(ROOT版)
  7. 2021.04.09丨使用featurecount进行定量处理
  8. 数据类型(int、short、long、long long、unsigned、char、float、double)
  9. 高等数学——求解不定积分的经典换元法
  10. Vue3中的setup前加上async后页面不显示