#include "ex_rtc.h" #include "devicegpioinit.h" #include "para.h" #include "1lcd_new.h" #include "1lcd.h" #include "menu.h" #include "lcd_iic.h" calendar_obj calendar; NETTIME net_now_time; uint8_t Sending_flag; // RTCÄÖÖÓµ½Ê±£¬Åжϴ˴ÎÄÖÖÓÊDzɼ¯»¹ÊÇ·¢ËͱêÖ¾ uint8_t Last_Send_D, Last_Send_H, Last_Send_M; // BCD uint8_t Last_Sample_D, Last_Sample_H, Last_Sample_M; // BCD uint8_t Next_real_Sample_D, Next_real_Sample_H, Next_real_Sample_M; // HEX uint8_t Next_Sample_D, Next_Sample_H, Next_Sample_M; // bcd u8 RTC_cor; u8 I2C_RECV_DATA[20]; u8 RTC_Setting_Flag; void R8025T_read(u8 sadd, u8 *buf, u8 len) { u8 i; LCD_IIC_Start(); LCD_IIC_Send_Byte(RX8025_ADDR_WRITE); LCD_IIC_Send_Byte(sadd); LCD_IIC_Start(); LCD_IIC_Send_Byte(RX8025_ADDR_READ); for (i = 0; i < len - 1; i++) { buf[i] = LCD_IIC_Read_Byte(); LCD_IIC_Ack(); } buf[i] = LCD_IIC_Read_Byte(); LCD_IIC_NAck(); LCD_IIC_Stop(); } void R8025T_write(u8 sadd, u8 *buf, u8 len) { u8 i; LCD_IIC_Start(); LCD_IIC_Send_Byte(RX8025_ADDR_WRITE); LCD_IIC_Send_Byte(sadd); for (i = 0; i < len; i++) { LCD_IIC_Send_Byte(buf[i]); } LCD_IIC_Stop(); } void Time_Set(u16 year, u8 month, u8 date, u8 week, u8 hour, u8 min, u8 sec) { u8 time[7]; RTC_Setting_Flag = 1; RTC_GPIO_Init(); year = year & 0x00ff; if ((((sec & 0xf0) >> 4) * 10 + (sec & 0x0f)) < 60) { time[0] = sec; } else { time[0] = 0; } if ((((min & 0xf0) >> 4) * 10 + (min & 0x0f)) < 60) { time[1] = min; } else { time[1] = 0; } if ((((hour & 0xf0) >> 4) * 10 + (hour & 0x0f)) < 24) { time[2] = hour; } else { time[2] = 0; } time[3] = week; if (((((date & 0xf0) >> 4) * 10 + (date & 0x0f)) < 32) && ((((date & 0xf0) >> 4) * 10 + (date & 0x0f)) > 0)) { time[4] = date; } else { time[4] = 0x01; } if (((((month & 0xf0) >> 4) * 10 + (month & 0x0f)) < 13) && ((((month & 0xf0) >> 4) * 10 + (month & 0x0f)) > 0)) { time[5] = month; } else { time[5] = 0x01; } if ((((year & 0xf0) >> 4) * 10 + (year & 0x0f)) < 100) { time[6] = year; } else { time[6] = 0x15; } R8025T_write(0x00, time, 7); // delay_ms(100); delay_ms(10); // if(LCD_sleepTime) // { // if(LCD_TYPE_FLAG==0) // { // lcd_init(); // LCD_DisplayAll(); // }else // /*ÕâÀïÊÇÐÂÒº¾§²¿·Ö*/ // { // lcd_init_new(); // LCD_DisplayAll_New1(); // } // } RTC_Setting_Flag = 0; } void Get_Time(void) { // RTC_Setting_Flag = 1; // RTC_GPIO_Init(); R8025T_read(0x00, I2C_RECV_DATA, 7); if (((I2C_RECV_DATA[0] & 0xf0) >= 0x00) && ((I2C_RECV_DATA[0] & 0xf0) <= 0x50)) { if (((I2C_RECV_DATA[0] & 0x0f) >= 0) && ((I2C_RECV_DATA[0] & 0x0f) <= 9)) { calendar.sec = I2C_RECV_DATA[0]; } else { calendar.sec = 0; } } else { calendar.sec = 0; } if (((I2C_RECV_DATA[1] & 0xf0) >= 0x00) && ((I2C_RECV_DATA[1] & 0xf0) <= 0x50)) { if (((I2C_RECV_DATA[1] & 0x0f) >= 0) && ((I2C_RECV_DATA[1] & 0x0f) <= 9)) { calendar.min = I2C_RECV_DATA[1]; } else { calendar.min = 0; } } else { calendar.min = 0; } if ((((I2C_RECV_DATA[2] & 0xf0) >> 4) * 10 + (I2C_RECV_DATA[2] & 0x0f)) < 24) { if (((I2C_RECV_DATA[2] & 0xf0) >= 0x00) && ((I2C_RECV_DATA[2] & 0xf0) <= 0x20)) { if (((I2C_RECV_DATA[2] & 0x0f) >= 0) && ((I2C_RECV_DATA[2] & 0x0f) <= 9)) { calendar.hour = I2C_RECV_DATA[2]; } else { calendar.hour = 0; } } else { calendar.hour = 0; } } else { calendar.hour = 0; } calendar.week = I2C_RECV_DATA[3]; if (((((I2C_RECV_DATA[4] & 0xf0) >> 4) * 10 + (I2C_RECV_DATA[4] & 0x0f)) < 32) && ((((I2C_RECV_DATA[4] & 0xf0) >> 4) * 10 + (I2C_RECV_DATA[4] & 0x0f)) > 0)) { if (((I2C_RECV_DATA[4] & 0xf0) >= 0x00) && ((I2C_RECV_DATA[4] & 0xf0) <= 0x30)) { if (((I2C_RECV_DATA[4] & 0x0f) >= 0) && ((I2C_RECV_DATA[4] & 0x0f) <= 9)) { calendar.date = I2C_RECV_DATA[4]; } else { calendar.date = 0x01; } } else { calendar.date = 0x01; } } else { calendar.date = 0x01; } if (((((I2C_RECV_DATA[5] & 0xf0) >> 4) * 10 + (I2C_RECV_DATA[5] & 0x0f)) < 13) && ((((I2C_RECV_DATA[5] & 0xf0) >> 4) * 10 + (I2C_RECV_DATA[5] & 0x0f)) > 0)) { if (((I2C_RECV_DATA[5] & 0xf0) >= 0x00) && ((I2C_RECV_DATA[5] & 0xf0) <= 0x10)) { if (((I2C_RECV_DATA[5] & 0x0f) >= 0) && ((I2C_RECV_DATA[5] & 0x0f) <= 9)) { calendar.month = I2C_RECV_DATA[5]; } else { calendar.month = 0x12; } } else { calendar.month = 0x12; } } else { calendar.month = 0x12; } if ((((I2C_RECV_DATA[6] & 0xf0) >> 4) * 10 + (I2C_RECV_DATA[6] & 0x0f)) < 100) { if (((I2C_RECV_DATA[6] & 0xf0) >= 0x00) && ((I2C_RECV_DATA[6] & 0xf0) <= 0x90)) { if (((I2C_RECV_DATA[6] & 0x0f) >= 0) && ((I2C_RECV_DATA[6] & 0x0f) <= 9)) { calendar.year = 0x2000 + I2C_RECV_DATA[6]; } else { calendar.year = 0x2015; } } else { calendar.year = 0x2015; } } else { calendar.year = 0x2015; } delay_ms(100); printf("EXTERNAL RTC TIME = %X-%02X-%02X-%02X-%02X-%02X \r\n", calendar.year, calendar.month, calendar.date, calendar.hour, calendar.min, calendar.sec); } void set_RTC8025T_peroid_alarm() { u8 alarm[20]; RTC_Setting_Flag = 1; RTC_GPIO_Init(); delay_ms(1); alarm[0] = 0x00; alarm[1] = 0x05; // Counter Ϊ0x0500£¬¼´1280¼ÆÊý£¬ÅäºÏ64HzµÄƵÂÊ£¬²úÉú20SµÄ¼ÆÊ±ÄÖÖÓ alarm[2] = 0x19; // ¿ªÆôTime interrupt£¬FOUT Ϊ1hz(Õâ¸öËæ±ãÅä²»Ó°Ïì)£¬ ¼ÆÊ±µÄƵÂÊΪ64Hz¡£ alarm[3] = 0x00; alarm[4] = 0x50; // ζȲ¹³¥ÆµÂÊ2s£¨Ä¬ÈÏ£©£¬Ê¹ÄÜTime interrupt R8025T_write(0x0B, &alarm[0], 5); delay_ms(100); if (LCD_sleepTime) { if (LCD_TYPE_FLAG == 0) { lcd_init(); LCD_DisplayAll(); } else /*ÕâÀïÊÇÐÂÒº¾§²¿·Ö*/ { lcd_init_new(); LCD_DisplayAll_New1(); } } RTC_Setting_Flag = 0; }