單片機控制ds1302的時鐘C程序
/************************************************
*
* 名稱: uc_BurstR1302R
* 說明: 先寫地址,后讀命令/數(shù)據(jù)(寄存器多字節(jié)方式)
* 功能: 讀取DS1302寄存器數(shù)據(jù)
* 調用: v_RTInputByte() , uc_RTOutputByte()
* 輸入: pReDa: 寄存器數(shù)據(jù)地址
* 返回值: 無
***************************************************/
/*void v_BurstR1302R(uchar *pReDa)
{
uchar i;
T_RST = 0;
T_CLK = 0;
T_RST = 1;
v_WTInputByte(0xff); //* 0xbf:時鐘多字節(jié)讀命令
for (i=31; i>0; i--) //*31Byte 寄存器數(shù)據(jù)
{
*pReDa = uc_RTOutputByte(); //* 讀1Byte數(shù)據(jù)
pReDa++;
}
T_CLK = 1;
T_RST =0;
}*/
/************************************************
*
* 名稱: v_Set1302
* 說明:
* 功能: 設置初始時間
* 調用: v_W1302()
* 輸入: pSecDa: 初始時間地址。初始時間格式為: 秒 分 時 日 月 星期 年
* 7Byte (BCD碼) 1B 1B 1B 1B 1B 1B 1B
* 返回值: 無
*****************************************************/
/*void v_Set1302(uchar *pSecDa)
{
uchar i;
uchar ucAddr = 0x80;
v_W1302(0x8e,0x00); // 控制命令,WP=0,寫操作?
for(i =7;i>0;i--)
{
v_W1302(ucAddr,*pSecDa); //秒 分 時 日 月 星期 年
pSecDa++;
ucAddr +=2;
}
v_W1302(0x8e,0x80); // 控制命令,WP=1,寫保護?
}*/
/**********************************************
*
* 名稱: v_Get1302
* 說明:
* 功能: 讀取DS1302當前時間
* 調用: uc_R1302()
* 輸入: ucCurtime: 保存當前時間地址。當前時間格式為: 秒 分 時 日 月 星期 年
* 7Byte (BCD碼) 1B 1B 1B 1B 1B 1B 1B
* 返回值: 無
*****************************************************/
/*void v_Get1302(uchar ucCurtime[])
{
uchar i;
uchar ucAddr = 0x81;
for (i=0;i7;i++)
{
ucCurtime[i] = uc_R1302(ucAddr);//*格式為: 秒 分 時 日 月 星期 年
ucAddr += 2;
}
} */
/**************************************************
* 名稱: Init1302
* 說明:
* 功能: 初始化DS1302
* 調用:
* 輸入:
* 返回值: 無
*********************************************************/
void Init1302(void)
{
v_W1302(0x8e,0x00); //控制寫入WP=0
v_W1302(0x90,0xa5);
v_W1302(0x80,0x00); //秒
v_W1302(0x82,0x59); //分
v_W1302(0x84,0x10); //時
v_W1302(0x86,0x01); //日
v_W1302(0x88,0x08); //月
v_W1302(0x8a,0x03); //星期
v_W1302(0x8c,0x07); //年*/
v_W1302(0x8e,0x80);
}
/******************************************************
* 名稱: donetime
* 說明:
* 功能: 時間處理
* 調用:
* 輸入:
* 返回值: 無
**************************************************************/
void donetime(void)
{
uchar d;
d=uc_R1302(0x81);
time[6]=d/16+48;
time[7]=d%16+48;
d=uc_R1302(0x83);
time[3]=d/16+48;
time[4]=d%16+48;
d=uc_R1302(0x85);
time[0]=d/16+48;
time[1]=d%16+48;
//bcd_int(d);
}
//
/*void bcd_int(uchar i)
{
uchar j;
time[0]=(i0x0f)+48;
j=i>>4;
time[1]=(j0x0f)+48;
} */
//
/*void bcdtoInt(void)
{
uchar i;
for(i=0;i7;i++)
bcd_int(ucCurtm[i]);
}*/
//
void SetTime(void)
{
v_W1302(0x8e,0x00);
v_W1302(0x80,0x80);
v_W1302(0x82,min);
v_W1302(0x84,hou);
v_W1302(0x86,day);
v_W1302(0x88,mon);
v_W1302(0x8c,yea);
v_W1302(0x80,0x00);
v_W1302(0x8e,0x80);
}
評論