📄 ds1302.c
字号:
#include <ds1302.h>
unsigned char code int_data[7]={0x00,0x45,0x22,0x10,0x12,0x7,0x06};
unsigned char idata time[3];
// 名称: v_RTInputByte
// 说明:
// 功能: 往DS1302 写入1Byte 数据
// 调用:
// 输入: dat 写入的数据
// 返回值: 无
void v_RTInputByte(unsigned char ucdat)
{unsigned char i;
ACC=ucdat;
DS1302_RST=1;
for(i=8;i>0;i--){
DS1302_IO = BIT0; /*相当于汇编中的 RRC */
DS1302_SCLK = 0;
_nop_ ();
DS1302_SCLK = 1;
ACC >>= 1;
}
}
// 名称: uchar uc_RTOutputByte
// 说明:
// 功能: 从DS1302 读取1Byte 数据
// 调用:
// 输入:
// 返回值: dat
unsigned char uc_RTOutputByte(void)
{
unsigned char i;
unsigned char ucdat=0;
DS1302_RST=1;
for(i=8;i>0;i--){
DS1302_IO=1;
ACC >>= 1;
DS1302_SCLK = 1;
_nop_ ();
DS1302_SCLK = 0;
_nop_ ();_nop_ ();_nop_ ();
BIT7=DS1302_IO;
}
return(ACC);
}
// 名称: v_W1302
// 说明: 先写地址,后写命令/数据
// 功能: 往DS1302 写入数据
// 调用: v_RTInputByte()
// 输入: address: DS1302 地址, dat: 要写的数据
// 返回值: 无
void v_W1302(unsigned char address, unsigned char ucdat)
{
DS1302_RST = 0;
DS1302_SCLK = 0; //初始化
DS1302_RST = 1;
v_RTInputByte(address); /* 地址,命令 */
v_RTInputByte(ucdat); /* 写1Byte 数据*/
DS1302_SCLK = 1;
DS1302_RST =0;
}
// 名称: uc_R1302
// 说明: 先写地址,后读命令/数据
// 功能: 读取DS1302 某地址的数据
// 调用: v_RTInputByte() , uc_RTOutputByte()
// 输入: ucAddress: DS1302 地址
// 返回值: ucData :读取的数据
unsigned char uc_R1302(unsigned char address)
{
unsigned char ucdat;
DS1302_RST=0;
DS1302_SCLK=0;
DS1302_RST=1;
v_RTInputByte(address); /* 地址,命令 */
ucdat = uc_RTOutputByte(); /* 读1Byte 数据 */
DS1302_SCLK = 1;
DS1302_RST =0;
return(ucdat);
}
void v_set1302(unsigned char *p)
{unsigned char i;
unsigned char add=0x80;
v_W1302(0x8e,0x00);
for(i=7;i>0;i--)
{v_W1302(add,*p);
p++;
add=add+2;
}
v_W1302(0x8e,0x80);
}
// 名称: v_Get1302
// 说明:
// 功能: 读取DS1302 当前时间
// 调用: uc_R1302()
// 输入: ucCurtime: 保存当前时间地址。当前时间格式为: 秒 分 时 日 月 星期 年
// 7Byte (BCD 码) 1B 1B 1B 1B 1B 1B 1B
// 返回值: 无
void v_Get1302(unsigned char address )
{unsigned char a,b;
time[0] =uc_R1302(address);/*格式为: 秒 分 时 日 月 星期 年 */
a=(time[0]>>4)+48;
b=(time[0]&0x0f)+48;
time[0]=a;
time[1]=b;
time[2]='\0';
}
//初始化 DS1302
void initialize_DS1302(void)
{
DS1302_SCLK=0;//只有SCKL为低电平时,才能置RST为高电平
DS1302_RST=0;
v_set1302(int_data);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -