模拟I2C通讯控制DS1307读写硬件时钟
#include "global.h"
#include "drv_ds1307.h"
#define I2C_CLK_PORT GPIOB
#define I2C_CLK_PIN GPIO_PIN_4
#define I2C_SDA_PORT GPIOB
#define I2C_SDA_PIN GPIO_PIN_5
#define SCL_High() GPIO_Init(I2C_CLK_PORT, I2C_CLK_PIN, GPIO_MODE_OUT_PP_HIGH_SLOW)
#define SCL_Low() GPIO_Init(I2C_CLK_PORT, I2C_CLK_PIN, GPIO_MODE_OUT_PP_LOW_SLOW)
#define SDA_High() GPIO_Init(I2C_SDA_PORT, I2C_SDA_PIN, GPIO_MODE_OUT_PP_HIGH_SLOW)
#define SDA_Low() GPIO_Init(I2C_SDA_PORT, I2C_SDA_PIN, GPIO_MODE_OUT_PP_LOW_SLOW)
#define SDAM() (GPIO_ReadInputData(I2C_SDA_PORT) & 0x20) ?1:0
#define SET_SCL_OUT() GPIO_Init(I2C_CLK_PORT, I2C_CLK_PIN, GPIO_MODE_OUT_PP_HIGH_SLOW)
#define SET_SDA_OUT() GPIO_Init(I2C_SDA_PORT, I2C_SDA_PIN, GPIO_MODE_OUT_PP_HIGH_SLOW)
#define SET_SDA_IN() GPIO_Init(GPIOA, GPIO_PIN_0, GPIO_MODE_IN_PU_NO_IT)
extern uint8_t Ds1307_WriteByte(uint8_t WriteAddr,uint8_t WriteData);
extern uint8_t Ds1307_ReadByte(uint8_t ReadAddr);
extern void Ds1307_WriteData();
extern void Ds1307_ReadData();
extern void Init_Timer();
extern void Write_Time();
uint8_t g_u8ReadData[8];
/*******************************************************************************
// Function: I2C_Int
// Description: 模拟I2C 与ds1307端口初始化
// Param:
// Return:
// Author: Huangzhigang 2014-0410
*******************************************************************************/
static void I2C_Int(void)
{
SET_SDA_OUT();
SET_SCL_OUT();
}
/*******************************************************************************
// Function: Delay_5us
// Description: 微妙级延时函数 延时时间约为16us
// Param:
// Return: fcpu 16MHz 时
// Author: Huangzhigang 2014-0410
*******************************************************************************/
static void Delay_5us(void)
{
uint8_t i;
for (i=5; i>0; i--);
}
/*******************************************************************************
// Function: I2C_Start
// Description: I2C 开始传输信号 当SCL 为高时 SDA由高变低
// Param:
// Return:
// Author: Huangzhigang 2014-0410
***************