使用STM32驱动DS1302时钟模块并显示在OLED0.96屏幕上

K_A38_001 基于STM32等单片机驱动DS1302时钟模块 OLED0.96显示

  • 所有资源导航
  • 一、资源说明
  • 二、基本参数
  • 参数
  • 引脚说明
  • 三、驱动说明
  • 时序
  • 对应程序:
  • 四、部分代码说明
  • 1、接线引脚定义
  • 1.1、STC89C52RC+DS1302时钟模块
  • 1.2、STM32F103C8T6+DS1302时钟模块
  • 五、基础知识学习与相关资料下载
  • 六、视频效果展示与程序资料获取
  • 七、注意事项
  • 八、接线说明
  • STC89C52RC
  • STM32F103C8T6
  • 请添加图片描述

    所有资源导航

    其他资料目录 直戳跳转

    一、资源说明

    单片机型号 测试条件 模块名称 代码功能
    STC89C52RC 晶振11.0592M DS1302时钟模块 STC89C52RC驱动DS1302时钟模块 串口与OLED0.96双显示
    STM32F103C8T6 晶振8M/系统时钟72M DS1302时钟模块 STM32F103C8T6驱动DS1302时钟模块 串口与OLED0.96双显示

    二、基本参数

    参数

    实时时钟具有能计算 2100 年之前的秒 分 时 日 日期 星期 月 年的能力 还有闰年调整的能力
    31 X8 位暂存数据存储 RAM
    串行 I/O 口方式使得管脚数量最少
    宽范围工作电压 2.0 5.5V
    工作电流 2.0V 时,小于 300nA
    读/写时钟或 RAM 数据时 有两种传送方式 单字节传送和多字节传送 字符组方式
    8 脚 DIP 封装或可选的 8 脚 SOIC 封装 根据表面装配
    简单 3 线接口
    与 TTL 兼容 Vcc=5V
    可选工业级温度范围 -40 +85 °C

    引脚说明

    DS1302时钟模块 引脚说明
    VIN 正极 5V供电
    GND GND 电源负极
    RST 复位脚
    DAT 数据输入/输出引脚
    CLK 串行时钟

    三、驱动说明

    时序

    请添加图片描述

    对应程序:

    以51为例

    /*******************************************************************************
    * 函 数 名         : Ds1302Write
    * 函数功能		   : 向DS1302命令(地址+数据)
    * 输    入         : addr,dat
    * 输    出         : 无
    *******************************************************************************/
    
    void Ds1302Write(uint8_t addr, uint8_t dat)
    {
    	uint8_t n;
    	RST = 0;
    	SCLK = 0;//先将SCLK置低电平。
    	RST = 1; //然后将RST(CE)置高电平。
    
    	for (n=0; n<8; n++)//开始传送八位地址命令
    	{
    		DSIO = addr & 0x01;//数据从低位开始传送
    		addr >>= 1;
    		SCLK = 1;//数据在上升沿时,DS1302读取数据
    		 
    		SCLK = 0;
    		 
    	}
    	for (n=0; n<8; n++)//写入8位数据
    	{
    		DSIO = dat & 0x01;
    		dat >>= 1;
    		SCLK = 1;//数据在上升沿时,DS1302读取数据
    		 
    		SCLK = 0;
    		 	
    	}	
    		 
    	RST = 0;//传送数据结束
    	 
    }
    
    /*******************************************************************************
    * 函 数 名         : Ds1302Read
    * 函数功能		   : 读取一个地址的数据
    * 输    入         : addr
    * 输    出         : dat
    *******************************************************************************/
    
    uint8_t Ds1302Read(uint8_t addr)
    {
    	uint8_t n,dat,dat1;
    	RST = 0;
    	SCLK = 0;//先将SCLK置低电平。
    	RST = 1;//然后将RST(CE)置高电平。
    	for(n=0; n<8; n++)//开始传送八位地址命令
    	{
    		DSIO = addr & 0x01;//数据从低位开始传送
    		addr >>= 1;
    		SCLK = 1;//数据在上升沿时,DS1302读取数据
    		 
    		SCLK = 0;//DS1302下降沿时,放置数据
    		 
    	}
    	 
    	for(n=0; n<8; n++)//读取8位数据
    	{
    		dat1 = DSIO;//从最低位开始接收
    		dat = (dat>>1) | (dat1<<7);
    		SCLK = 1;
    		 
    		SCLK = 0;//DS1302下降沿时,放置数据
    		 
    	}
    
    	RST = 0;
    	 	//以下为DS1302复位的稳定时间,必须的。
    	SCLK = 1;
    	 
    	DSIO = 0;
    	 
    	DSIO = 1;
    	 
    	return dat;	
    }
    
    /*******************************************************************************
    * 函 数 名         : Ds1302Init
    * 函数功能		   : 初始化DS1302.
    * 输    入         : 无
    * 输    出         : 无
    *******************************************************************************/
    
    void Ds1302Init(void)
    {
    	uint8_t n;
    	Ds1302Write(0x8E,0X00);		 //禁止写保护,就是关闭写保护功能
    	for (n=0; n<7; n++)//写入7个字节的时钟信号:分秒时日月周年
    	{
    		Ds1302Write(WRITE_RTC_ADDR[n],TIME[n]);	
    	}
    	Ds1302Write(0x8E,0x80);		 //打开写保护功能
    }
    
    /*******************************************************************************
    * 函 数 名         : Ds1302ReadTime
    * 函数功能		   : 读取时钟信息
    * 输    入         : 无
    * 输    出         : 无
    *******************************************************************************/
    
    void Ds1302ReadTime(void)
    {
    	uint8_t n;
    	for (n=0; n<7; n++)//读取7个字节的时钟信号:分秒时日月周年
    	{
    		TIME[n] = Ds1302Read(READ_RTC_ADDR[n]);
    	}
    		
    }
    

    四、部分代码说明

    1、接线引脚定义

    需要自定义引脚可在此处更改,STM32要自定义引脚的话也要注意引脚时钟使能的更改

    1.1、STC89C52RC+DS1302时钟模块

    //DS1302时钟模块引脚定义
    sbit DSIO=P1^2;
    sbit RST=P1^3;
    sbit SCLK=P1^4;
    
    
    //OLED0.96模块引脚定义
    sbit SCL=P1^1; //串行时钟
    sbit SDA=P1^0; //串行数据
    

    1.2、STM32F103C8T6+DS1302时钟模块

    //DS1302时钟模块引脚定义
    #define DSIO_H   GPIO_SetBits(GPIOA,GPIO_Pin_0)
    #define DSIO_L   GPIO_ResetBits(GPIOA,GPIO_Pin_0)
    #define RST_H    GPIO_SetBits(GPIOA,GPIO_Pin_1)
    #define RST_L    GPIO_ResetBits(GPIOA,GPIO_Pin_1)
    #define SCLK_H   GPIO_SetBits(GPIOA,GPIO_Pin_2)
    #define SCLK_L   GPIO_ResetBits(GPIOA,GPIO_Pin_2)
    
    //OLED0.96模块引脚定义					
    #define OLED_SCLK_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_8)//SCL
    #define OLED_SCLK_Set() GPIO_SetBits(GPIOB,GPIO_Pin_8)
    
    #define OLED_SDIN_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_9)//SDA
    #define OLED_SDIN_Set() GPIO_SetBits(GPIOB,GPIO_Pin_9)
    

    五、基础知识学习与相关资料下载

    1、STC89C52RC程序下载 直戳跳转

    2、STM32F103C8T6程序下载
    (1)串口下载 直戳跳转
    (2)ST-LINK下载 直戳跳转
    (3)J-LINK下载 直戳跳转
    (4)DAP-LINK下载 直戳跳转

    3、OLED0.96程序说明 直戳跳转

    4、串口助手下载与使用
    (1)安信可调试助手使用 直戳跳转
    (2) sscom33串口调试助手使用 直戳跳转
    (3)STC-ISP串口调试助手使用 直戳跳转

    六、视频效果展示与程序资料获取

    视频连接 直戳跳转
    资料获取 ( 滑到最后添加个人号)

    七、注意事项

    1、VCC GND请勿接反,接反易烧
    2、OLED显示异常时,排除接线接触不良

    八、接线说明

    STC89C52RC

    
    /************************************************************************************
    //  功能描述   : DS1302块测试程序
    //  测试条件   : STC89C52RC   晶振11.0592
    接线
    DS1302 --------------------------------STC89C52RC
    VCC------------------------------------5V
    GND------------------------------------GND
    CLK------------------------------------P1.4
    DAT------------------------------------P1.2
    RST------------------------------------P1.3
    
    OLED0.96(IIC) -------------------------STC89C52RC
    VCC------------------------------------5V
    GND------------------------------------GND
    SCL------------------------------------P1^1
    SDA------------------------------------P1^0
    *************************************************************************************/
    

    STM32F103C8T6

      
    /************************************************************************************
    //  功能描述   : DS1302块测试程序
    //  测试条件   : STM32F103C8T6   晶振8M  系统时钟72M
    接线
    DS1302---------------------------------STM32F103C8T6
    VCC------------------------------------5V
    GND------------------------------------GND
    CLK------------------------------------PA_2 //
    DAT------------------------------------PA_0 //	
    RST------------------------------------PA_1 //	
    
    OLED0.96
    VCC------------------------------------3.3V
    GND------------------------------------GND
    SCL------------------------------------PB_8 //SCL
    SDA------------------------------------PB_9 //SDA	
    *************************************************************************************/
    
    物联沃分享整理
    物联沃-IOTWORD物联网 » 使用STM32驱动DS1302时钟模块并显示在OLED0.96屏幕上

    发表评论