?? ds1302.c
字號:
#include"DS1302.h"
#include"Port.h"
#include "Lcd.h"
#include "Variable.h"
#include "AD_key.h"
#include "LC75883.h"
#define TESTWB 0
void vDS1302_SendByte(UCHAR Command,UCHAR XmtDat)
{
UCHAR i;
Timer_CE=0;
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
Timer_CLK=0;
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
Timer_CE=1;
for(i=0;i<8;i++)
{
Timer_Data_OUT= (Command&0x01);
Command = Command >> 1;
Timer_CLK=1;
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
Timer_CLK=0;
asm("nop");
asm("nop");
asm("nop");
}
for(i=0;i<8;i++)
{
Timer_Data_OUT= (XmtDat&0x01);
XmtDat = XmtDat >> 1;
Timer_CLK=1;
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
Timer_CLK=0;
asm("nop");
asm("nop");
asm("nop");
}
Timer_CE=0;
}
/*;接收數據程序;
//;名稱:Receive_Byte
//;描述:從被控器DS1302 接收1個字節數據
//;命令字節地址在Command 中
//;接收的數據在RcvDat 緩沖區中
//;*************************************************************/
UCHAR ucDS1302_ReceiveByte(UCHAR Command)
{
UCHAR i, RcvDat=0;
Timer_CE=0;
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
Timer_CLK=0;
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
Timer_CE=1;
for(i=0;i<8;i++)
{
Timer_Data_OUT= (Command&0x01);
Command = Command >> 1;
Timer_CLK=1;
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
Timer_CLK=0;
asm("nop");
asm("nop");
asm("nop");
}
Timer_Data_Mode = IN;
for(i=0;i<7;i++)
{
if(Timer_Data_IN/*DS1302_IO*/)
RcvDat|=0x80;
RcvDat= RcvDat >> 1;
Timer_CLK=1;
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
Timer_CLK=0;
asm("nop");
asm("nop");
asm("nop");
}
/*if(IO_DATA)RcvDat|=0x80;*/
Timer_CE=0;
Timer_Data_Mode = OUT;
return RcvDat;
}
/*允許數據寫入寄存器*/
void vDS1302_WriteEnable(void)
{
vDS1302_SendByte(ds_com,00);
}
/*禁止數據寫入寄存器*/
void vDS1302_WriteDisable(void)
{
vDS1302_SendByte(ds_com,0x80);
}
/*起動時鐘操作*/
void vDS1302_OscEnable(void)
{
vDS1302_SendByte(ds_sec,0x00);
}
/*鐘停止位操作*/
void vDS1302_OscDisable(void)
{
vDS1302_SendByte(ds_sec,0x80);
}
void vDS1302_limit(void)
{
vRead_Time();
vDS1302_WriteEnable();
/*chu0524Lost clock setting by rapid recycling power*/
Time.ucMin = (Time.ucMin/10)<<4 | Time.ucMin%10;
vDS1302_Write(1,Time.ucMin);
Time.ucSecond=((Time.ucSecond/10*16)|(Time.ucSecond%10));
Time.ucSecond&= 0x7f;
vDS1302_SendByte(ds_sec,Time.ucSecond);
vDS1302_SendByte(0x90,0xa5); /*使用涓流充電,TCS 1010,DS 01,RS 10*/
}
UCHAR ucDS1302_Read(UCHAR address)
{
UCHAR dat;
vDS1302_WriteEnable();
switch(address)
{
case 0:dat=ucDS1302_ReceiveByte(ds_sec+1);break;
case 1:dat=ucDS1302_ReceiveByte(ds_min+1);break;
case 2:dat=ucDS1302_ReceiveByte(ds_hour+1);break;
case 3:dat=ucDS1302_ReceiveByte(ds_day+1);break;
case 4:dat=ucDS1302_ReceiveByte(ds_week+1);break;
case 5:dat=ucDS1302_ReceiveByte(ds_month+1);break;
case 6:dat=ucDS1302_ReceiveByte(ds_year+1);break;
case 7:dat=ucDS1302_ReceiveByte(ds_time_second +1);break;
case 8:dat=ucDS1302_ReceiveByte(ds_time_hour + 1);break;
}
vDS1302_WriteDisable();
return(dat);
}
void vDS1302_Write(UCHAR address,UCHAR dat)
{
vDS1302_WriteEnable();
switch(address)
{
case 0:vDS1302_SendByte(ds_sec,dat);break;
case 1:vDS1302_SendByte(ds_min,dat);break;
case 2:vDS1302_SendByte(ds_hour,dat);break;
case 3:vDS1302_SendByte(ds_day,dat);break;
case 4:vDS1302_SendByte(ds_week,dat);break;
case 5:vDS1302_SendByte(ds_month,dat);break;
case 6:vDS1302_SendByte(ds_year,dat);break;
case 7:vDS1302_SendByte(ds_time_second,dat);break;
case 8:vDS1302_SendByte(ds_time_hour,dat);break;
}
vDS1302_WriteDisable();
}
UCHAR ucSencond;
void vRead_Time(void)
{
if(Time_Set_Flag)
{
if(uiTime_Flash_Num > 500)
{
uiTime_Flash_Num = 0;
Time_Flash_Flag =! Time_Flash_Flag;
}
ucSencond = Time.ucSecond;
if(ucKeyq)
{
Time_Flash_Flag = 0;
uiExit_num = 0;
uiTime_Flash_Num = 0;
}
if(!Disp_Flag)
Time_Set_Flag = 0;
if(uiExit_num > 5000) /* 10S */
{
Time_Set_Flag = 0;
Disp_Flag = 0;
Time_Flash_Flag = 0;
vDS1302_Write(0,0); /* ? */
if(ucModeKey == RADIO)
Reflash_radio_disp_register();
}
if(ucKeyq == ADVANCE && !ucPSflash)
{
Time.ucMin ++;
if(Time.ucMin == 60)
Time.ucMin = 0;
Time.ucMin = (Time.ucMin/10)<<4 | Time.ucMin%10;
vDS1302_Write(1,Time.ucMin);
ucKeyq = 0;
vDS1302_Write(0,0);
ucPSflash = T300MS;
}
if(ucKeyq == BACK && !ucPSflash)
{
Time.ucHour ++;
if(Time.ucHour == 24)
Time.ucHour = 0;
Time.ucHour = (Time.ucHour/10)<<4 | Time.ucHour%10;
vDS1302_Write(2,Time.ucHour);
ucKeyq = 0;
ucPSflash = T300MS;
}
if(ucKeyq == ADVANCE || ucKeyq == BACK)
ucKeyq = 0;
}
Time.ucHour = ucDS1302_Read(2);
Time.ucHour = (Time.ucHour >> 4)*10 + (Time.ucHour & 0x0f);
if(Time.ucHour >=24)/*chu0409 對時鐘讀錯的時候進行糾錯*/
Time.ucHour = 0;
Time.ucMin = ucDS1302_Read(1);
Time.ucMin = (Time.ucMin >> 4)*10 + (Time.ucMin & 0x0f);
if(Time.ucMin >=60)/*chu0409 對時鐘讀錯的時候進行糾錯*/
Time.ucMin = 0;
Time.ucSecond = ucDS1302_Read(0);
Time.ucSecond = (Time.ucSecond >> 4)*10 + (Time.ucSecond & 0x0f);
if(Time.ucSecond >=60)/*chu0409 對時鐘讀錯的時候進行糾錯*/
Time.ucSecond = 0;
}
#if 1
void DS_main(void)
{
UCHAR hg,hd,mg,md;
UCHAR ucTime;
vRead_Time();
#if 1
#if 0
if(!Time_Set_Flag)
if(Time.ucSecond== Time_rember)
return;
#endif
if(Audio_Flag || Mute_Flag || Software_Flag ||FJensen_Logo)
return;
if(Fpa_in || FLogo || FDoorDet)
return;
if(!Time_Set_Flag)
{
if(!ucTimeFlash)
{
Time_Dot_Flash_Flag =! Time_Dot_Flash_Flag;
ucTimeFlash = 0xFF;
}
else
return;
}
else
Time_Dot_Flash_Flag = 1;
if((XM_Display_Flag || SR_Disp_Flag || FiPod_doulbe_display || FCD_Disp) && Power_Flag)
{
/* 070419 dawei : aim to no time display while change mode in double mode */
if(ucModeKey != SIRIUS && SR_Disp_Flag)
SR_Disp_Flag = 0;
if(FiPod_doulbe_display && ucModeKey != iPOD)
FiPod_doulbe_display = 0;
if(FCD_Disp && ucModeKey != CD_MP3)
FCD_Disp = 0;
return;
}
#if USE_XM
/* 061130 : For Diagnostic*/
if(Fdiagdisplay)
return;
#endif
if(!Clock_Flag &&(Time.ucHour == 0))
ucTime = 12;
else if(!Clock_Flag && Time.ucHour > 12)
ucTime = Time.ucHour - 12;
else
ucTime = Time.ucHour;
hg = ucTime/10;
hd = ucTime %10;
mg = Time.ucMin/10;
md = Time.ucMin % 10;
if(!Power_Flag && FDoorDisp && !FLcdTest && !FPowerLowDisp)
{
#if TESTWB
vUC1608DoubleLine(1,0,' ');
vUC1608DoubleLine(1,1,gwb.ulGwb_Wbalert_Time/100);
vUC1608DoubleLine(1,2,gwb.ulGwb_Wbalert_Time%100/10);
vUC1608DoubleLine(1,3,gwb.ulGwb_Wbalert_Time%100%10);
vUC1608DoubleLine(1,4,' ');
vUC1608DoubleLine(1,5,' ');
vUC1608DoubleLine(1,6,' ');
vUC1608DoubleLine(1,7,gwb.ucGwb_currnum);
#else
if(!Clock_Flag)
{
if(!Time_Flash_Flag)
{
if(FPowerLow)
{
vUC1608DoubleLine(1,1,' ');
vUC1608DoubleLine(1,2,' ');
vUC1608DoubleLine(1,3,' ');
vUC1608DoubleLine(1,9,' ');
vUC1608DoubleLine(1,10,' ');
vUC1608DoubleLine(1,11,' ');
vLC75883_WriteChar(0,' ');
vLC75883_WriteChar(1,' ');
vLC75883_WriteChar(6,' ');
vLC75883_WriteChar(7,' ');
}
if(ucTime >= 10)
{
vUC1608DoubleLine(1,4,hg);
vLC75883_WriteChar(2,hg);
}
else
{
vUC1608DoubleLine(1,4,' ');
vLC75883_WriteChar(2,' ');
}
vUC1608DoubleLine(1,5,hd);
vUC1608DoubleLine(1,7,mg);
vUC1608DoubleLine(1,8,md);
vLC75883_WriteChar(0,' ');
vLC75883_WriteChar(1,' ');
vLC75883_WriteChar(3,hd);
vLC75883_WriteChar(4,mg);
vLC75883_WriteChar(5,md);
vLC75883_WriteChar(6,' ');
}
else
{
vUC1608DoubleLine(1,4,' ');
vUC1608DoubleLine(1,5,' ');
vUC1608DoubleLine(1,7,' ');
vUC1608DoubleLine(1,8,' ');
vLC75883_WriteChar(2,' ');
vLC75883_WriteChar(3,' ');
vLC75883_WriteChar(4,' ');
vLC75883_WriteChar(5,' ');
}
if(Time_Dot_Flash_Flag)
{
vUC1608DoubleLine(1,6,':');
DOT_P2 = 1;
}
if(!Time_Dot_Flash_Flag && !Time_Set_Flag)
{
DOT_P2 = 0;
vUC1608DoubleLine(1,6,' ');
}
if(Time.ucHour > 11)
{
vUC1608DoubleLine(1,9,'P');
}
else
{
vUC1608DoubleLine(1,9,'A');
vLC75883_WriteChar(7,'a');
}
vUC1608DoubleLine(1,10,'M');
}
else
{
if(!Time_Flash_Flag)
{
if(FPowerLow)
{
vUC1608DoubleLine(1,1,' ');
vUC1608DoubleLine(1,2,' ');
vUC1608DoubleLine(1,3,' ');
vUC1608DoubleLine(1,9,' ');
vUC1608DoubleLine(1,10,' ');
vUC1608DoubleLine(1,11,' ');
vLC75883_WriteChar(0,' ');
vLC75883_WriteChar(1,' ');
vLC75883_WriteChar(6,' ');
vLC75883_WriteChar(7,' ');
}
vUC1608DoubleLine(1,5,hg);
vUC1608DoubleLine(1,6,hd);
vUC1608DoubleLine(1,8,mg);
vUC1608DoubleLine(1,9,md);
vLC75883_WriteChar(0,' ');
vLC75883_WriteChar(1,' ');
vLC75883_WriteChar(2,hg);
vLC75883_WriteChar(3,hd);
vLC75883_WriteChar(4,mg);
vLC75883_WriteChar(5,md);
vLC75883_WriteChar(6,' ');
vLC75883_WriteChar(7,' ');
}
else
{
vUC1608DoubleLine(1,5,' ');
vUC1608DoubleLine(1,6,' ');
vUC1608DoubleLine(1,8,' ');
vUC1608DoubleLine(1,9,' ');
vLC75883_WriteChar(2,' ');
vLC75883_WriteChar(3,' ');
vLC75883_WriteChar(4,' ');
vLC75883_WriteChar(5,' ');
}
if(Time_Dot_Flash_Flag)
{
vUC1608DoubleLine(1,7,':');
DOT_P2 = 1;
}
if(!Time_Dot_Flash_Flag && !Time_Set_Flag)
{
vUC1608DoubleLine(1,7,' ');
DOT_P2 = 0;
}
}
#endif
}
if(Power_Flag && Time_Flag && FDoorDisp/*&& !Disp_Flag*/)/*when logo display ,time don't display*/
{
if(!Clock_Flag)
{
/*if(!Time_Flash_Flag)*/
if(ucTime >= 10)
vUC1608TopBottom(1,15,hg,1);
else
vUC1608TopBottom(1,15,' ',1);
vUC1608TopBottom(1,16,hd,1);
vUC1608TopBottom(1,18,mg,1);
vUC1608TopBottom(1,19,md,1);
/*else
{
vUC1608TopBottom(1,15,' ',1);
vUC1608TopBottom(1,16,' ',1);
vUC1608TopBottom(1,18,' ',1);
vUC1608TopBottom(1,19,' ',1);
}*/
if(Time_Dot_Flash_Flag)
vUC1608TopBottom(1,17,':',1);
if(!Time_Dot_Flash_Flag/* && !Time_Set_Flag*/)
vUC1608TopBottom(1,17,' ',1);
if(Time.ucHour > 11)
vUC1608TopBottom(1,20,'P',1);
else
vUC1608TopBottom(1,20,'A',1);
/*vUC1608TopBottom(1,31,'M',1);*/
}
else
{
vUC1608TopBottom(1,15,' ',1);
vUC1608TopBottom(1,16,' ',1);
/*if(!Time_Flash_Flag)*/
{
vUC1608TopBottom(1,16,hg,1);
vUC1608TopBottom(1,17,hd,1);
vUC1608TopBottom(1,19,mg,1);
vUC1608TopBottom(1,20,md,1);
}
/* else
{
vUC1608TopBottom(1,16,' ',1);
vUC1608TopBottom(1,17,' ',1);
vUC1608TopBottom(1,19,' ',1);
vUC1608TopBottom(1,20,' ',1);
}*/
if(Time_Dot_Flash_Flag)
vUC1608TopBottom(1,18,':',1);
if(!Time_Dot_Flash_Flag/* && !Time_Set_Flag*/)
vUC1608TopBottom(1,18,' ',1);
}
}
if(FWireTime_Disp && Power_Flag && !FPowerLowDisp)
{
vLC75883_WriteChar(0,' ');/*chu0531清除時間顯示的時候多余的東西*/
vLC75883_WriteChar(1,' ');
vLC75883_WriteChar(6,' ');
vLC75883_WriteChar(7,' ');
if(ucTime >= 10)
vLC75883_WriteChar(2,hg);
else
vLC75883_WriteChar(2,' ');
vLC75883_WriteChar(3,hd);
vLC75883_WriteChar(4,mg);
vLC75883_WriteChar(5,md);
if(Time_Dot_Flash_Flag)
DOT_P2 = 1;
if(!Time_Dot_Flash_Flag && !Time_Set_Flag)
DOT_P2 = 0;
if( !Clock_Flag ) /* Jacky @070531 Only display A/P when 12H clock mode */
{
if(Time.ucHour > 11)
vLC75883_WriteChar(7,'p');
else
vLC75883_WriteChar(7,'a');
}
}
Time_rember = Time.ucSecond;
#endif
}
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -