#include"REG51.H"
#include"INTRINS.H"
typedefunsignedcharBYTE;
sbitSCLK=P1^0;//DS1302時(shí)鐘口P1.0
sbitIO=P1^1;//DS1302數(shù)據(jù)口P1.1
sbitRST=P1^2;//DS1302片選口P1.2
//秒分時(shí)日月星期年
BYTEcodeinit[]={0x00,0x00,0x20,0x01,0x01,0x05,0x10};
BYTEdatanow[7];
voidDS1302_Initial();
voidDS1302_SetTime(BYTE*p);
voidDS1302_GetTime(BYTE*p);
voidmain()
{
DS1302_Initial();//初始化DS1302
DS1302_SetTime(init);//設(shè)置初始時(shí)間
DS1302_GetTime(now);//讀取當(dāng)前時(shí)間
while(1);
}
/**************************************
延時(shí)X微秒(STC12C5A60S2@12M)
不同的工作環(huán)境,需要調(diào)整此函數(shù)
此延時(shí)函數(shù)是使用1T的指令周期進(jìn)行計(jì)算,與傳統(tǒng)的12T的MCU不同
**************************************/
voidDelay()
{
_nop_();
_nop_();
}
/**************************************
從DS1302讀1字節(jié)數(shù)據(jù)
**************************************/
BYTEDS1302_ReadByte()
{
BYTEi;
BYTEdat=0;
for(i=0;i>=1;//數(shù)據(jù)右移一位
if(IO)dat|=0x80;//讀取數(shù)據(jù)
SCLK=1;//時(shí)鐘線拉高
Delay();//延時(shí)等待
}
returndat;
}
/**************************************
向DS1302寫1字節(jié)數(shù)據(jù)
**************************************/
voidDS1302_WriteByte(BYTEdat)
{
chari;
for(i=0;i>=1;//移出數(shù)據(jù)
IO=CY;//送出到端口
SCLK=1;//時(shí)鐘線拉高
Delay();//延時(shí)等待
}
}
/**************************************
讀DS1302某地址的的數(shù)據(jù)
**************************************/
BYTEDS1302_ReadData(BYTEaddr)
{
BYTEdat;
RST=0;
Delay();
SCLK=0;
Delay();
RST=1;
Delay();
DS1302_WriteByte(addr);//寫地址
dat=DS1302_ReadByte();//讀數(shù)據(jù)
SCLK=1;
RST=0;
returndat;
}
/**************************************
往DS1302的某個(gè)地址寫入數(shù)據(jù)
**************************************/
voidDS1302_WritEDAta(BYTEaddr,BYTEdat)
{
RST=0;
Delay();
SCLK=0;
Delay();
RST=1;
Delay();
DS1302_WriteByte(addr);//寫地址
DS1302_WriteByte(dat);//寫數(shù)據(jù)
SCLK=1;
RST=0;
}
/**************************************
寫入初始時(shí)間
**************************************/
voidDS1302_SetTime(BYTE*p)
{
BYTEaddr=0x80;
BYTEn=7;
DS1302_WriteData(0x8e,0x00);//允許寫操作
while(n--)
{
DS1302_WriteData(addr,*p++);
addr+=2;
}
DS1302_WriteData(0x8e,0x80);//寫保護(hù)
}
/**************************************
讀取當(dāng)前時(shí)間
**************************************/
voidDS1302_GetTime(BYTE*p)
{
BYTEaddr=0x81;
BYTEn=7;
while(n--)
{
*p++=DS1302_ReadData(addr);
addr+=2;
}
}
/**************************************
初始化DS1302
**************************************/
voidDS1302_Initial()
{
RST=0;
SCLK=0;
DS1302_WriteData(0x8e,0x00);//允許寫操作
DS1302_WriteData(0x80,0x00);//時(shí)鐘啟動(dòng)
DS1302_WriteData(0x90,0xa6);//一個(gè)二極管+4K電阻充電
DS1302_WriteData(0x8e,0x80);//寫保護(hù)
}
-
單片機(jī)
+關(guān)注
關(guān)注
6043文章
44622瀏覽量
638531
發(fā)布評論請先 登錄
相關(guān)推薦
單片機(jī)制作RTC實(shí)時(shí)時(shí)鐘(DS1302)程序【C語言版】
基于單片機(jī)的綜合應(yīng)用程序ds1302送1602【C語言】
基于單片機(jī)的綜合應(yīng)用程序ds1302送1602【C語言】顯示時(shí)
基于單片機(jī)的綜合應(yīng)用程序ds1302送1602_C語言_顯示日期
51單片機(jī)DS1302實(shí)時(shí)時(shí)鐘驅(qū)動(dòng)程序
![51<b class='flag-5'>單片機(jī)</b><b class='flag-5'>DS1302</b>實(shí)時(shí)時(shí)鐘驅(qū)動(dòng)<b class='flag-5'>程序</b>](https://file.elecfans.com/web1/M00/50/B2/o4YBAFr6LmKAEuoIAAAhWUg4zlo494.jpg)
使用單片機(jī)應(yīng)用DS1302的時(shí)鐘程序免費(fèi)下載
![使用<b class='flag-5'>單片機(jī)</b>應(yīng)用<b class='flag-5'>DS1302</b>的時(shí)鐘<b class='flag-5'>程序</b>免費(fèi)下載](https://file.elecfans.com/web1/M00/A3/D1/o4YBAF1bnDqAH2NXAAHBaJnrMw0166.png)
51單片機(jī)的DS1302時(shí)鐘驅(qū)動(dòng)程序免費(fèi)下載
![51<b class='flag-5'>單片機(jī)</b>的<b class='flag-5'>DS1302</b>時(shí)鐘驅(qū)動(dòng)<b class='flag-5'>程序</b>免費(fèi)下載](https://file.elecfans.com/web1/M00/9C/27/pIYBAF0lXPyAaFQYAAFqd7bhLfo989.png)
使用51單片機(jī)和DS1302芯片設(shè)計(jì)的LED時(shí)鐘的C語言程序和工程文件
![使用51<b class='flag-5'>單片機(jī)</b>和<b class='flag-5'>DS1302</b>芯片設(shè)計(jì)的LED時(shí)鐘的<b class='flag-5'>C</b>語言<b class='flag-5'>程序</b>和工程文件](https://file.elecfans.com/web1/M00/A5/6C/pIYBAF1t2FqAEobrAAL3sQquSVU962.png)
評論