蓝桥杯之单片机学习(十七)——DS1302的基本应用

简介: 蓝桥杯之单片机学习(十七)——DS1302的基本应用

一、DS1302概述


DALLAS公司推出的高性能、低功耗的实时时钟。

采用SPI三线接口与MCU进行同步通信,并可采用突发方式一次传送多个字节的时钟参数和RAM数据。

附加31字节的静态RAM

简单来说,DS1302可以理解为-一个电子手表,里面带有一个31字节的RAM内存。

在DS1302中有两块存储器:日历时钟寄存器和静态RAM存储器。前者用于记录实时时间,后者用于记录其他数据。

关注重点:

日历时钟寄存器

0a2653c851af460fa595bd959398a8f1.png


二、日历时钟寄存器


2d65d23f6d4748949b924e4057485923.png

1、秒寄存器(80H和81H)的位7 (CH)为时钟暂停标志。

CH为0时,时钟振荡停止;

CH为1时,时钟开始运行。

2、控制寄存器(8EH 和8FH)的位7 (WP)为写保护位。

WP为0时,可对任何的时钟或RAM寄存器进行写操作;

WP为1时,禁止对任一寄存器进行写操作。


三、控制字格式与数据定义


4cebaac233b3433da32a72337a77fc60.png

BIT7: 必须为1,若为0,则不能把数据写入DS1302中。

BIT6: 0表示存取日历时钟数据,1表示存取RAM数据。

BIT5~BIT1:表示操作单元的地址。

BIT0: 0表示写操作,1表示读操作。

6de278e6d6694ce5bb08e7e842b7e74b.png


四、SPI接口时序


在控制字指令输入后的下一个SCLK时钟信号的上升沿,数据被写入DS1302,在控制字指令输入后的下一个SCLK时钟信号的下降沿,数据从DS1302读出

0a2653c851af460fa595bd959398a8f1.png


五、DS1302的基本操作


基本操作:其一是设定时间参数,其二是读取实时时间

2d65d23f6d4748949b924e4057485923.png


六、代码展示


main.c


#include "reg52.h"
#include "ds1302.h"
typedef unsigned int uint;
typedef unsigned char uchar;
uchar Write_DS1302_adrr[7] = {0X80, 0X82, 0X84, 0X86, 0X88, 0X8A, 0X8C};
uchar Read_DS1302_adrr[7] = {0X81, 0X83, 0X85, 0X87, 0X89, 0X8B, 0X8D};
uchar Timer[7] = {0X24, 0X59, 0X23, 0X18, 0X04, 0X06, 0X20};
uchar code SMG_duanma[18] = 
  {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
  0x88,0x80,0xc6,0xc0,0x86,0x8e,
  0xbf,0x7f};//分别是0-9(对应下标),A-F,“-”,“.”
void DS1302_Config()
{
  char i;
  Write_Ds1302(0X81, 0X00);  //打开保护
  for(i = 0; i < 7; i++)
  {
  Write_Ds1302(Write_DS1302_adrr[i], Timer[i]);
  }
}
void Read_DS1302_Timer()
{
  uchar i;
  for(i = 0; i < 7; i++)
  {
  Timer[i] = Read_Ds1302(Read_DS1302_adrr[i]);
  }
}
//配置HC138
void SelectHC138(uchar channel)
{
  switch(channel)
  {
  case 4:    //LED
    P2 = (P2 & 0X1F) | 0X80;
  break;
  case 5:    //蜂鸣器和继电器
    P2 = (P2 & 0X1F) | 0Xa0;
  break;
  case 6:    //位码
    P2 = (P2 & 0X1F) | 0Xc0;
  break;
  case 7:    //段码
    P2 = (P2 & 0X1F) | 0Xe0;
  break;
  case 0:    //锁住所有寄存器
    P2 = (P2 & 0X1F) | 0X00;
  break;
  }
}
void Initsys()
{
  SelectHC138(5);
  P0 = 0X00;//关闭蜂鸣器和继电器
  SelectHC138(4);
  P0 = 0XFF;//关闭LED
}
//在pos位码上,显示value段码
void DisplaySMG_Bit(uchar pos, uchar value)
{
  SelectHC138(6);
  P0 = 0X01 << pos;
  SelectHC138(7);
  P0 = value;
}
void Delay_SMG(uint t)
{
  while(t--);
}
void Display_DS1302()
{
  DisplaySMG_Bit(0, SMG_duanma[Timer[2]/16]);
  Delay_SMG(100);
  DisplaySMG_Bit(1, SMG_duanma[Timer[2]%16]);
  Delay_SMG(100);
  DisplaySMG_Bit(2, SMG_duanma[16]);
  Delay_SMG(100);
  DisplaySMG_Bit(3, SMG_duanma[Timer[1]/16]);
  Delay_SMG(100);
  DisplaySMG_Bit(4, SMG_duanma[Timer[1]%16]);
  Delay_SMG(100);
  DisplaySMG_Bit(5, SMG_duanma[16]);
  Delay_SMG(100);
  DisplaySMG_Bit(6, SMG_duanma[Timer[0]/16]);
  Delay_SMG(100);
  DisplaySMG_Bit(7, SMG_duanma[Timer[0]%16]);
  Delay_SMG(100);
}
void main()
{
  Initsys();
  DS1302_Config();
  while(1)
  {
  Read_DS1302_Timer();
  Display_DS1302();
  }
}


ds1302.h


/*--------------------------------------------------------------------------
INTRINS.H
Intrinsic functions for C51.
Copyright (c) 1988-2010 Keil Elektronik GmbH and ARM Germany GmbH
All rights reserved.
--------------------------------------------------------------------------*/
#ifndef __INTRINS_H__
#define __INTRINS_H__
#pragma SAVE
#if defined (__CX2__)
#pragma FUNCTIONS(STATIC)
/* intrinsic functions are reentrant, but need static attribute */
#endif
extern void          _nop_     (void);
extern bit           _testbit_ (bit);
extern unsigned char _cror_    (unsigned char, unsigned char);
extern unsigned int  _iror_    (unsigned int,  unsigned char);
extern unsigned long _lror_    (unsigned long, unsigned char);
extern unsigned char _crol_    (unsigned char, unsigned char);
extern unsigned int  _irol_    (unsigned int,  unsigned char);
extern unsigned long _lrol_    (unsigned long, unsigned char);
extern unsigned char _chkfloat_(float);
#if defined (__CX2__)
extern int           abs       (int);
extern void          _illop_   (void);
#endif
#if !defined (__CX2__)
extern void          _push_    (unsigned char _sfr);
extern void          _pop_     (unsigned char _sfr);
#endif
#pragma RESTORE
#endif


ds1302.c


/*
  程序说明: DS1302驱动程序
  软件环境: Keil uVision 4.10 
  硬件环境: CT107单片机综合实训平台 8051,12MHz
  日    期: 2011-8-9
*/
#include <reg52.h>
#include <intrins.h>
sbit SCK=P1^7;  
sbit SDA=P2^3;  
sbit RST = P1^3;   // DS1302复位            
void Write_Ds1302_Byte(unsigned  char temp) 
{
  unsigned char i;
  for (i=0;i<8;i++)      
  { 
  SCK=0;
  SDA=temp&0x01;
  temp>>=1; 
  SCK=1;
  }
}   
void Write_Ds1302( unsigned char address,unsigned char dat )     
{
  RST=0;
  _nop_();
  SCK=0;
  _nop_();
  RST=1;  
    _nop_();  
  Write_Ds1302_Byte(address); 
  Write_Ds1302_Byte(dat);  
  RST=0; 
}
unsigned char Read_Ds1302 ( unsigned char address )
{
  unsigned char i,temp=0x00;
  RST=0;
  _nop_();
  SCK=0;
  _nop_();
  RST=1;
  _nop_();
  Write_Ds1302_Byte(address);
  for (i=0;i<8;i++)  
  {  
  SCK=0;
  temp>>=1; 
    if(SDA)
    temp|=0x80; 
    SCK=1;
  } 
  RST=0;
  _nop_();
  RST=0;
  SCK=0;
  _nop_();
  SCK=1;
  _nop_();
  SDA=0;
  _nop_();
  SDA=1;
  _nop_();
  return (temp);    
}


七、检查ds1302头文件


1.检查引脚是否正确

2.是否声明

相关文章
|
1月前
|
传感器 存储 物联网
单片机的原理与应用
单片机是一种将计算机的CPU、存储器、输入输出接口等功能集成在一块芯片上的微型计算机,被广泛应用于各类控制系统和智能设备中。
65 5
|
5月前
|
存储 算法 测试技术
第十五届蓝桥杯大赛 国赛 pb组F题【括号与字母】(15分) 栈的应用
第十五届蓝桥杯大赛 国赛 pb组F题【括号与字母】(15分) 栈的应用
37 1
|
5月前
|
Java
2023蓝桥杯大赛软件类省赛Java大学B组G题 买二增一 队列的简单应用
2023蓝桥杯大赛软件类省赛Java大学B组G题 买二增一 队列的简单应用
38 1
|
4月前
蓝桥杯之单片机学习(终)——关于之前文章的错误及更正(附:第十四届蓝桥杯单片机赛题)
蓝桥杯之单片机学习(终)——关于之前文章的错误及更正(附:第十四届蓝桥杯单片机赛题)
|
4月前
|
传感器 存储 程序员
《单片机原理与应用及C51编程技术》期末复习笔记
《单片机原理与应用及C51编程技术》期末复习笔记
|
5月前
|
物联网 Linux 芯片
学习嵌入式是选择单片机还是Linux?
单片机通常指的是一种集成了处理器、存储器和各种外设接口的微控制器芯片,常见的有STC、51系列、AVR、ARM Cortex-M等。单片机具有低成本、低功耗、实时性强等特点,适用于对资源要求较低、功耗要求较低、实时性要求较高的嵌入式系统。学习单片机开发可以让您深入了解嵌入式系统的底层原理和硬件编程,对于对嵌入式系统底层开发感兴趣的人来说,是一个很好的选择。
137 4
|
6月前
|
存储 芯片
【期末不挂科-单片机考前速过系列P11】(第十一章:15题速过串行口的工作原理和应用)经典例题盘点(带图解析)
【期末不挂科-单片机考前速过系列P11】(第十一章:15题速过串行口的工作原理和应用)经典例题盘点(带图解析)
|
6月前
|
芯片
AT89S52单片机的最小应用系统
AT89S52单片机的最小应用系统
96 0
【期末不挂科-单片机考前速过系列P10】(第十章:11题中断系统的工作原理及应用)经典例题盘点(带图解析)
【期末不挂科-单片机考前速过系列P10】(第十章:11题中断系统的工作原理及应用)经典例题盘点(带图解析)
|
6月前
|
人工智能 算法 Java
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1005 数字游戏
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1005 数字游戏
109 0