文章目录

  • 一、DS1302基础知识
  • 二、实际使用
    • 1.蓝桥杯小蜜蜂讲解
    • 2.官方给的示例
  • 总结

一、DS1302基础知识

大家查阅单片机的芯片手册可以看到DS1302 的电路图

 一、DS1302是时钟芯片,有12个寄存器,其中7个寄存器和日历、时钟相关,DS1302使用BCD码存放数据。

二、DS1302在官方给出的比赛指导书里面有很详细的描述,但是根据我自己的理解,分成控制字节、读操作和写操作三块。

1、根据指导书里的内容,可以得DS1302的控制字格式如下

BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
1 1:RAM 0:CK A4 A3 A2 A1 A0 1:RD 0:WR

BIT7=1时才能写入数据;
BIT6:0表示存取日历时钟数据,BIT5~BIT1:表示操作单元的地址
2、读操作:看下时序图,读操作的时候SCLK是下降沿锁存数据。因而同法可得,写操作SCLK是上升沿所存数据,这也说明在实际读取一个数据的时候,需要有一个由高到低的跳变过程,才能读取成功。
3、DS1302的基本操作:(1)设定时间参数;(2)读取实时时间
4、解释下DS1302的时钟寄存器:CH是时钟停止位,是秒寄存器的第7位,12/24小时标志位;CH=0 振荡器工作允许,BIT7=12小时工作模式,反之振荡器停止就是24小时工作模式。
WP是写保护位:WP=0寄存器数据能写入,否则是不能改写时间寄存器的。

5、设置时分秒的地址分别为0x84,0x82,0x80,读取的地址分别为0x85,0x83,0x81

二、实际使用

1.蓝桥杯小蜜蜂讲解

main.c

#include <config.h> //自定义了一个头文件的包u8 code list[] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,  0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,0xbf,0x7f};   //数码管共阳极
//ds1302读取数据地址
u8 Write_DS1302_adrr[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};
u8 Read_DS1302_adrr[7] ={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};
//定义时间为20年4月16日 周六 23点59分24秒
u8 Timer[7]={0x24,0x59,0x23,0x18,0x04,0x06,0x20};//DS1302的一个初始化
void DS1302_config()
{u8 i;      //u8是自定义unsigned char Write_Ds1302_Byte(0x8e,0x00); //首先把WP写保护位打开地址0x8efor(i=0;i<7;i++){Write_Ds1302_Byte( Write_DS1302_adrr[i],Timer[i]);//写入设定的时间数据到寄存器当中去}Write_Ds1302_Byte(0x8e,0x80);//关闭写保护位
}
//DS1302读取数据
void Read_ds1302_Timer()
{u8 i;for(i=0;i<7;i++){Timer[i] = Read_Ds1302_Byte(Read_DS1302_adrr[i]);}}
//设置数码管显示
void Display_ds1302()
{Display_bit(list[Timer[2]/16],0);Delaysmg(100);Display_bit(list[Timer[2]%16],1);Delaysmg(100);Display_bit(0xbf,2);Delaysmg(100);Display_bit(list[Timer[1]/16],3);Delaysmg(100);Display_bit(list[Timer[1]%16],4);Delaysmg(100);Display_bit(0xbf,5);Delaysmg(100);Display_bit(list[Timer[0]/16],6);Delaysmg(100);                 Display_bit(list[Timer[0]%16],7);Delaysmg(100);Display_all(0xff);
}void main()
{Init_close();  //自定义关闭外设灯和蜂鸣器、继电器DS1302_config();  //DS1302初始化while(1){Read_ds1302_Timer();    //读数据Display_ds1302();  //1602显示}
}

smg.c
数码管这部分先写延时就不多说了

#include<smg.h>
void Delaysmg(u8 t)//延时
{while(t--);
}

后面的单个数码管点亮可以优化下

void Display_bit(u8 dat,u8 pos) //单个数码管点亮
{Init_HC573(6);P0 = 0x01 << pos;Init_HC573(7);P0 = dat;Init_HC573(6);   //消隐,防止闪烁P0 = 0x00;
}
void Display_all(u8 dat)    //整体
{Init_HC573(6);P0 = 0xff;Init_HC573(7);P0 = dat;
}

因为之前写HC573和HC138那一节的时候有提到优化,所以这部分可以用outputP0来进行

void displaysmg_bit(u8 pos,u8 dat)
{outputP0(6,(0x01<<pos));outputP0(7,dat);outputP0(6,0x00);
}
//display_all同理即可

2.官方给的示例

代码如下(示例):

#include <ds1302.h>sbit SCK=P1^7;
sbit SDA=P2^3; //引入IIC会有冲突,可以提前重命名下1302的SDA
sbit RST = P1^3;   // DS1302复位                                             void Write_Ds1302(u8 temp)
{unsigned char i;for (i=0;i<8;i++)        { SCK=0;SDA=temp&0x01;temp>>=1; SCK=1;}
}   void Write_Ds1302_Byte( u8 address,u8 dat )
{RST=0;    _nop_();SCK=0; _nop_();RST=1;     _nop_();  Write_Ds1302(address);    Write_Ds1302(dat);      RST=0;
}u8 Read_Ds1302_Byte ( u8 address )
{unsigned char i,temp=0x00;RST=0; _nop_();SCK=0; _nop_();RST=1; _nop_();Write_Ds1302(address);for (i=0;i<8;i++)   {       SCK=0;temp>>=1; if(SDA)temp|=0x80; SCK=1;} RST=0;    _nop_();SCK=0; _nop_();SCK=1; _nop_();SDA=0; _nop_();SDA=1; _nop_();return (temp);
}
#ifndef __DS1302_H
#define __DS1302_H#include<config.h>
void Write_Ds1302(u8 temp);
void Write_Ds1302_Byte( u8 address,u8 dat );
u8 Read_Ds1302_Byte( u8 address );
#endif

总结

本人是第一次参加蓝桥杯,外设模块是跟着B站小蜜蜂老师学习的,本专栏文章仅是个人赛后的复盘行为,其他外设会陆续发在专栏当中,本文涉及到的所有的.h和.c文也会陆续发在专栏里,文内有错误的地方可以评论区留一下。

【蓝桥杯单片机】DS1302模块相关推荐

  1. 蓝桥杯单片机DS1302时钟芯片驱动代码注释

    蓝桥杯单片机DS1302时钟芯片驱动代码之前的疑惑注释了下 /* DS1302 芯片包含一个 实时时钟/日历和 31 字节的静态 RAM. 与时钟/RAM 通讯只需要三根线: CE,I/O (数据线) ...

  2. 蓝桥杯单片机 超声波模块和PCA模块

    蓝桥杯单片机 超声波模块和PCA模块 原理 超声波测量的原理 PCA模块的原理 代码 PCA定时器的范例程序 超声波测量的参考代码 原理 超声波测量的原理 超声波由一个超声波模块向前方发出,并在空气中 ...

  3. 【蓝桥杯单片机组模块】14、STC15定时器2的PWM使用

    微信搜索:ReCclay,也可免费阅读博主蓝桥系列所有文章,后台回复"代码"即可获取蓝桥所有备赛代码!关注博主公众号,还可拥有加入博主粉丝群实时沟通技术难题.免费下载CSDN资源等 ...

  4. 【蓝桥杯单片机组模块】4、按键模块

    微信搜索:ReCclay,也可免费阅读博主蓝桥系列所有文章,后台回复"代码"即可获取蓝桥所有备赛代码!关注博主公众号,还可拥有加入博主粉丝群实时沟通技术难题.免费下载CSDN资源等 ...

  5. 蓝桥杯单片机-DS1302时钟模块

    一.简介 1.采用SPI三线接口通信(SCK.SDA.RST) 上升沿数据被写入DS1302,下降沿被读出 二.应用 1.在ds1302.c文件中定义三个数组 unsigned char code R ...

  6. 蓝桥杯单片机进阶模块--NE555

    在使用NE555模块时,NE555是不需要驱动程序的,NE555提供一个接口就是P3^4接口,当然这个接口不是默认连接的,需要将J3用跳线帽将P3^4和SIGNAL连接起来,我们可以看到P3^4是作为 ...

  7. 蓝桥杯单片机:模块代码

    main.c #include "mycode.h" unsigned char keyvalue,t; void main() {SystemInit();//系统初始化Time ...

  8. 蓝桥杯单片机常用模块(自用)

    关于我写的程序啥都不是还有脸上传的事 之前一直在用txt记笔记,但是后来因为代码太多了,所以想到了记到csdn上 下面是正文,无顺序,想到哪写到哪. 一些基础的 -在138译码器中,前3位代表5 6 ...

  9. 蓝桥杯单片机DS1302时钟

    采用SPI三线接口与MCU进行同步通信,并可采用突发方式一次传送多个字节的时钟参数和RAM数据. 日历时钟寄存器有8个存储单元: 所以,我们需要三个数组: 定义DS1302读操作的日历时钟存储器地址 ...

  10. 蓝桥杯单片机——Ds1302时间开始与暂停

    首先说明一下ds1302时间,开始与暂停的原理: 只要让"秒寄存器"的最高位为1,时钟就会暂停计时. 同理只要让"秒寄存器"的最高位为0,时钟就会开始计时. 时 ...

最新文章

  1. 通过pxe远程安装linux,通过PXE远程安装多台Linux系统
  2. tesseract-ocr的安装及使用
  3. 七年级上册计算机重点知识点,初一上册数学重点知识点
  4. 刷抖音看到 Python 工程师的工资条后,我沉默了...
  5. 生成有时间限制的二维码_二维码竟有被用完的一天!看到截止日期后,网友:虚惊一场...
  6. 自学前端开发:想要学习成为一名优秀的前端开发者,代码之外需要关注的问题
  7. Qt无法使用webengineview的解决方案
  8. docker 训练深度学习_基于 Alluxio 数据缓存的大规模深度学习训练性能优化
  9. 前端_day04_行,块,RGB,行高,overflow
  10. 贪吃蛇游戏设计预习01
  11. arcmap发布三维地图_如何使用高程DEM建立三维地图模型(Arcgis ArcScene)
  12. python中多态是什么意思_python类的多态是什么
  13. vue 生命周期图 + activated + deactivated
  14. HDU-4539 郑厂长系列故事——排兵布阵 状态压缩DP Or 最大团
  15. 支持 Docker 运行的 ChatGPT 平替之 Alpaca-Turbo (羊驼)
  16. 第五人格怎么投屏 轻松玩电脑版手游
  17. 阿里云HaaS100物联网开发板学习笔记(四)轻应用初步--用javascript连接阿里云物联网平台
  18. MATLAB傅里叶级数分解极其图像
  19. smina 基于结构的虚拟筛选
  20. Unix时间戳(Unix timestamp)在线转换工具

热门文章

  1. JavaScript 颜色操作工具
  2. 工程师职称的专业分类
  3. 腾讯视频云签到(2022-5-29更新)
  4. 安卓系统的电视机_小伙买的键盘主机大家都说鸡肋,把它改成安卓电视盒真香...
  5. java 驱动级模拟键盘,易语言开源驱动级模拟键盘工具(可绕过wegame屏蔽)
  6. python难学吗-python难学吗
  7. 不同分辨率图片匹配_杜克大学开源 AI 算法,让马赛克图片秒变高清!
  8. 分治算法 --- 详解
  9. Jlink 3.3V,5V问题讨论
  10. 比较不错的互联网盈利模式分析