📄 ds1302op-cn.h
字号:
/***********************************
* 公司名称: HSLCN
*
* 文件名称: DS1302op.h
* 摘 要: A declaration File
*
* 版本号码: 5.0
* 作 者: lxyppc
* 创建日期: 2007-1-29
*
* 版权所有 (C) 2007 : lxyppc
* All rights reserved.
************************************/
#ifndef DS1302OP_H
#define DS1302OP_H
//PIC常规定义
#include <pic.h>
//DS1302 中的特殊定义
#include "DS1302.h"
/*
***************说 明***************
使用这些函数前,需要设置Reset Data 和Clock这三个引脚
并且保证在使用这些函数前,这三个引脚都设置为输出模式
最好是在主程序中将Reset引脚一直设置为低电平
由于DS1302的I/O都在一个脚上因此还需要定义Data脚的控制位
如:如果你用PORTA的三号位做为Data脚,
相应的,你需要要将TIRSA的三号位设置为控制位,即DataDir
//*/
/*
例如:
#define DS_RST RA1
#define DS_Clock RA2
#define DS_Data RA3
#define DataDir TRISA3
此例中RA1为Reset脚,RA2为时钟脚,RA3为数据脚
同时将TRISA3做为数据的方向控制位
这些脚在使用前需要设置成为输出模式
//*/
//定义引脚 将<need you to define> 替换成为你需要的位
//定义时钟脚
#define DS_Clock <need you to define>
//定义数据脚
#define DS_Data <need you to define>
//定义复位脚
//复位脚在使用前需要保持低电平
#define DS_RST <need you to define>
//定义数据方向控制位,必需为数据脚的控制位
#define DataDir <need you to define>
//传递变量时用,用外部变量可以加快传递速度
extern unsigned char DataAll;
extern unsigned char DataTemp;
//操作DS1302的函数
//所有1302的操作都用这一个函数完成
//说明:ptr 需要读出或写入的数据的地址
// DataLen 数据的长度
// CMDByte 写入DS1302的命令
// 返回值 最后一个写入或读出DS1302的数据
unsigned char OperateDS(unsigned char *ptr,\
unsigned char DataLen,unsigned char CMDByte);
//以下的命令只是为了方便的调用上面那个基本函数
//免去记忆DS1302命令的麻烦
//单字节模式读写1302
#define WriteDS(cmd,data) DataTemp=data;\
OperateDS(&DataTemp,1,cmd)
#define ReadDS(cmd) OperateDS(&DataAll,1,cmd)
//多字节模式读写1302
#define WriteDSAll(ptr,length,cmd) \
OperateDS(ptr,length,cmd)
#define ReadDSAll(ptr,length,cmd) \
OperateDS(ptr,length,cmd)
//单字节模式写入时间内存或是普通内存
#define WriteRAM(addr,data) WriteDS(WriteRAMCMD(addr),data)
#define WriteTime(addr,data) WriteDS(WriteTimeCMD(addr),data)
//单字节模式读出时间内存或是普通内存
#define ReadRAM(addr) ReadDS(ReadRAMCMD(addr))
#define ReadTime(addr) ReadDS(ReadTimeCMD(addr))
//多字节模式写入时间内存或是普通内存
#define WriteRAMAll(addr,length) \
WriteDSAll(addr,length,WriteRAMAllCMD)
#define WriteTimeAll(addr) \
WriteDSAll(addr,TimeBrust,WriteTimeAllCMD)
//多单字节模式读出时间内存或是普通内存
#define ReadRAMAll(ptr,length) \
ReadDSAll(ptr,length,ReadRAMAllCMD)
#define ReadTimeAll(ptr) \
ReadDSAll(ptr,TimeBrust,ReadTimeAllCMD)
/*
Example:
unsigned char str[]="Hello World!";
unsigned char str2[12];
//the string "Hello World!" will write into DS1302
WriteRAMAll(str,12);
//the str2 = "Hello World!"
ReadRAMAll(str2,12);
//*/
/* Read or write time
Example:
unsigned char Time[8];
unsigned char Hour;
unsigned char Year;
ReadTimeAll(Time);
Hour=Time[DS_Hour];
Date=Time[DS_Year];
//The hour and year will be restored in Hour and Year
//*/
//一些通用操作
//设置充电模式
#define SetCharger(x) WriteDSTime(DS_Charger,x)
/*
Example:
//使用2个二极管,4K欧电阻充电
SetCharger(Charge_ON & Charge_2D & Charge_R4K);
//关闭充电功能
SetCharger(Charge_OFF);
//*/
//开启/暂停 DS1302
#define StopDS1302(x) WriteTime(DS_Second,x|0B10000000)
#define StartDS1302(x) WriteTime(DS_Second,x&0B01111111)
/*
Example:
//暂停
StopClock(0x15);
//开启,设置为16秒
StartClock(0x16);
//暂停
StopClock(ReadSecond)
//*/
//锁定/解锁 DS_1302 (操作写保护位)
#define LockDS1302 WriteTime(DS_Control,0xff)
#define UnlockDS1302 WriteTime(DS_Control,0x00)
//判断1302是否被锁定
#define IsLocked ReadTime(DS_Control)&0B10000000
/*
Example:
//锁定
LockDS1302
//解锁
UnlockDS1302
if(IsLocked)
// locked operation
else
// unlocked operation
//*/
//设置时钟/日历
#define SetSecond(x) WriteTime(DS_Second,x)
#define SetMinute(x) WriteTime(DS_Minute,x)
#define SetHour(x) WriteTime(DS_Hour,x)
#define SetDate(x) WriteTime(DS_Date,x)
#define SetMonth(x) WriteTime(DS_Month,x)
#define SetDay(x) WriteTime(DS_Day,x)
#define SetYear(x) WriteTime(DS_Year,x)
//设置24/12小时 时制
#define Set24Hour(x) WriteTime(DS_Hour,x&0B00111111)
#define SetAMHour(x) WriteTime(DS_Hour,x|0B10000000)
#define SetPMHour(x) WriteTime(DS_Hour,x|0B10100000)
/*
Example:
//设为17点
Set24Hour(0x17);
//设为下午7点
SetPMHour(0x07);
//设为上午5点
SetAMHour(0x05);
//*/
//读取时间/日历
#define ReadSecond ReadTime(DS_Second)
#define ReadMinute ReadTime(DS_Minute)
#define ReadHour ReadTime(DS_Hour)
#define ReadDate ReadTime(DS_Date)
#define ReadMonth ReadTime(DS_Month)
#define ReadDay ReadTime(DS_Day)
#define ReadYear ReadTime(DS_Year)
//将读取的小时转化成为12或24小时,需要与ReadHour配合使用
#define Get24Hour(x) x&0B00111111
#define Get12Hour(x) x&0B00011111
//判断时间状态,,需要与ReadHour配合使用
#define Is12Hour(x) x&0B10000000
#define IsPM(x) x&0B00100000
/*
Example:
unsigned char tmp;
unsigned char Hour;
bit IsAfternoon;
bit Is24Mode;
//Read hour to tmp
tmp=ReadHour;
//if it's in 12 hour mode
if(Is12Hour(tmp))
{
//format it to 12 hour
Hour=Get12Hour(tmp);
Is24Mode=0;
//if it's afternoon
if(IsPM(tmp))
//yes, set now is afternoon
IsAfternoon=1;
else
//no, do not set it
IsAfternoon=0;
}
//it's in 24 hour mode
else
{
//format it to 24 hour mode,
//if it's already in 24 mode, there is no need to do this
Hour=Get24Hour(tmp);
Is24Mode=1;
}
//*/
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -