• 大小: 4KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-13
  • 语言: 其他
  • 标签: ds3231  C_CODE  

资源简介

DS3231是低成本,高精度I2C实时时钟(RTC),具有集成的温补晶体振荡器(TCXO)和1个32.768kHz的晶体。该晶体包含电池输入端,断开主电源仍可保持精确计时。

资源截图

代码片段和文件信息

#include “ds3231.h“
#include “delay.h“
#include “usart.h“
#include “string.h“

u8 Week;
static u8 sec_tempday_temptem_temp;

//BCD转换为Byte
u8 BCD2_Hex(u8 val)
{
        u8 temp;
        temp = val & 0x0f;
        val>>= 4;
        val &= 0x0f;
        val *= 10;
        temp+= val;
        return temp;
}

//B转换为BCD
u8 HEX2_Bcd(u8 val)
{
        u8 ijk;
        i = val/10;
        j = val%10;
        k = j+(i<<4);
        return k;
}



//初始化IIC
void IIC_Init(void)
{                                             
        GPIO_InitTypeDef GPIO_InitStructure;
        //RCC->APB2ENR|=1<<4;//先使能外设IO PORTB时钟 
        RCC_APB2PeriphClockCmd(        RCC_APB2Periph_GPIOA ENABLE );        
           
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;   //推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA &GPIO_InitStructure);

        IIC_SCL=1;
        IIC_SDA=1;

}
//产生IIC起始信号
void IIC_Start(void)
{
        SDA_OUT();     //sda线输出
        IIC_SDA=1;                    
        IIC_SCL=1;
        delay_us(5);
        IIC_SDA=0;//START:when CLK is highDATA change form high to low 
        delay_us(5);
        IIC_SCL=0;//钳住I2C总线,准备发送或接收数据 
}          
//产生IIC停止信号
void IIC_Stop(void)
{
        SDA_OUT();//sda线输出
        delay_us(5);
        IIC_SCL=0;
        delay_us(5);
        IIC_SDA=0;//STOP:when CLK is high DATA change form low to high
        delay_us(5);
        IIC_SCL=1; 
        delay_us(5);
        IIC_SDA=1;//发送I2C总线结束信号
        delay_us(5);                                                                   
}
//等待应答信号到来
//返回值:1,接收应答失败
//        0,接收应答成功
u8 IIC_Wait_Ack(void)
{
        u8 ucErrTime=0;
        SDA_IN();      //SDA设置为输入  
        IIC_SDA=1;delay_us(2);           
        IIC_SCL=1;delay_us(2);         
        while(READ_SDA)
        {
                ucErrTime++;
                if(ucErrTime>250)
                {
                        IIC_Stop();
                        return 1;
                }
        }
        IIC_SCL=0;//时钟输出0            
        return 0;  

//产生ACK应答
void IIC_Ack(void)
{
        IIC_SCL=0;
        SDA_OUT();
        IIC_SDA=0;
        delay_us(5);
        IIC_SCL=1;
        delay_us(5);
        IIC_SCL=0;
}
//不产生ACK应答                    
void IIC_NAck(void)
{
        IIC_SCL=0;
        SDA_OUT();
        IIC_SDA=1;
        delay_us(5);
        IIC_SCL=1;
        delay_us(5);
        IIC_SCL=0;
}                                                                              
//IIC发送一个字节
//返回从机有无应答
//1,有应答
//0,无应答                          
void IIC_Send_Byte(u8 txd)
{                        
    u8 t;   
    SDA_OUT();             
    IIC_SCL=0;//拉低时钟开始数据传输
    for(t=0;t<8;t++)
    {              
        IIC_SDA=(txd&0x80)>>7;
        txd<<=1;           
              

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-08-15 08:39  DS3231\
     文件        3594  2018-08-09 21:13  DS3231\DS3231.h
     文件        8898  2018-08-09 23:09  DS3231\DS3232.c

评论

共有 条评论