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

📄 clock.h

📁 电子钟(有二十四节气)
💻 H
字号:
#ifndef _REAL_TIMER_DS1302
#define _REAL_TIMER_DS1302
/*****************************预定义**************************************/
#define uchar unsigned char
#define uint unsigned int/***************************DS1302管脚配置****************************/
sbit clock_rst = P2^4;
sbit clock_io  = P2^3;       
sbit clock_sclk= P2^2;
/*********************为了编程方便定义的位变量**********************/
sbit ACC0 = ACC ^ 0;
sbit ACC7 = ACC ^ 7;
#define second_address	0x80
#define minute_address	0x82
#define hour_address	0x84 
#define day_address	    0x86
#define month_address	0x88
#define year_address	0x8C
/********************************************************************************************
* 函数名称:Clock_Write_Byte()
* 功    能:向时钟DS1302写入一个字节
* 入口参数:temp
* 出口参数:无
*********************************************************************************************/
void Clock_Write_Byte(uchar temp)
{
    uchar i;
    ACC=temp;
    for(i=8; i>0; i--)
    {
        clock_io = ACC0;           	//相当于汇编中的 RRC
        clock_sclk = 1;
        clock_sclk = 0;
        ACC = ACC >> 1; 
    } 
}
/********************************************************************************************
* 函数名称:Clock_Read_Byte()
* 功    能:从时钟DS1302读取一个字节
* 入口参数:无
* 出口参数:ACC
*********************************************************************************************/
uchar Clock_Read_Byte(void)
{
	uchar i;
    for(i=8; i>0; i--)
    {
        ACC = ACC >>1;         			//相当于汇编中的 RRC 
        ACC7= clock_io;
		clock_sclk = 1;
        clock_sclk = 0;
	} 
    return(ACC);
}
/********************************************************************************************
* 函数名称:Clock_Write_Time()
* 功    能:向时钟DS1302写入一个时间
* 入口参数:时间地址  
* 出口参数:无
*********************************************************************************************/
void Clock_Write_Time(uchar address, uchar temp)
{
	clock_sclk=0;
	clock_rst=0;
	clock_rst=1;
	Clock_Write_Byte(address);
	Clock_Write_Byte(temp);
	clock_rst=0;
	clock_sclk=1;
}
/********************************************************************************************
* 函数名称:Clock_Read_Time()
* 功    能:从时钟DS1302读出一个时间
* 入口参数:时间地址  
* 出口参数:时间数据
*********************************************************************************************/
uchar Clock_Read_Time(uchar address)
{
	uchar temp=0;
	clock_sclk=0;
	clock_rst=0;
	clock_rst=1;
	Clock_Write_Byte( address|0x01 );
	temp=Clock_Read_Byte();
	clock_rst=0;
	clock_sclk=1;
	return(temp);
}

/********************************************************************************************
* 函数名称:Clock_Initial()
* 功    能:时钟初始化
* 入口参数:时间地址   时间数据
* 出口参数:
*********************************************************************************************/
void Clock_Initial(uchar *clock_time )
{
    Clock_Write_Time(0x8e,0x00);                //WP=0 写操作
//	*clock_time &= 0x7f;                             //最高位为 0 时钟芯片工作
    Clock_Write_Time( second_address, * clock_time );   //秒
    clock_time ++;
    Clock_Write_Time( minute_address, * clock_time );    //分
    clock_time ++;
    Clock_Write_Time( hour_address, * clock_time );     //时
    clock_time ++;
    Clock_Write_Time( day_address, * clock_time );      //日
    clock_time ++;
    Clock_Write_Time( month_address, * clock_time);   //月
	clock_time ++;
    Clock_Write_Time( year_address, * clock_time );    //年

    Clock_Write_Time( 0x8e,0x80);              //WP=1 写保护	
}

/********************************************************************************************
* 函数名称:Clock_Fresh( uchar * clock_time )
* 功    能:从时钟DS1302读出时间
* 入口参数:时间地址  
* 出口参数:时间数据
*********************************************************************************************/
void Clock_Fresh(uchar * clock_time )
{
	* clock_time = Clock_Read_Time( second_address );  //读秒
	clock_time ++;
	* clock_time = Clock_Read_Time( minute_address ); //读分
	clock_time ++;
	* clock_time = Clock_Read_Time( hour_address ); //读时
    clock_time ++;
    * clock_time = Clock_Read_Time( day_address ); //读日	
	clock_time ++;
    * clock_time = Clock_Read_Time( month_address ); //读月
	clock_time ++;
	*clock_time  = Clock_Read_Time( year_address ); //读年	
}
/********************************************************************************/
#endif

⌨️ 快捷键说明

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