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

📄 ds1302.c

📁 DS1302专用驱动C程序 有需要的朋友可与我联系
💻 C
字号:
#include "main.h"
#include "ds1302.h"
#include	"mcs51.h"
typedef struct Tag_TIME//数据结构
{
	uchar SEC;//00-59,秒
	uchar	MIN;//00-59,分
	uchar	HR;//00-24,时
	uchar	DATE;//00-31(28,29,30).日期
	uchar	MONTH;//01-12,月
	uchar	DAY;//01-07,星期
	uchar	YEAR;//0-99,年
}TIME;

void	DS1302_TIME_SET(TIME temp);//时钟设置
void	DS1302_TIME_RD(TIME     *temp);//读时钟
static void DS1302_STR_RD( uchar	AddrCmd,uchar	length,uchar *Str)//数据输出
{
	uchar	i =0;
	uchar	temp =0;
	DS1302_SCLK =0;
	DS1302_CS	=0;
	Delay1302(2);
	DS1302_CS	=1;
	for(i=0;i<8;i++)//读数据之前先写入地址命令字节
	{
		DS1302_SCLK	=0;
		if(1&AddrCmd)//按位与
			DS1302_IO	=1;
		else
			DS1302_IO	=0;
		DS1302_SCLK	=1;//时钟翻转
		AddrCmd	>>=1;
	}
	DS1302_IO	=1;//读8位数据
	while(length--)
	{
		for(i=0;i<8;i++)
		{
			DS1302_SCLK	=0;
			temp	>>=1;
			if(DS1302_IO)
				temp	|=0x80;//按位或
			DS1302_SCLK	=1;
		}
		*Str	=temp;
		Str++;
	}
	DS1302_CS	=0;
	Delay1302(2);
}
static void	DS1302_STR_WR(uchar AddrCmd,uchar length,uchar *Str)//数据写入
{
	uchar i,temp;
	DS1302_SCLK	=0;
	DS1302_CS	=0;
	Delay1302(2);
	DS1302_CS	=1;
	Delay1302(2);
	for(i=0;i<8;i++)//写数据之前,先写入地址命令字节
	{
		DS1302_SCLK	=0;
		if(1&AddrCmd)
			DS1302_IO	=1;
		else
			DS1302_IO	=0;
		DS1302_SCLK	=1;
		AddrCmd	>>=1;
	}
	while(length--)
	{
		temp	=*Str;
		Str++;
		for(i=0;i<8;i++)
		{
			DS1302_SCLK	=0;
			if(1&temp)
				DS1302_IO	=1;
			else
				DS1302_IO	=0;
			DS1302_SCLK	=1;
			temp	>>=1;
		}
	}
	DS1302_CS	=0;
	Delay1302(2);
}

void	DS1302_TIME_SET(TIME temp)//时钟设置
{
	DS1302_STR_WR(DS1302_REG_SEC_WR,1,&temp.SEC);
	DS1302_STR_WR(DS1302_REG_MIN_WR,1,&temp.MIN);
	DS1302_STR_WR(DS1302_REG_HR_WR,1,&temp.HR);
	DS1302_STR_WR(DS1302_REG_DATE_WR,1,&temp.DATE);
	DS1302_STR_WR(DS1302_REG_MONTH_WR,1,&temp.MONTH);
	DS1302_STR_WR(DS1302_REG_DAY_WR,1,&temp.DAY);
	DS1302_STR_WR(DS1302_REG_YEAR_WR,1,&temp.YEAR);
}
void	DS1302_TIME_RD(TIME	*temp)//读时钟
{
	DS1302_STR_RD(DS1302_REG_SEC_RD,1,&((*temp).SEC));
	DS1302_STR_RD(DS1302_REG_MIN_RD,1,&((*temp).MIN));
	DS1302_STR_RD(DS1302_REG_HR_RD,1,&((*temp).HR));
	DS1302_STR_RD(DS1302_REG_DATE_RD,1,&((*temp).DATE));
	DS1302_STR_RD(DS1302_REG_MONTH_RD,1,&((*temp).MONTH));
	DS1302_STR_RD(DS1302_REG_DAY_RD,1,&((*temp).DAY));
	DS1302_STR_RD(DS1302_REG_YEAR_RD,1,&((*temp).YEAR));
}
void Delay1302(unsigned int a){//延时函数 1MS/次
  unsigned char i;
  while( --a != 0){
    for(i = 0; i < 125; i++);
  }
}//i 从0加到125,CPU大概就耗时1毫秒

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -