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

📄 ds1302.h

📁 一个用C语言写的基于98C51单片机的电子钟程序
💻 H
字号:
sbit T_CLK=P1^2;
sbit T_IO =P1^1;
sbit T_RST=P1^0;
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;
//********DS1302读写程序***************
/******************************************************************** 
 函 数 名:RTInputByte()
 功    能:实时时钟写入一字节
 说    明:往DS1302写入1Byte数据 (内部函数)
 入口参数:d 写入的数据 
 返 回 值:无  
 ***********************************************************************/
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
 设    计:zhaojunjie           日    期:2002-03-19
 修    改:                     日    期: 
***********************************************************************/
unsigned char RTOutputByte(void) 
{ 
    unsigned char i;
    for(i=8; i>0; i--)
    {
        ACC = ACC >>1;         //相当于汇编中的 RRC
        ACC7 = T_IO;
        T_CLK = 1;
        T_CLK = 0;
    } 
    return(ACC); 
}
/******************************************************************** 
 函 数 名:Write1302()
 功    能:往DS1302写入数据
 说    明:先写地址,后写命令/数据 (内部函数)
 调    用:RTInputByte() , RTOutputByte()
 入口参数:ucAddr: DS1302地址, ucData: 要写的数据
 返 回 值:无
 ***********************************************************************/
void Write1302(unsigned char ucAddr, unsigned char ucDa)
{
    T_RST = 0;
    T_CLK = 0;
    T_RST = 1;
    RTInputByte(ucAddr);       // 地址,命令 
    RTInputByte(ucDa);         // 写1Byte数据
    T_CLK = 1;
    T_RST = 0;
}
/******************************************************************** 
 函 数 名:Read1302()
 功    能:读取DS1302某地址的数据
 说    明:先写地址,后读命令/数据 (内部函数)
 调    用:RTInputByte() , RTOutputByte()
 入口参数:ucAddr: DS1302地址
 返 回 值:ucData :读取的数据
***********************************************************************/
unsigned char Read1302(unsigned char ucAddr)
{
    unsigned char ucData;
    T_RST = 0;
    T_CLK = 0;
    T_RST = 1;
    RTInputByte(ucAddr);             // 地址,命令 
    ucData = RTOutputByte();         // 读1Byte数据
    T_CLK = 1;
    T_RST = 0;
    return(ucData);
}
/******************************************************************** 
 函 数 名:Set1302()
 功    能:设置初始时间
 说    明:先写地址,后读命令/数据(寄存器多字节方式)
 调    用:Write1302()
 入口参数:pClock: 设置时钟数据地址 格式为: 秒 分 时 日 月 星期 年
                               7Byte (BCD码)1B 1B 1B 1B 1B  1B  1B
 返 回 值:无
***********************************************************************/
void Set1302(unsigned char *pClock) 
{
    unsigned char i;
    unsigned char ucAddr = 0x80; 
    Write1302(0x8e,0x00);           // 控制命令,WP=0,写操作
    for(i =7; i>0; i--)
    { 
        Write1302(ucAddr,*pClock);  // 秒 分 时 日 月 星期 年
        pClock++;
        ucAddr +=2;
    }
    Write1302(0x8e,0x80);           // 控制命令,WP=1,写保护
}

⌨️ 快捷键说明

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