模块代码 😄
//利用指针可在DS1302.c中编辑以下代码
void write_13(unsigned char* dat)
{
unsigned char i,add=0x80;//这里不使用数组可节省空间
Write_Ds1302_Byte(0x8e,0);//关闭写保护
for(i=0;i<3;i++)
{
Write_Ds1302_Byte(add,*(dat+i)/10*16+*(dat+i)%10);
add+=2;
}
Write_Ds1302_Byte(0x8e,0x80);//开启写保护
}
void read_13(unsigned char *dat)
{
unsigned char i,add=0x81;
for(i=0;i<3;i++)
{
*(dat+i)=Read_Ds1302_Byte(add)/16;
*(dat+i)=*(dat+i)*10+Read_Ds1302_Byte(add)%16;//add不能忘
add+=2;
}
}
main.c中引用
- 这里仅仅展示如何调用
#include <STC15F2K60S2.H>
#include <DS1302.H>
typedef unsigned char u8;
typedef unsigned int u16;
u8 time[]={50,59,23};//初始化时间 秒、分、时 对应
void main()
{
write_13(&time);
while(1)
{
read_13(&time);
}
大家会问上面的代码读取的时间在哪里呢?
答案是在time的数组中,其中的对应关系为
time[0] | 秒 |
---|---|
time[1] | 分 |
time[2] | 时 |
轻微解读
- 从图中我们可以看到左上角READ往下一列对应的地址,以及WRITE往下对应的地址。通过图表可以清除的知道对应地址代表的时间,如:81h -> Second。
- 表中还有一个重要的信息,也就是下面黑框里的WP对应的地址:8Eh,他的作用就是写保护。并且可以看出这里是高电平有效(也就是该高电平触发写保护,写入的数据无效)。
后面我将会出关于DS1302万年历,修改时间和设置闹钟的案例。