×
单片机 > 单片机程序设计 > 详情

DS1302读写驱动程序

发布时间:2020-06-04 发布时间:
|

/**************************
 文件所用资源
1.端口:P0.4,P0.5,P0.6
2.调用delay_ms函数
**************************/
/***********************
 1302引脚定义
***********************/
sbit  T_RST = P0^4;
sbit  T_DAT  = P0^5;
sbit  T_CLK = P0^6;
/********************************
 1302子程序区
********************************/
/*******************************
 DS1302写入1字节数据
*******************************/
void write_1302_byte(uchar dat)
{  
   uchar i;
    for(i=0;i<8;i++)
    {
        if(dat&0x01)T_DAT=1;
        else T_DAT=0;
        T_CLK=1;
  dat=dat>>1;   
        T_CLK=0;
    }//for
}
/*******************************
 从DS1302读出1字节数据
*******************************/
uchar read_1302_byte()
{        
 uchar i,dat;
 T_DAT=1;
    for(i=0;i<8;i++)
    {
      dat=dat>>1;
        if(T_DAT==1)dat=dat|0x80;
        T_CLK=1;
        T_CLK=0;    
    }//for            
    return dat;
}
/********************************
 DS1302写入指令或数据
********************************/
void write_1302(uchar addr,uchar dat)
{
 T_RST=0; //RST=0        
    T_CLK=0; //CLK=0
    T_RST=1; //RST=1,启动数据传输
    
    write_1302_byte(addr);
    write_1302_byte(dat);
  
    T_RST=0; //RST=0    
}
/********************************
 读DS1302里对应寄存器的数据
*********************************/
uchar read_1302(uchar addr)
{
 uchar dat;
    
    T_RST=0; //RST=0        
    T_CLK=0; //CLK=0
    T_RST=1; //RST=1,启动数据传输
    
    write_1302_byte(addr);
    dat=read_1302_byte();
    
    T_RST=0; //RST=0    
    
    return dat;
}
/******************************
 读取1302的时间
时间数据放在形参数组里,依次为
年、星期、月、日、时、分、秒
*******************************/
void read_time(uchar *p)
{
 uchar i;
 for(i=0x8d;i>=0x81;i--)
 {
  *p++=read_1302(i);
  i--;
 }
}
/*****************************
 初始化1302时间
时间数据放在形参数组里,依次为
年、星期、月、日、时、分、秒
******************************/
void write_time(uchar *p)
{
 uchar i;

 write_1302(0x8e,0x00); //允许写操作
 for(i=0x8c;i>=0x80;i--)
 {
  write_1302(i,*p++);
  i--;
 }
 write_1302(0x8e,0x80); //禁止写操作
}




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
用Atmega 16单片机驱动字符型液晶显示芯片