⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds1302op-cn.h

📁 时钟芯片ds1302 程序 源程序按版本号放在文件夹中。里面有在Protues中仿真的DSN文件。 打开MPLAB的MCP文件进行编译 将DSN文件载入Protues中 将生成的HEX导入到P
💻 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 + -