DS1302時(shí)鐘C程序
掃描二維碼
隨時(shí)隨地手機(jī)看文章
這是1302的C文件,1302.h文件在后來(lái)面
#include"1302.h"
code unsigned char write_rtc_address[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c}; //秒分時(shí)日月周年 最低位讀寫位
code unsigned char read_rtc_address[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};
void Write_Ds1302_Byte(unsigned char temp)
{
unsigned char i;
for (i=0;i<8;i++) //循環(huán)8次 寫入數(shù)據(jù)
{
sclk=0;
io=temp&0x01; //每次傳輸?shù)妥止?jié)
temp>>=1; //右移一位
sclk=1;
}
}
/******************************************************************/
/* 寫入DS1302 */
/******************************************************************/
void Write_Ds1302( unsigned char address,unsigned char dat )
{
rst=0;
_nop_();
sclk=0;
_nop_();
rst=1;
_nop_(); //啟動(dòng)
Write_Ds1302_Byte(address); //發(fā)送地址
Write_Ds1302_Byte(dat); //發(fā)送數(shù)據(jù)
rst=0; //恢復(fù)
}
/******************************************************************/
/* 讀出DS1302數(shù)據(jù) */
/******************************************************************/
unsigned char Read_Ds1302 ( unsigned char address )
{
unsigned char i,temp=0x00;
rst=1;
_nop_();
_nop_();
Write_Ds1302_Byte(address);
for (i=0;i<8;i++) //循環(huán)8次 讀取數(shù)據(jù)
{
if(io)
temp|=0x80; //每次傳輸?shù)妥止?jié)
sclk=1;
temp>>=1; //右移一位
_nop_();
_nop_();
_nop_();
sclk=0;
}
rst=0;
_nop_(); //以下為DS1302復(fù)位的穩(wěn)定時(shí)間
_nop_();
rst=0;
sclk=0;
_nop_();
_nop_();
_nop_();
_nop_();
/*sclk=1;
_nop_();
_nop_();
io=0;
_nop_();
_nop_();
io=1;
_nop_();
_nop_(); */
return (temp); //返回
}
/******************************************************************/
/* 讀時(shí)鐘數(shù)據(jù) */
/******************************************************************/
uchar Read_RTC1(uchar j) //讀取 日歷
{
uchar c;
unsigned char *p;
p=&read_rtc_address[j]; //地址傳遞
c=Read_Ds1302(*p);
c=(( c&0x70)>>4)*10 + ( c&0x0F);
return(c);
}
/******************************************************************/
/* 設(shè)定時(shí)鐘數(shù)據(jù) */
/******************************************************************/
void Set_RTC(uchar a,uint c) //設(shè)定 日歷
{
unsigned char *p ,shi,ge ;
Write_Ds1302(0x8E,0X00);
shi=a/10;
ge=a%10;
a=shi*16+ge;
p=&write_rtc_address[c]; //傳地址
Write_Ds1302(*p,a) ;
// Write_Ds1302(0x8E,0x80);
} 、
這是頭文件:
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit sclk=P1^2; //時(shí)鐘
sbit io=P1^1; //數(shù)
sbit rst = P1^0;
void Set_RTC(uchar a,uint c);
uchar Read_RTC1(uchar j);