#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;
|
}
|