?? ds1302.h
字號:
#ifndef _DS1302
#define _DS1302
#define uchar unsigned char
/*********************DS1302 端口設置**********************/
sbit SCLK=P2^5; //DS1302時鐘
sbit IO=P2^6; //DS1302 IO
sbit RST = P2^7; //DS1302復位
/*********************讀寫寄存器地址***********************/
code unsigned char write_addr[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c}; //秒分時日月周年 最低位讀寫位
code unsigned char read_addr[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};
/******************************************************/
/* 函數名稱:DS1302_Write_Byte(unsigned char temp)
/* 功 能:向DS1302寫入一個字節
/* 入口參數:temp
/* 出口參數:無
/******************************************************/
void DS1302_Write_Byte(unsigned char temp)
{
unsigned char i;
for (i=0;i<8;i++) //循環8次 寫入數據
{
SCLK=0;
IO=temp&0x01; //每次傳輸低字節
temp>>=1; //右移一位
SCLK=1;
}
}
/******************************************************/
/* 函數名稱:DS1302_Write( unsigned char address,unsigned char dat )
/* 功 能:向DS1302寫入數據
/* 入口參數:address,dat
/* 出口參數:無
/******************************************************/
void DS1302_Write( unsigned char address,unsigned char dat )
{
RST=0;
_nop_();
SCLK=0;
_nop_();
RST=1;
_nop_(); //啟動
DS1302_Write_Byte(address); //發送地址
DS1302_Write_Byte(dat); //發送數據
RST=0; //恢復
}
/******************************************************/
/* 函數名稱:DS1302_Read ( unsigned char address )
/* 功 能:向DS1302讀取數據
/* 入口參數:address
/* 出口參數:temp
/******************************************************/
unsigned char DS1302_Read ( unsigned char address )
{
unsigned char i,temp=0x00;
RST=0;
_nop_();
SCLK=0;
_nop_();
RST=1;
_nop_();
DS1302_Write_Byte(address);
for (i=0;i<8;i++) //循環8次讀取數據
{
if(IO)
temp|=0x80; //每次傳輸低字節
SCLK=0;
temp>>=1; //右移一位
SCLK=1;
}
RST=0;
_nop_(); //以下為DS1302復位的穩定時間
RST=0;
SCLK=0;
_nop_();
SCLK=1;
_nop_();
IO=0;
_nop_();
IO=1;
_nop_();
return (temp);
}
/******************************************************/
/* 函數名稱:DS1302_Fresh(uchar *clock_time)
/* 功 能:DS1302時間刷新
/* 入口參數:clock_time
/* 出口參數:clock_time
/******************************************************/
void DS1302_Fresh(uchar *clock_time)
{
unsigned char i,*p;
p=read_addr; //地址傳遞
for(i=0;i<7;i++) //分7次讀取秒分時日月周年
{
clock_time[i]=DS1302_Read(*p);
p++;
}
}
/******************************************************/
/* 函數名稱:DS1302_Init(uchar *clock_time)
/* 功 能:DS1302時間初始化
/* 入口參數:clock_time
/* 出口參數:clock_time
/******************************************************/
void DS1302_Init(uchar *clock_time)
{
unsigned char i,*p,tmp;
for(i=0;i<7;i++)
{
tmp=clock_time[i]/10; //BCD處理
clock_time[i]=clock_time[i]%10;
clock_time[i]=clock_time[i]+tmp*16;
}
DS1302_Write(0x8E,0X00);
p=write_addr; //傳地址
for(i=0;i<7;i++) //7次寫入 秒分時日月周年
{
DS1302_Write(*p,clock_time[i]);
p++;
}
DS1302_Write(0x8E,0x80);
}
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -