📄 ds1302.txt
字号:
#include<intrins.h> //头文件,包含_nop_函数
sbit ds_clk=P2^0;
sbit ds_dat=P2^1;
sbit ds_ret=P2^2;
#define ds_sec 0x80
#define ds_min 0x82
#define ds_hour 0x84
#define ds_date 0x86
#define ds_month 0x88
#define ds_day 0x8a
#define ds_year 0x8c
#define ds_baohu 0x8e
#define ds_chd 0x90
#define ds_tufa 0xbe
uchar code year_data;
uchar code month_data;
uchar code data_data;
uchar code day_data;
uchar code hour_data;
uchar code min_data;
uchar code sec_data;
void start_ds()
{
ds_dat=1;
ds_rst=0; //复位引脚低电平,终止数据传输
ds_clk=0;
ds_rst=1; //复位引脚高电平,开始
_nop_();
_nop_();
}
void ds_write(uchar reg,uchar data)
{
uchar i;
start_ds();
for(i=0;i<8;i++)
{
if(reg&0x01)
ds_dat=1;
else
ds_dat=0;
ds_clk=1;
_nop_();
_nop_();
ds_clk=0;
reg=reg>>1;
}
for(i=0;i<8;i++)
{
if(data&0x01)
ds_dat=1;
else
ds_dat=0;
ds_clk=1;
_nop_();
_nop_();
ds_clk=0;
data=data>>1;
}
ds_rst=0; //结束数据的传送
_nop_();
}
uchar ds_read(uchar reg)
{
uchar i,uchar data;
reg=reg+1;
start_ds();
for(i=0;i<8;i++)
{
if(reg&0x01)
ds_dat=1;
else
ds_dat=0;
ds_clk=1;
_nop_();
_nop_();
ds_clk=0;
reg=reg>>1;
}
for(i=0;i<8;i++)
{
_nop_();
_nop_();
if(ds_dat==1) data=data|0x01;
else data=data&0x7f;
ds_clk=1;
_nop_();
ds_clk=0;
}
ds_ret=0;
_nop_();
_nop_();
return(data);
}
void ds_init()
{
ds_write(ds_baohu,0x00); //关闭写保护
ds_write(ds_sec,0x80); //时钟暂停
ds_write(ds_min,0x32);
ds_write(ds_hour,0x11);
ds_write(ds_day,0x05);
ds_write(ds_data,0x26);
ds_write(ds_month,0x04);
ds_write(ds_year,0x07);
ds_write(ds_chd,0xa8);
ds_write(ds_sec,0x00); //时钟开始计时
}
void ds_read()
{
uchar data;
data=ds_read(ds_year);
year_data=data;
data=ds_read(ds_month);
month_data=data;
data=ds_read(ds_data);
data_data=data;
data=ds_read(ds_day);
day_data=data;
data=ds_read(ds_hour);
hour_data=data;
data=ds_read(ds_min);
month_min=data;
data=ds_read(ds_sec);
sec_data=data;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -