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

📄 ds1308.h

📁 通过单片机实现电子钟功能
💻 H
字号:
#ifndef __DS1302_H__
#define __DS1302_H__
//#define uchar unsigned char
//#define uint unsigned int

uchar sec,min,hr,day,we,mn,ys;
sbit clk=P2^5;
sbit dat=P2^6;
sbit rst=P2^4;

sbit A0=ACC^0;
sbit A1=ACC^1;
sbit A2=ACC^2;      
sbit A3=ACC^3;
sbit A4=ACC^4;
sbit A5=ACC^5;
sbit A6=ACC^6;
sbit A7=ACC^7;

//-------------------------------------------------------
void InputByte(uchar dd)        //向ds1302 写一个字节数据
   {
     uchar i;
     ACC=dd;
     for(i=8;i>0;i--)
      {
       dat=A0;
       clk=1;
       clk=0;
       ACC=ACC>>=1;
        }
   }  
//-------------------------------------------------------
uchar OutputByte(void)      //ds1302 读取一个字节的数据
   {
     uchar i;
     dat=1;      
     for(i=8;i>0;i--)
      {
        ACC=ACC>>1;
        A7=dat;
        clk=1;
        clk=0;
        }      
      return(ACC);
     }
//------------------------------------------------------------------------
void Write(uchar addr,uchar num)	  //向ds1302 指定地址写一个字节数据
  {
    rst=0;
    clk=0;
    rst=1;
    InputByte(addr);  
    InputByte(num);    
    clk=1;
    rst=0;
    }
//---------------------------------------------------------------------
uchar Read(uchar addr)			    //从ds1302指定地址读取一个字节的数据
  {
    uchar dd=0;
    rst=0;
    clk=0;
    rst=1;
    InputByte(addr);
    dd=OutputByte();
    clk=1;
    rst=0;
    return(dd);
   }
//--------------------------------------------------------------
uchar ReadSec()
  {
   uchar dd; 
   dd=Read(0x81);
   return(dd);
   }
//--------------------------------------------------------------
uchar ReadMin()
  {
   uchar dd; 
   dd=Read(0x83);
   return(dd);
    }       
//--------------------------------------------------------------
uchar ReadHr()
  {
    uchar dd; 
    dd=Read(0x85);
    return(dd);
   }
//------------------------------------------------------------   
uchar ReadWe()
  {
    uchar dd; 
    dd=Read(0x8b);
    return(dd);
    }
//------------------------------------------------------------
uchar ReadDay()
  {
    uchar dd; 
    dd=Read(0x87);
    return(dd);
   }
//------------------------------------------------------------
uchar ReadMn()
  {
    uchar dd; 
    dd=Read(0x89);
    return(dd);
   }
//------------------------------------------------------------
uchar ReadYs()
  {
    uchar dd; 
    dd=Read(0x8d);
    return(dd);
   }
//------------------------------------------------------------
void WriteSec(uchar num)
      {
       Write(0x80,num);
       }
//-----------------------------------------------------------
void WriteMin(uchar num)
  {
    Write(0x82,num);
   }
//-----------------------------------------------------------
void WriteHr(uchar num)
  {
    Write(0x84,num);
   }
//-----------------------------------------------------------
void WriteDay(uchar num)
 {
   Write(0x86,num);
  }
//-----------------------------------------------------------
void WriteMn(uchar num)
  {
    Write(0x88,num);
   }
//-----------------------------------------------------------
void WriteWe(uchar num)
 {
   Write(0x8a,num);
   }
//-----------------------------------------------------------
void WriteYs(uchar num)
  {
    Write(0x8c,num);
   }
//-----------------------------------------------------------
void DisableWR(void)        //write data,read 0
 {
   Write(0x8e,0x00);
   }
//----------------------------------------------------------
void EnableWR(void)              //can''d write,read data   
 {
   Write(0x85,0x80);
  }

 void 	DS1308_init()
 {
 	DisableWR();
	EnableWR();         
    WriteSec(0x00);			     //写入时间和日期
    WriteMin(0x30);
    WriteHr(0x12);
    WriteDay(0x01);
    WriteWe(0x03);
    WriteMn(0x04);  
    WriteYs(0x09);
 }

 void  read_DS1308()
 {
    sec=ReadSec();			 	 //读取时间和日期
    min=ReadMin();
    hr= ReadHr();
    day=ReadDay();
    we= ReadWe();
    mn= ReadMn();
    ys= ReadYs();
 
 }

#endif

⌨️ 快捷键说明

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