您的位置 首页 动态

51单片机的ds1302驱动程序

头文件**************

////////////////////////////////////////////////////////////头文件/////////////////////////////////////////////////

/*******************************************************************************
* 标题: ds1302时钟芯片驱动程序 *
* 文件: ds1302.h ds1302.c *
* 日期: 2010-3-12 *
* 版别: 1.12(实验经过版)可用51hei单片机开发板 *
* 邮箱: acsdf139@163.com qq:526083029 *
* 网站: 无 *
********************************************************************************
* 描绘: *
* 用法:首先在主程序内增加头文件#include”ds1302.c” *
* 在程序中运用dsgettime(&currenttime)函数获取时钟芯片的时刻数据 *
* 运用timetostr(&currenttime)函数将时刻数据转化液晶字符 *
* 运用datetostr(&currenttime)函数将日期数据转化液晶字符 *
* 存数据时,直接运用 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
回来:无
补白:合作wr1302运用
*************************************/
void wr1302b(uchar d)
{
unsigned char i;
ACC = d;
for(i=8; i>0; i–)
{
dssda = ACC0; //相当于汇编中的 RRC
dssck = 1;
dssck = 0;
ACC = ACC >> 1;
}
}
/*************************************
函数名:wr1302
函数功用:向1302中写数据
参数:ucAddr(DS1302地址), ucData(要写的数据)
回来:无
补白:无
*************************************/
void wr1302(uchar ucAddr, uchar ucDa)
{
dsrst = 0;
dssck = 0;
dsrst = 1;
wr1302b(ucAddr); // 地址,指令
wr1302b(ucDa); // 写1Byte数据
dssck = 1;
dsrst = 0;
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/dongtai/255023.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部