一、简介
1、采用SPI三线接口通信(SCK、SDA、RST)
二、应用
1、在ds1302.c文件中定义三个数组
unsigned char code READ_A[7]={0X81,0X83,0X85,0X87,0X89,0X8B,0X8D}; //读操作相应寄存器的地址
unsigned char code WRITE_A[7]={0X80,0X82,0X84,0X86,0X88,0X8A,0X8C}; //写操作相应寄存器的地址
unsigned char Time[7]={0x50,0x59,0x23,0x00,0x00,0x00,0x00}; //秒 分 时 日 月 周 年
- 关键字code:将数据写入ROM,是数据不可被改变
2、手写时钟设置函数、时钟读取函数
void DS1302_Config()
{
unsigned char i;
Write_Ds1302_Byte(0X8E,0X00); //写控制寄存器的地址是0x8E 0x00允许写入
for(i=0;i<7;i++)
{
Write_Ds1302_Byte(WRITE_A[i],Time[i]); //将初始化数据写入
}
Write_Ds1302_Byte(0X8E,0X80); //0x80禁止写入
}
void DS1302_Read_Time()
{
unsigned char i;
for(i=0;i<7;i++)
{
Time[i]=Read_Ds1302_Byte(READ_A[i]); //将实时时钟数据读出
}
}
3、主函数中修改单一的时间单位数值的操作
Write_Ds1302_Byte(0X8E,0X00); //允许写入
Write_Ds1302_Byte(WRITE_A[0],Time[0]); //将更改后的数据写入对应的地址
Write_Ds1302_Byte(0X8E,0X80); //禁止写入
4、时钟数据换算
十位=Time[2]/16
个位=Time[2]%16
因为DS1302使用的是“压缩的BCD码”,不是实际意义上的16进制数据。
例:55秒,在一般的十六进制表示为0x37,但在“压缩的BCD码”表示为0x55
▲文中不足之处请大家指正
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)