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

📄 ds1302.c

📁 测温加上时间定时功能
💻 C
字号:
#include"Bit_Define.h"
/*********************************************************************/
sbit T_CLK = P1^3; /*实时时钟时钟线引脚 */
sbit T_IO = P1^5; /*实时时钟数据线引脚 */
sbit T_RST = P1^4; /*实时时钟复位线引脚 */
void outbyte(uchar data_da)
{
	uchar i;
	for(i=0;i<8;i++)
	{       
		T_CLK=0;					//上升沿输出数据
        if(data_da&0x01)	T_IO=1;
        else				T_IO=0;
        T_CLK=1;
        data_da=data_da>>1;
	}
}

uchar inbyte(void)
{
	uchar i,data_da;				//设置IO位输入模式
    T_CLK=1;
    for(i=0;i<8;i++)			//下降沿读入数据,低位在先
    {
        data_da>>=1;
        T_CLK=0;				
        if(T_IO)	data_da|=0x80;
        else					data_da&=~0x80;       
        T_CLK=1;
	}
					
	return(data_da);
}

void W1302(uchar cmd,uchar dat)   
{      

	
    T_CLK=0;					//RST 为1时,SCLK必须为"0"
    T_RST=1;    
   
   	outbyte(cmd);
    T_IO=0;
   	outbyte(dat);
    
     T_RST=0;
}

uchar R1302(uchar cmd)
{  
	uchar data_da;
   	
   	T_CLK=0;					// RST 为1时,SCLK必须为"0"
   	T_RST=1;

	outbyte(cmd);
	data_da=inbyte();
         
    T_RST=0;
   	T_CLK=0;
    return(data_da);
}

void Write_RAM(uchar *ram)
{
	uchar i;
	W1302(0x8e,0x00);         	//控制命令,WP=0,写操作
     T_RST=0;
    T_CLK=0;
    T_RST=1;
    outbyte(0xfe);        		//0xfe:时钟多字节写命令
    for (i = 31; i>0; i--)     	//31Byte 寄存器数据
    {
        outbyte(*ram); 			//写1Byte数据
        ram++;
    }
    T_CLK=1;
   T_RST=0;
}
void Read_RAM(uchar *ram)
{
	uchar i;
	T_RST=0;
    T_CLK=0;
    T_RST=1;
    outbyte(0xff);        		//0xbe:时钟多字节写命令
    for (i = 31; i>0; i--)     	//31Byte 寄存器数据
    {
        *ram=inbyte(); 			//读1Byte数据
        ram++;
    }
    T_CLK=1;
    T_RST=0;
}

void Set_Times(uchar *t)
{
	uchar tbl[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};//时间地址
	uchar i,high4,low4,buf;
	for(i=0;i<7;i++)
	{
		high4=t[i]/10;			//以BCD码形势写入1302中
		low4 =t[i]%10;
		buf=(high4<<4)|low4;
		W1302(tbl[i],buf);
	}
}

void Get_Times(uchar *t)
{
	uchar tbl[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};//时间地址
	uchar i,buf=0;
	for(i=0;i<7;i++)
	{
		buf=R1302(tbl[i]);
		t[i]=(buf>>4)*10+(buf&0x0f);				 //计算时间
	}
}

void Init_1302(void)
{
	W1302(0x90,0xa4);      		//设定充电方式
    W1302(0x8e,0);         		//开始振荡,允许写入
}

⌨️ 快捷键说明

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