?? pcf8563.c
字號:
/////////////////////////////////////////////////
// 功能:初始化時鐘pcf8563
void instpcf8563()
{
tp=(char *)temd;
*tp=0x00;//普通模式TEST1=0, 芯片時鐘運行STOP=0,電源復位功能失效TESTC=0
*(tp+1)=0x00;//
ISendStr(0xa2,0x00,tp,2,SUBADDR8);
*tp=0x80;
*(tp+1)=0x80;
*(tp+2)=0x80;
*(tp+3)=0x80;
*(tp+4)=0x00;//CLOCKOUT 禁止
*(tp+5)=0x00;//倒計數定時 禁止
*(tp+6)=0x00;
ISendStr(0xa2,0x09,tp,7,SUBADDR8);
}
/////////////////////////////////////////////////////////
//功能:讀取時間數據
// *P 為指向接收本函數輸出數據的緩沖區
// 格式:0---7: 秒 分 時 日 星期 月 年(低) 年(高)
// 返回值:BIT =0出錯 =1正確
// 數據格式為BCD碼
////////////////////////////////////////////////////////
bit ReadSysClk(unsigned char* p)
{
if(IRcvStr(0xa2,0x02,p,7,SUBADDR8))
//if(t_IRcvStr(0xa2,0x02,p,7))
{
if((*p&0x80)==0x00)
{
*(p+1)=*(p+1)&0x7f;//分
*(p+2)=*(p+2)&0x3f;//時
*(p+3)=*(p+3)&0x3f;//日
*(p+4)=*(p+4)&0x07;//星期
*(p+5)=*(p+5)&0x9f;//月
if((*(p+5)&0x80)==0x80)//世紀
{
*(p+7)=0x19;//
}
else
{
*(p+7)=0x20;//
}
*(p+5)=*(p+5)&0x7f;//月
if(*p>0x59)
{
return(0);
}
if(*(p+1)>0x59)
{
return(0);
}
if(*(p+2)>0x24)
{
return(0);
}
if(*(p+3)>0x31)
{
return(0);
}
if(*(p+4)>0x07)
{
return(0);
}
if(*(p+5)>0x12)
{
return(0);
}
if(*(p+6)>0x99)
{
return(0);
}
return(1);
}
}
return(0);
}
/*************************************************/
/**功能:寫(初始化)時間數據 **/
/* *P為指向輸入數據的緩沖區 */
/* 格式:0-7 秒 分 時 日 星期 月 年(低) 年(高) */
//數據格式為BCD碼
bit WriteSysClk(unsigned char * p)
{
if((*(p+7)&0xf0)==0x20)
{
*(p+5)=*(p+5)&0x7f;//世紀數為20**
}
else
{
*(p+5)=*(p+5)+0x80;//世紀數為19**
}
//ISendStr(0xa2,0x02,p,7);
return(ISendStr(0xa2,0x02,p,7,SUBADDR8));
//t_ISendStr(0xa2,0x02,p,7);
}
// 功能:將BCD格式數據轉換成BIN格式數據
//將n個BCD數轉換成相對應的BIN數
void BCD_to_BIN(unsigned char *p,unsigned char n)
{
unsigned char i,j,k;
for(i=0;i<=n;i++)
{
j=(*(p+i))&0xf0;
j=(j>>4);
j=j*10;
k=(*(p+i))&0x0f;
j=j+k;
(*(p+i))=j;
}
}
//將nBIN個數轉換成相對應的BCD數
//
void BIN_to_BCD(unsigned char *p,unsigned char n)
{
unsigned char i,j;
for(i=0;i<=n;i++)
{
j=(*(p+i))/10;
j=j<<4;
(*(p+i))=j+(*(p+i))%10;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -