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

📄 ds1302.c

📁 一个基于51单片机的报警系统。包含有电路图
💻 C
字号:
#include <reg51.h>
#include "main.h"


#define uchar unsigned char
#define uint unsigned int

///////////////////////////////////////////////////全局变量
//uchar idata calen[8]={0x9d,0x58,0x23,0x31,0x04,0x03,0x06,0x00};		//日历存放地址
//sbit T_CLK=P1^0;			//1302的CLK引脚
//sbit T_IO=P1^1;				//1302的数据引脚
//sbit T_RST=P1^2;			//1302的复位引脚

void SystemInitial(void);
void CalendarInitial(uchar * pcalen);	//日历初始化程序

void BurstR1302(uchar *pcalen);		// 从1302读多字节,并存入日历数组中
void BurstR1302(uchar *pcalen);		// 从1302读多字节,并存入日历数组中
void RTInputByte(uchar udata);		//从1302写入一字节的数据
uchar RTOutputByte(void);		//从1302读一字节的数据
void Writ1302(uchar uAddr,uchar udata);	//写1字节的数据入指定地址
uchar Read1302(uchar uAddr);	//从指定地址读出1字节数据
void BurstW1302(uchar * pcalen);	//写入多字节的数据
void Set1302(uchar *pClock);    //Set1302 Initial
void Delay_us(uchar i);

//sbit ACC0 = ACC^0;
//sbit ACC7 = ACC^7;




void main(void)
{
	SP=0x3f;
        Delay_us(4);
//	uchar * pcalen;
//	pcalen=calen;
//    uchar calen[8]={52,67,8,5,8,6,6,0};
	CalendarInitial(calen);	//


	while(1)
		{
		BurstR1302(calen);		//读日历,并送到pcalen[]中
		}
}

void CalendarInitial(pcalen)//日历初始化程序
uchar pcalen[8];
{
	uchar i;
	BurstW1302(pcalen);		//读日历,并送到pcalen[]中
	i=Read1302(0x80);
	i=i&0x7f;
        while(1)
        {				//ch=0
	Writ1302(0x80,i);	//起震
        
        Delay_us(100);
        Writ1302(0x80,i);
        
        
        }
}


void BurstR1302(pcalen)		// 从1302读多字节,并存入日历数组中
uchar pcalen[8];
{
	uchar i;
	T_RST=0;
	T_CLK=0;
	T_RST=1;
	RTInputByte(0xbf);		//oxbf 时钟多字节读命令
	for(i=0; i<8; i++)
		{
			*pcalen=RTOutputByte();	//读1BYTE的数据
			pcalen++ ;
		}
	T_CLK=1;
	T_RST=0;
}

////////////////////////////////////////////////////////

void RTInputByte(udata)		//to1302写入一字节的数据
uchar udata;
{
	uchar i;
	ACC=udata;
	for(i=8;i>0;i--)
	{
		T_IO=ACC0;
		T_CLK=1;
		T_CLK=0;
		ACC=ACC>>1;
	}
}

/////////////////////////////////////////////////////
uchar RTOutputByte(void)		//从1302读一字节的数据
{
	uchar i;
	for(i=8;i>0;i--)
	{
                ACC=ACC>>1;
		ACC7=T_IO;
                T_CLK=1;
                T_CLK=0;

	}
	return(ACC);
}

//////////////////////////////////////////////////////

void Writ1302(uchar uAddr,uchar udata)	//写1字节的数据入指定地址
{

	T_RST=0;
	T_CLK=0;
	T_RST=1;
	RTInputByte(uAddr);	//先输入地址
	RTInputByte(udata);	//写数据
	T_CLK=1;
	T_RST=0;
}

//////////////////////////////////////////////////////

uchar Read1302(uchar uAddr)	//从指定地址读出1字节数据
{
	uchar udata;
	T_RST=0;
	T_CLK=0;
	T_RST=1;
	RTInputByte(uAddr);	//写入地址
	udata=RTOutputByte();	//读出数据
	T_CLK=1;
	T_RST=0;
	return(udata);
}

/////////////////////////////////////////////////////

void BurstW1302(pcalen)	//写入多字节的数据
uchar pcalen[8];
{
	uchar i;
	Writ1302(0x8e,0x00);  //WP=0,写操作
	T_RST=0;
	T_CLK=0;
	T_RST=1;
	RTInputByte(0xbe);	//0xbe ;时钟多字节写命令
	for(i=8;i>0;i--)
	{
		RTInputByte(*pcalen);
		pcalen++;
	}
	T_CLK=1;
	T_RST=0;
}

////////////////////////////////////////////////////
/*void Set1302(uchar *pClock)    //Set1302 Initial
{
    uchar i;
    uchar ucAddr = 0x80;
    W1302(0x8e,0x00);           // 控制命令,WP=0,写操作?
    for(i =7; i>0; i--)
    {
        W1302(ucAddr,*pClock);  // 秒 分 时 日 月 星期 年
        pClock++;
        ucAddr +=2;
    }
    W1302(0x8e,0x80);           // 控制命令,WP=1,写保护?
}
*///////

void Delay_us(uchar i)
{
     uchar d;
    for(d=0;d<i;d++);
}

⌨️ 快捷键说明

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