51单片机的ds1302驱动程序
/*******************************************************************************
* 标题: 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
返回:无
备注:
51单片机ds1302驱动程 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)