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

📄 ds1302.h

📁 一个用1602显示的多功能电子钟,内有实时时钟功能和温度显示功能!
💻 H
字号:
#ifndef DS1302_H
#define DS1302_H

#include<reg52.h>

/******************************************************************
           IO口宏定义
*******************************************************************/
sbit T_CLK=P3^0;
sbit T_IO=P3^1;
sbit T_RST=P3^2;
sbit ACC7=ACC^7;
sbit ACC0=ACC^0;

 unsigned char hour_sound=0;              //闹钟数据 小时                              
 unsigned char minute_sound=0;			  //闹钟数据  分钟
/************************************************************************
 函 数 名:RTInputByte
功 能:实时时钟写一字节
入口参数:无 
返 回 值:无
             
***************************************************************************/
 void RTInputByte(unsigned char d) 
{ 
unsigned char i;
ACC = d;
for(i=8; i>0; i--)
{
T_IO = ACC0; /*相当于汇编中的 RRC  */
T_CLK = 1;
T_CLK = 0;
ACC = ACC >> 1; 	 

} 
}

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

函 数 名:RTOutputByte()
功 能:实时时钟读取一字节
说 明:从DS1302读取1Byte数据 (内部函数)
入口参数:无 
返 回 值:ACC         十进制数据
*******************************************************/
unsigned char RTOutputByte(void) 
{ 
unsigned char i;
for(i=8; i>0; i--)
{
ACC = ACC >>1;
ACC7 = T_IO;
T_CLK = 1;
T_CLK = 0;			  
   
} 
return(ACC); 		
}
/******************************************************************** 

函 数 名:W1302()
功 能:往DS1302写入数据
说 明:先写地址,后写命令/数据 (内部函数)
调 用:RTInputByte() , RTOutputByte()
入口参数:ucAddr: DS1302地址, ucData: 要写的数据是十进制
 
***********************************************************************/
void W1302(unsigned char ucAddr, unsigned char ucData)
{ unsigned char temp1,temp2;

temp1=(ucData/10)*16;
temp2=ucData%10;
ucData=temp1+temp2;
T_RST = 0;
T_CLK = 0;
T_RST = 1;
RTInputByte(ucAddr); /* 地址,命令 */
RTInputByte(ucData); /* 写1Byte数据*/
T_CLK = 1;
T_RST = 0;
} 
/******************************************************************** 

函 数 名:R1302()
功 能:读取DS1302某地址的数据
说 明:先写地址,后读命令/数据 (内部函数)
调 用:RTInputByte() , RTOutputByte()
入口参数:ucAddr: DS1302地址
***********************************************************************/
unsigned char R1302(unsigned char ucAddr)
{
unsigned char ucData,temp,temp2;
T_RST = 0;
T_CLK = 0;
T_RST = 1;
RTInputByte(ucAddr); /* 地址,命令 */
ucData = RTOutputByte(); /* 读1Byte数据 */
T_CLK = 1;
T_RST = 0;
temp=(ucData>>4)*10	;
   temp2 =ucData&0x0f;
	temp=temp+temp2  ;
return(temp);
}/******************************************************************** 
*
* 名称: v_BurstW1302T
* 说明: 先写地址,后写数据(时钟多字节方式)
* 功能: 往DS1302写入时钟数据(多字节方式)
* 调用: v_RTInputByte() 

***********************************************************************/
void v_BurstW1302T(unsigned char *pSecDa)
{
	unsigned char i;
	unsigned char ucddr=0x80;
    W1302(0x8e,0x00);//控制命令 wp=0,写操作 写入8个0;
	for(i=7;i>0;i--)
	{
	 W1302(ucddr,*pSecDa);
		pSecDa++;
		ucddr+=2;
	}
	 W1302(0x8e,0x80);
} 
/******************************************************************** 
*
* 名称: v_BurstR1302T
* 说明: 先写地址,后读命令/数据(时钟多字节方式)
* 功能: 读取DS1302时钟数据
* 调用: v_RTInputByte() , uc_RTOutputByte()
* 输出: pSecDa: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年 

***********************************************************************/
void v_BurstR1302T(unsigned char *pSecDa)
{
	unsigned char i;
	unsigned char ucddr=0x81;
	 W1302(0x8e,0x00);
	for(i=0;i<7;i++)
	{
		pSecDa[i]=R1302(ucddr);
 		ucddr+=2;
	}
}
void init_1302()
{
  unsigned char print[7]={0,0,3,8,11,4,7};
  v_BurstW1302T(print);  



}
/************************************************************************
                       闹钟检测函数
					   若到了闹钟设定的时间就返回1 

*************************************************************************/
 unsigned char  reach_time()          //闹钟 +日程表提醒;
{		unsigned char print[7], k=0;
		v_BurstR1302T(print);
    
          if((print[2]==hour_sound)&&(print[1]==minute_sound))
           {   	    
		     k=1;     
				  
		    }
				
			
    	 return k;
 } 
 
#endif

⌨️ 快捷键说明

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