單片機(jī)控制ds1302的時(shí)鐘C程序
/************************************************
*
* 名稱: uc_BurstR1302R
* 說(shuō)明: 先寫(xiě)地址,后讀命令/數(shù)據(jù)(寄存器多字節(jié)方式)
* 功能: 讀取DS1302寄存器數(shù)據(jù)
* 調(diào)用: v_RTInputByte() , uc_RTOutputByte()
* 輸入: pReDa: 寄存器數(shù)據(jù)地址
* 返回值: 無(wú)
***************************************************/
/*void v_BurstR1302R(uchar *pReDa)
{
uchar i;
T_RST = 0;
T_CLK = 0;
T_RST = 1;
v_WTInputByte(0xff); //* 0xbf:時(shí)鐘多字節(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
* 說(shuō)明:
* 功能: 設(shè)置初始時(shí)間
* 調(diào)用: v_W1302()
* 輸入: pSecDa: 初始時(shí)間地址。初始時(shí)間格式為: 秒 分 時(shí) 日 月 星期 年
* 7Byte (BCD碼) 1B 1B 1B 1B 1B 1B 1B
* 返回值: 無(wú)
*****************************************************/
/*void v_Set1302(uchar *pSecDa)
{
uchar i;
uchar ucAddr = 0x80;
v_W1302(0x8e,0x00); // 控制命令,WP=0,寫(xiě)操作?
for(i =7;i>0;i--)
{
v_W1302(ucAddr,*pSecDa); //秒 分 時(shí) 日 月 星期 年
pSecDa++;
ucAddr +=2;
}
v_W1302(0x8e,0x80); // 控制命令,WP=1,寫(xiě)保護(hù)?
}*/
/**********************************************
*
* 名稱: v_Get1302
* 說(shuō)明:
* 功能: 讀取DS1302當(dāng)前時(shí)間
* 調(diào)用: uc_R1302()
* 輸入: ucCurtime: 保存當(dāng)前時(shí)間地址。當(dāng)前時(shí)間格式為: 秒 分 時(shí) 日 月 星期 年
* 7Byte (BCD碼) 1B 1B 1B 1B 1B 1B 1B
* 返回值: 無(wú)
*****************************************************/
/*void v_Get1302(uchar ucCurtime[])
{
uchar i;
uchar ucAddr = 0x81;
for (i=0;i7;i++)
{
ucCurtime[i] = uc_R1302(ucAddr);//*格式為: 秒 分 時(shí) 日 月 星期 年
ucAddr += 2;
}
} */
/**************************************************
* 名稱: Init1302
* 說(shuō)明:
* 功能: 初始化DS1302
* 調(diào)用:
* 輸入:
* 返回值: 無(wú)
*********************************************************/
void Init1302(void)
{
v_W1302(0x8e,0x00); //控制寫(xiě)入WP=0
v_W1302(0x90,0xa5);
v_W1302(0x80,0x00); //秒
v_W1302(0x82,0x59); //分
v_W1302(0x84,0x10); //時(shí)
v_W1302(0x86,0x01); //日
v_W1302(0x88,0x08); //月
v_W1302(0x8a,0x03); //星期
v_W1302(0x8c,0x07); //年*/
v_W1302(0x8e,0x80);
}
/******************************************************
* 名稱: donetime
* 說(shuō)明:
* 功能: 時(shí)間處理
* 調(diào)用:
* 輸入:
* 返回值: 無(wú)
**************************************************************/
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);
}
評(píng)論