#include "RTC.h" #include "delay.h" calendar_obj calendar; //Ê®½øÖÆ sClockBCD Time_BCD_g; //BCD //IIC ½ÓÊÜÊý¾ÝÁÙʱ»º³åÇø u8 I2C_RECV_DATA[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00};//second minutes hour week date month year /******************************************* IIC ÐźŽáÊøÐźź¯Êý ********************************************/ // // void I2C_STOP(void) // // { // // SDA_OUT();//sdaÏßÊä³ö // // IIC_SCL=0; // // IIC_SDA=0;//STOP:when CLK is high DATA change form low to high // // delay_us(3); // // IIC_SCL=1; // // IIC_SDA=1;//·¢ËÍI2C×ÜÏß½áÊøÐźŠ// // delay_us(3); // // } // /******************************************* // IIC ÐÅºÅÆðʼÐźź¯Êý // ********************************************/ // void I2C_START(void) // { // SDA_OUT(); //sdaÏßÊä³ö // IIC_SDA=1; // IIC_SCL=1; // delay_us(3); // IIC_SDA=0;//START:when CLK is high,DATA change form high to low // // DS1339_SDA_LOW; // delay_us(3); // IIC_SCL=0; // } // ////////////////////// // //µÈ´ýÓ¦´ðÐźŵ½À´ // //·µ»ØÖµ£º1£¬½ÓÊÕÓ¦´ðʧ°Ü // // 0£¬½ÓÊÕÓ¦´ð³É¹¦ // u8 I2C_Wait_Ack(void) // { // u8 ucErrTime=0; // SDA_IN(); //SDAÉèÖÃΪÊäÈë // IIC_SCL=1;delay_us(3); // while(READ_SDA) // { // ucErrTime++; // if(ucErrTime>250) // { // I2C_STOP(); // return 1; // } // } // IIC_SCL=0;//ʱÖÓÊä³ö0 // return 0; // } // //²úÉúACKÓ¦´ð // void I2C_Ack(void) // { // IIC_SCL=0; // SDA_OUT(); // IIC_SDA=0; // delay_us(3); // IIC_SCL=1; // delay_us(3); // IIC_SCL=0; // delay_us(3); // } // //²»²úÉúACKÓ¦´ð // void I2C_NAck(void) // { // IIC_SCL=0; // SDA_OUT(); // IIC_SDA=1; // delay_us(3); // IIC_SCL=1; // delay_us(3); // IIC_SCL=0; // } // /******************************************* // IIC ·¢ËÍ×Ö½Úº¯Êý // ²ÎÊý 1£ºÒª·¢ËÍ×Ö½ÚÖµ // return £ºÎÞ·µ»Ø // ********************************************/ // void I2C_TxByte(unsigned char nValue) // { // int i; // SDA_OUT(); // IIC_SCL=0; // for(i = 0;i < 8;i++) // { // if(nValue & 0x80) // IIC_SDA=1; // else // IIC_SDA=0; // nValue <<= 1; // delay_us(3); // IIC_SCL=1; // delay_us(3); // IIC_SCL=0; // delay_us(3); // } // } // /******************************************* // IIC ½ÓÊÕ×Ö½Úº¯Êý // ²ÎÊý ÎÞ // return £ºÎÞ·µ»Ø // ********************************************/ // u8 I2C_RxByte(void) // { // unsigned char nTemp = 0; // int i; // // SDA_IN();//SDAÉèÖÃΪÊäÈë // // for(i = 0;i < 8;i++) // { // IIC_SCL=1; // if(READ_SDA) // { // nTemp |= (0x01 << (7-i)); // } // delay_us(3); // IIC_SCL=0; // delay_us(3); // } // return nTemp; // } // /******************************************* // IIC ·¢ËÍÊý×麯Êý // ²ÎÊý 1 num : ·¢ËÍ×Ö½ÚÊý // 2 device_addr : iicÄ¿±êµØÖ· // 3 *data £º·¢ËÍÊý×鵨ַ // return £ºÎÞ·µ»Ø // ********************************************/ // void I2C_Write(u8 num, u8 Write_addr,u8 *data) // { // int i = 0; // unsigned char *send_data = data; // I2C_START(); // I2C_TxByte(DS1339_Write_Add); // I2C_Wait_Ack(); // I2C_TxByte(Write_addr); // // for(i = 0;i < num;i++) // { // I2C_Wait_Ack(); // I2C_TxByte(send_data[i]); // } // I2C_STOP(); // } // /******************************************* // IIC ¶ÁÈ¡Êý×麯Êý // ²ÎÊý 1 num : ·¢ËÍ×Ö½ÚÊý // 2 device_addr : iicÄ¿±êµØÖ· // 3 *data £º½ÓÊÕÊý×鵨ַ // return £ºÎÞ·µ»Ø // ********************************************/ // void I2C_Read(u8 num, u8 Read_addr) // { // u8 i = 0; // I2C_START(); // I2C_TxByte(DS1339_Write_Add); // I2C_Wait_Ack(); // I2C_TxByte(Read_addr); // I2C_Wait_Ack(); // // I2C_START(); // I2C_TxByte(DS1339_Read_Add); // // for(i = 0; i < num;i++) // { // I2C_Ack(); // I2C_RECV_DATA[i] = I2C_RxByte(); // } // I2C_NAck(); // I2C_STOP(); // } // u8 OSFBIT_Check(void) // { // I2C_Read(1,DS1339_Status_Reg); // if(I2C_RECV_DATA[0]&0x80) // return 1; // else // return 0; // } // void OSFBIT_SetLow(void) // { // u8 a=0; // I2C_Write(1,DS1339_Status_Reg,&a); // } void IIC_Start(void) { SDA_OUT(); IIC_SCL=1; IIC_SDA=1; delay_us(10); IIC_SDA=0; delay_us(10); IIC_SCL=0; delay_us(10); } void IIC_Stop(void) { u8 i; SDA_OUT();//sda??? IIC_SDA=0; delay_us(10); IIC_SCL=1; delay_us(10); IIC_SDA=1; for(i=0;i<5;i++) { delay_us(10); } } u8 IIC_Wait_Ack(void) { u8 ucErrTime=0; SDA_IN(); //SDA????? delay_us(10); delay_us(10); while(READ_SDA) { ucErrTime++; if(ucErrTime>250) { IIC_Stop(); return 1; } } IIC_SCL=0;//????0 return 0; } void IIC_Ack(void) { SDA_OUT(); IIC_SDA=0;; delay_us(10); IIC_SCL=1; delay_us(10); IIC_SCL=0; delay_us(10); } void IIC_NAck(void) { SDA_OUT(); IIC_SDA=1;; delay_us(10); IIC_SCL=1; delay_us(10); IIC_SCL=0; delay_us(10); } void IIC_Send_Byte(u8 txd) { u8 i; SDA_OUT(); for(i=0;i<8;i++) { if(txd & 0x80) IIC_SDA=1; else IIC_SDA=0; txd <<= 1; delay_us(10); IIC_SCL=1; delay_us(10); IIC_SCL=0; } delay_us(10); IIC_SCL=1; delay_us(10); IIC_SCL=0; } u8 IIC_Read_Byte(unsigned char ack) { u8 i,receive=0; SDA_IN();//SDA????? for(i=0;i<8;i++) { IIC_SCL=1; delay_us(10); receive <<=1; if(READ_SDA) receive |= 0x01; IIC_SCL=0; delay_us(10); } SDA_OUT(); return receive; } void R8025AC_Read(u8 sadd, u8 *buf, u8 len) { u8 i; IIC_Start(); IIC_Send_Byte(0x64); IIC_Send_Byte(sadd); IIC_Start(); IIC_Send_Byte(0x65); for(i=0;i>4)*10+(I2C_RECV_DATA[0]&0x0f); calendar.min=((I2C_RECV_DATA[1]&0xf0)>>4)*10+(I2C_RECV_DATA[1]&0x0f); calendar.hour=((I2C_RECV_DATA[2]&0xf0)>>4)*10+(I2C_RECV_DATA[2]&0x0f); calendar.week=I2C_RECV_DATA[3]; calendar.date=((I2C_RECV_DATA[4]&0xf0)>>4)*10+(I2C_RECV_DATA[4]&0x0f); calendar.month=((I2C_RECV_DATA[5]&0xf0)>>4)*10+(I2C_RECV_DATA[5]&0x0f); calendar.year=2000+((I2C_RECV_DATA[6]&0xf0)>>4)*10+(I2C_RECV_DATA[6]&0x0f); } void test_rtc(void) { // u8 time_read[7]; //ÉèÖÃʱ¼ä // Time_Set(2019,11,11,1,12,12,12); while(1) { //Time_Set(2019,11,11,1,12,12,12); delay_ms(888); // Get_Time(); } }