标题:
DS1302的C语言源代码 直接移植使用
[打印本页]
作者:
sworderchina
时间:
2022-3-23 11:06
标题:
DS1302的C语言源代码 直接移植使用
#include "ds1302.h"
char ds1302_data_read()
{
return P22;
}
/***************************************************
程序驱动
****************************************************/
void DS1302_Write(unsigned char D)
{
unsigned char i;
for(i=0;i<8;i++)
{
ds1302_data(D&0x01);
ds1302_sclk(1);
ds1302_sclk(0);
D=D>>1;
}
}
//写地址和数据
void WDS1302(unsigned char ucAddr, unsigned char ucDat)
{
ds1302_rst(0);
ds1302_sclk(0);
ds1302_rst(1);
DS1302_Write(ucAddr);
DS1302_Write(ucDat);
ds1302_sclk(1);
ds1302_sclk(0);
ds1302_data(1);
}
//读一串数据
unsigned char DS1302_Read()
{
unsigned char TempDat=0,i;
for(i=0;i<8;i++)
{
TempDat>>=1;
if(ds1302_data_read()) TempDat=TempDat|0x80;
ds1302_sclk(1);
ds1302_sclk(0);
}
return TempDat;
}
//写地址然后读数据
unsigned char read1302(unsigned char ucAddr)
{
unsigned char ucDat;
ds1302_rst(0);
ds1302_sclk(0);
ds1302_rst(1);
DS1302_Write(ucAddr);
ucDat=DS1302_Read();
ds1302_sclk(1);
ds1302_rst(0);
ds1302_data(1);
return ucDat;
}
/***************************************************
ds1302程序初始化
****************************************************/
void w_ram()
{
WDS1302(0x8e,0x00);//关闭保护寄存器
WDS1302(0xc0,0x51); //ram里面的一个数据
WDS1302(0x8e,0x80);//开保护
}
unsigned char g_ram()
{
unsigned char g_ram_data;
g_ram_data=read1302(0xc1);
return g_ram_data;
}
void init_time()
{
if(g_ram()!=0x51)
{
w_ram();
WDS1302(0x8e,0x00);//关闭保护寄存器
WDS1302(0x80,0x00);//set秒
WDS1302(0x82,0x36);//set分
WDS1302(0x84,0x20);//set时
WDS1302(0x8A,0x03);//set星期
WDS1302(0x86,0x16);//set日
WDS1302(0x88,0x03);//set月
WDS1302(0x8C,0x22);//set年
WDS1302(0x90,0xa5);//充电
WDS1302(0x8e,0x80);//开保护
}
}
void w_nian(unsigned char a)
{
unsigned char b;
b=a/10*16+a%10;
WDS1302(0x8e,0x00);//关闭保护寄存器
WDS1302(write_nian,b);//年
WDS1302(0x8e,0x80);//开保护
}
void w_yue(unsigned char a)
{
unsigned char b;
b=a/10*16+a%10;
WDS1302(0x8e,0x00);//关闭保护寄存器
WDS1302(write_yue,b);//年
WDS1302(0x8e,0x80);//开保护
}
void w_ri(unsigned char a)
{
unsigned char b;
b=a/10*16+a%10;
WDS1302(0x8e,0x00);//关闭保护寄存器
WDS1302(write_tian,b);//年
WDS1302(0x8e,0x80);//开保护
}
void w_fen(unsigned char a)
{
unsigned char b;
b=a/10*16+a%10;
WDS1302(0x8e,0x00);//关闭保护寄存器
WDS1302(0x82,b);//set分
WDS1302(0x8e,0x80);//开保护
}
void w_shi(unsigned char a)
{
unsigned char b;
b=a/10*16+a%10;
WDS1302(0x8e,0x00);//关闭保护寄存器
WDS1302(0x84,b);//set时
WDS1302(0x8e,0x80);//开保护
}
void w_miao(unsigned char a)
{
unsigned char b;
b=a/10*16+a%10;
WDS1302(0x8e,0x00);//关闭保护寄存器
WDS1302(write_second,b);//setmiao
WDS1302(0x8e,0x80);//开保护
}
void w_zhou(unsigned char a)
{
unsigned char b;
b=a/10*16+a%10;
WDS1302(0x8e,0x00);//关闭保护寄存器
WDS1302(write_zhou,b);//setmiao
WDS1302(0x8e,0x80);//开保护
}
unsigned char get_fen()
{
unsigned char a,b;
a=read1302(read_fen);
b=a%16+a/16*10;
return b;
}
unsigned char get_shi()
{
unsigned char a=0,b=0;
a=read1302(read_xiaoshi);
b=a%16+a/16*10;
return b;
}
unsigned char get_miao()
{
unsigned char a=0,b=0;
a=read1302(read_miao);
b=a%16+a/16*10;
return b;
}
unsigned char get_nian()
{
unsigned char a=0,b=0;
a=read1302(read_nian);
b=a%16+a/16*10;
return b;
}
unsigned char get_yue()
{
unsigned char a=0,b=0;
a=read1302(read_yue);
b=a%16+a/16*10;
return b;
}
unsigned char get_ri()
{
unsigned char a=0,b=0;
a=read1302(read_tian);
b=a%16+a/16*10;
return b;
}
unsigned char get_zhou()
{
unsigned char a=0,b=0;
a=read1302(read_zhou);
b=a%16+a/16*10;
return b;
}
复制代码
源代码免费提供给大家,直接使用
51hei.png
(2.89 KB, 下载次数: 43)
下载附件
2022-3-23 16:10 上传
上图2个文件下载 c代码(请自行移植到各单片机平台):
DS1302.zip
(1.48 KB, 下载次数: 39)
2022-3-23 11:05 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
m6092820
时间:
2022-5-4 10:45
感谢楼主无私奉献
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1