📄 ds1302.h
字号:
/*******************************************************************************
* 标题: ds1302头文件 *
* 日期: 2007-3-25 *
* 版本: 1.0 *
* 作者: 无名 *
* 邮箱: djrljf@163.com *
* QQ : 403499014 *
********************************************************************************
********************************************************************************
* 【版权】 Copyright(C)无名 All Rights Reserved *
* 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息! *
*******************************************************************************/
#ifndef _ds1302_H // 防止_ds1302_H被重复引用
#define _ds1302_H
#include "at89x52.h"
//==============================================================
//默认设置,使用时根据实际布线修改DIN CLK LOAD
#define clk P2_2 //时钟输入线
#define io P2_1 //信号线
#define rst P2_0 //复位线(低电平有效)
//==============================================================
#define uchar unsigned char
#define uint unsigned int
#define readC 0x01 //读命令附加数,与命令数相加
#define writeC 0x00 //写命令附加数,与命令数相加
#define clockBurst 0xbe //时钟多字节,写入此命令时可以连续读取8个寄存器字节
#define ramBurst 0xfe //RAM多字节(写入此命令后可以连续操作31个RAM寄存器)
#define trickleCharger 0x90 //涓流充电
#define control 0x8e //控制写入0X80时为写保护,写入0时可以写入数据
#define year 0x8c //年份寄存器
#define mon 0x88 //月份寄存器
#define date 0x86 //日期寄存器
#define hour 0x84 //小时寄存器
#define min 0x82 //分钟寄存器
#define sec 0x80 //秒寄存器(最高位为震荡使能位)
#define day 0x8a //星期寄存器
//==============================================================
//写数据
//==============================================================
void write(uchar temp)
{
uchar i;
temp=(temp);
for(i=0;i<8;i++)
{
if((temp&0x01)==1)io=1;
else io=0;
clk=1;
temp=(temp>>1);
clk=0;
}
}
//==============================================================
//读数据
//==============================================================
uchar read()
{
uchar i,temp=0,temp1=0;
io=1;
temp=io;
for(i=1;i<8;i++)
{
clk=1;
clk=0;
temp1=io;
temp=(temp|(temp1<<i));
}
return temp;
}
//==============================================================
//指定地址写数据
//==============================================================
extern void writeBite(uchar addr,uchar dat)
{
clk=0;
rst=0;
rst=1;
write((addr+writeC));
write(dat);
rst=0;
clk=1;
}
//==============================================================
//指定地址读
//==============================================================
extern uchar readBite(uchar addr)
{
uchar temp=0;
clk=0;
rst=0;
rst=1;
write((addr+readC));
temp=read();
rst=0;
clk=1;
return temp;
}
//==============================================================
//连续写8位寄存器数据
//==============================================================
extern void writeMultiBite(uchar *word)
{
uchar i;
clk=0;
rst=0;
rst=1;
write((clockBurst+writeC));
for(i=0;i<8;i++)
{write(*(word+i));}
rst=0;
clk=1;
}
//==============================================================
//从寄存器连续数据到指定地址
//==============================================================
extern void readMultibit(uchar no,uchar *addr)
{
uchar i,temp=0;
clk=0;
rst=0;
rst=1;
write((clockBurst+readC));
for(i=0;i<no;i++)
{
temp=read();
*(addr+i)=temp;
}
rst=0;
clk=1;
}
//==============================================================
//写连续数据到内部RAM(30)
//==============================================================
extern void writeRAM(uchar no,uchar *word)
{
uchar i;
clk=0;
rst=0;
rst=1;
write((ramBurst+writeC));
for(i=0;i<no;i++)
{write(*(word+i));}
rst=0;
clk=1;
}
//==============================================================
//从内部RAM(30)读连续数据到指定地址
//==============================================================
extern void readRAM(uchar no,uchar *addr)
{
uchar i,temp=0;
clk=0;
rst=0;
rst=1;
write((ramBurst+readC));
for(i=0;i<no;i++)
{
temp=read();
*(addr+i)=temp;
}
rst=0;
clk=1;
}
//==============================================================
//初始化1302
//==============================================================
extern void init1302()
{
writeBite(trickleCharger,0xa4);
writeBite(control,0);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -