微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机的ds1302驱动程序

51单片机的ds1302驱动程序

时间:12-01 来源:互联网 点击:
////////////////////////////////////////////////////////////头文件/////////////////////////////////////////////////

/*******************************************************************************

* 标题: ds1302时钟芯片驱动程序 *

* 文件: ds1302.h ds1302.c *

* 日期: 2010-3-12 *

* 版本: 1.12(试验通过版)可用51hei单片机开发板 *

* 邮箱: acsdf139@163.com qq:526083029 *

* 网站: 无 *

********************************************************************************

* 描述: *

* 用法:首先在主程序内添加头文件#include"ds1302.c" *

* 在程序中使用dsgettime(¤ttime)函数获取时钟芯片的时间数据 *

* 使用timetostr(¤ttime)函数将时间数据转换液晶字符 *

* 使用datetostr(¤ttime)函数将日期数据转换液晶字符 *

* 存数据时,直接使用 wr1302(uchar add,uchar dat)即可 *

********************************************************************************

*自己参照网上,朋友,以及书本资料上写的,所以没有版权 *

*此程序,可用于学习,参考及实际设计中,欢迎转载复制以及建议批评 *

*qq:526083029 小张 *

********************************************************************************/

#ifndef _DS1302_H_

#define _DS1302_H_

#include

#include

typedef struct __SYSTEMTIME__

{

  unsigned char Second;

  unsigned char Minute;

  unsigned char Hour;

  unsigned char Week;

  unsigned char Day;

  unsigned char Month;

  unsigned char Year;

  unsigned char datestr[11];

  unsigned char timestr[9];

}systime; //定义的时间类型

#define uchar unsigned char

#define uint unsigned int

#define am(x) x

#define pm(x) (x+12) // 转成24小时制

#define dssecond 0x80 //时钟芯片的寄存器位置,存放时间

#define dsminute 0x82

#define dshour 0x84

#define dsweek 0x8A

#define dsday 0x86

#define dsmonth 0x88

#define dsyear 0x8C

#define dsbaohu 0x8E

#define on 0x80

#define off 0x00

extern uchar change(uchar x);

extern uchar bcdtohex(uchar val);

extern void wr1302b(uchar temp);

extern void wr1302(uchar add,uchar dat);

extern uchar re1302b();

extern uchar re1302(uchar address);

extern void dsinit(void);

extern void dsgettime(systime *ds1302);

extern void timetostr(systime *ds1302);

extern void datetostr(systime *ds1302);

#endif

////////////////////////////////////////////////////////////c程序////////////////////////////////////////////////////

#include

#include "ds1302.h"

#include

//管角定义

sbit ACC0 = ACC^0;

sbit ACC7 = ACC^7;

sbit dssck=P1^0;

sbit dssda=P1^1;

sbit dsrst=P1^2;// DS1302复位

systime currenttime; //定义结构体变量不可以在点h文件中定义

uchar flaghour,flagmin,flagsec,flagyear,flagmonth,flagday,flagweek,week_value[2];

/*************************************

函数名:change

函数功能:十进制转换成十六进制

参数:x(十六进制数)

返回:y(十进制数)

备注:无

*************************************/

uchar bcdtohex(uchar val)

{

uchar i;

i = val&0x0f; //按位与,i得到低四位数。

val >>= 4; //右移四位,将高四位移到低四位的位置,得到高四位码值。

val &= 0x0f; //防止移位时高位补进1,只保留高四位码值

val *= 10; //高位码值乘以10

i += val; //然后与第四位码值相加。

return i; //将得到的十进制数返回

}

/*************************************

函数名:wr1302b

函数功能:实时时钟写入一个字节

参数:d

返回:无

备注:

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top