?? ds1302.h
字號:
sbit RST=P1^0;
sbit SCLK=P1^1;
sbit I_O=P1^2;
uchar read_data[7];//存取時間數據
//寫指令數據字節,低位在前
void write_ds1302_data(uchar ds1302_data)
{
uchar i;
for(i=0;i<8;i++)
{
I_O=(bit)(ds1302_data&0x01);
SCLK=0;
SCLK=1;
ds1302_data>>=1;
}
}
//讀數據字節,低位在前
uchar read_ds1302_data(void)
{
uchar i,temp=0;
for(i=0;i<8;i++)
{
if(I_O)
{ temp|=0x80;}
SCLK=1;
SCLK=0;
temp>>=1;
}
return(temp);
}
//寫指令數據
void write_ds1302(uchar data_address,uchar ds1302_data)
{
RST=0;
RST=1;
write_ds1302_data(data_address);
write_ds1302_data(ds1302_data);
RST=0;
}
//讀顯示數據
uchar read_ds1302(uchar data_address)
{
uchar temp;
RST=0;
RST=1;
write_ds1302_data(data_address);
temp=read_ds1302_data();
RST=0;
return(temp);
}
//時鐘開關:0 關; 1 開
void start_ds1302_onoff(uchar onoff)
{
if(onoff)
{onoff=0x00;}
else
{onoff=0x80;}
write_ds1302(0x80,onoff);
}
//寫保護位 :0 允許寫字節;1 禁止寫字節
/*void set_protect_bit(uchar protect_bit)
{
if(!protect_bit)
{ protect_bit=0x00;}
else
{ protect_bit=0x80;}
write_ds1302(0x8e,protect_bit);
}*/
//設置VCC1與VCC2的連接屬性(2個二極管,4K歐姆電阻)
void set_vcc1_vcc2_property(void)
{
write_ds1302(0x90,0xaa);
}
//連續寫入ds1302的時間
void write_serial_ds1302(uchar * init_time)
{
uchar i,j;
//set_protect_bit(0);
RST=0;
RST=1;
write_ds1302_data(0xbe);
RST=0;
for(j=0,i=0x80;j<7;j++)
{
write_ds1302(i,* init_time);
i+=2;
init_time++;
}
//set_protect_bit(1);
}
//連續讀取ds1302內的時間數據
void read_serial_ds1302(void)
{
uchar i,j;
write_ds1302_data(0xbf);
for(j=0,i=0x81;j<8;j++)
{
read_data[j]=read_ds1302(i);
i+=2;
}
}
//初始化ds1302
void Init_ds1302(void)
{
uchar * temp,Init_time[7]={0x50,0x59,0x23,0x26,0x03,0x07,0x07};
temp=&Init_time[0];
start_ds1302_onoff(1);
set_vcc1_vcc2_property();
write_serial_ds1302(temp);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -