标题:
DS1302是怎么初始化时间的
[打印本页]
作者:
礼小栀
时间:
2018-6-1 10:18
标题:
DS1302是怎么初始化时间的
程序如下
DS1302头文件
实现功能:DS1302的控制
补充说明:
***************************************************************/
#ifndef _DS1302_H_
#define _DS1302_H_
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
/*****************DS1302引脚定义*******************/
sbit SCLK = P1^7; // DS1302时钟信号 7脚
sbit DIO = P3^2; // DS1302数据信号 6脚
sbit CE = P3^4; // DS1302片选 5脚
/*****************位寻址寄存器定义*******************/
sbit ACC_7 = ACC^7;
/*****************DS1302寄存器宏定义*****************/
#define WRITE_SECOND 0x80
#define WRITE_MINUTE 0x82
#define WRITE_HOUR 0x84
#define WRITE_DAY 0x86
#define WRITE_MONTH 0x88
#define WRITE_WEEK 0x8a
#define WRITE_YEA 0x8c
#define READ_SECOND 0x81
#define READ_MINUTE 0x83
#define READ_HOUR 0x85
#define READ_DAY 0x87
#define READ_MONTH 0x89
#define READ_WEEK 0x8b
#define READ_YEA 0x8d
#define WRITE_PROTECT 0x8E
/*****************DS1302函数定义*********************/
void Writeds1302 ( uchar addr,dat); //DS1302指定地址,写数据
uchar Read1302 ( uchar addr ); //DS1302指定地址,读数据
uchar Read1302_yuanshi(uchar addr); //DS1302读原始数据函数
void Read_time(void); //DS1302读时间日期函数
void DS1302_init(void); //DS1302初始化函数
/*****************DS1302变量定义*********************/
uchar data time[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //存储秒,分,时,日,月,星期,年
/********************************************************
函数名称:void Writeds1302 ( unsigned char addr,dat )
函数作用:DS1302发送地址,数据
参数说明:addr:地址,dat:数据
********************************************************/
void Writeds1302 ( uchar addr,dat )
{
unsigned char i,temp;
CE=0; //CE引脚为低,数据传送中止
SCLK=0; //清零时钟总线
CE = 1; //CE引脚为高,逻辑控制有效
//发送地址
for ( i=8; i>0; i-- ) //循环8次移位
{
SCLK = 0;
temp = addr;
DIO = (bit)(temp&0x01); //每次传输低字节
addr >>= 1; //右移一位
SCLK = 1;
}
//发送数据
for ( i=8; i>0; i-- )
{
SCLK = 0;
temp = dat;
DIO = (bit)(temp&0x01);
dat >>= 1;
SCLK = 1;
}
SCLK=1;
CE = 0;
}
/********************************************************
函数名称:uchar Read1302 ( uchar addr )
函数作用:DS1302读取数据并转化成十进制
参数说明:addr参考DS1302寄存器宏定义
********************************************************/
uchar Read1302 ( uchar addr )
{
unsigned char i,temp,dat1,dat2;
CE=0;
SCLK=0;
CE = 1;
//发送地址
for ( i=8; i>0; i-- ) //循环8次移位
{
SCLK = 0;
temp = addr;
DIO = (bit)(temp&0x01); //每次传输低字节
addr >>= 1; //右移一位
SCLK = 1;
}
//读取数据
for ( i=8; i>0; i-- )
{
ACC_7=DIO;
SCLK = 1;
ACC>>=1;
SCLK = 0;
}
SCLK=1;
CE=0;
dat1=ACC;
dat2=dat1/16; //数据进制转换
dat1=dat1%16; //十六进制转十进制
dat1=dat1+dat2*10;
return (dat1);
}
/********************************************************
函数名称:void Read_time(void)
函数作用:DS1302读取时间日期
参数说明:
********************************************************/
void Read_time(void)
{
time[0]=Read1302(0x81);
time[1]=Read1302(0x83);
time[2]=Read1302(0x85);
time[3]=Read1302(0x87);
time[4]=Read1302(0x89);
time[5]=Read1302(0x8b);
time[6]=Read1302(0x8d);
}
#endif
作者:
baidx_1981
时间:
2019-3-14 14:58
unsigned char time_buf[8] = {0x20,0x18,0x08,0x01,0x00,0x00,0x00,0x03};//20180801 00:00:00 周三
ds1302_init(); //DS13023õê¼»ˉ
ds1302_write_byte(ds1302_control_add,0x00); //关写保护
ds1302_write_byte(ds1302_sec_add,0x80); //暂时停掉时钟
//ds1302_write_byte(ds1302_charger_add,0xa9); //涓涓充电
ds1302_write_byte(ds1302_year_add,time_buf[1]); //年
ds1302_write_byte(ds1302_month_add,time_buf[2]); //月
ds1302_write_byte(ds1302_date_add,time_buf[3]); //日
ds1302_write_byte(ds1302_hr_add,time_buf[4]); //时
ds1302_write_byte(ds1302_min_add,time_buf[5]); //分
ds1302_write_byte(ds1302_sec_add,time_buf[6]); //秒
ds1302_write_byte(ds1302_day_add,time_buf[7]); //周
ds1302_write_byte(ds1302_control_add,0x80); //开写保护
作者:
lml0508
时间:
2019-3-14 17:50
可以自己写进初始时间
作者:
stc89cxx
时间:
2019-7-11 00:00
lml0508 发表于 2019-3-14 17:50
可以自己写进初始时间
这个初始化时间是怎么计算的啊
作者:
哎呀好气好气
时间:
2020-7-4 17:56
stc89cxx 发表于 2019-7-11 00:00
这个初始化时间是怎么计算的啊
初始时间顺序是秒分时日月周年,格式是用BCD码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1