您当前的位置:五五电子网电子知识单片机-工控设备51单片机PCF8563时钟+AT24C02+LCD12864显示时钟程序 正文
PCF8563时钟+AT24C02+LCD12864显示时钟程序

PCF8563时钟+AT24C02+LCD12864显示时钟程序

点击数:7467 次   录入时间:03-04 11:59:53   整理:http://www.55dianzi.com   51单片机
    Writex(0xA0);
    AutoACK();
    Writex(Addresshigh);
    AutoACK();
    Writex(Addresslow);
    AutoACK();
    Writex(Write_date);
    AutoACK();
    I2CStop();
    Delay_1ms(10);
}

/*对某个地址读操作,函数值为读出的数据*/
Uchar X24_Read(Uchar Addresshigh,Uchar Addresslow)
{    
    Uchar i;
    I2CStart();
    Writex(0xA0);
    AutoACK();
    Writex(Addresshigh);
    AutoACK();
    Writex(Addresslow);
    AutoACK();
    I2CStart();
    Writex(0xA1);
    AutoACK();
    i =Readx();
    //ACK();    //注意:这里不能有ACK应答信号//
    I2CStop();
    Delay_1ms(0);
    return(i);
}

/*对内存中的数据块写入,入口为写EEPROM的地址,内存缓冲中的数据的起始地址(是IDATA的数据)*/    
void X24_WritePage(Uchar Addresshigh,Uchar Addresslow,Uchar idata *Writeip)
{
    Uchar i;
    I2CStart();
    Writex(0xA0);
    AutoACK();
    Writex(Addresshigh);
    AutoACK();
    Writex(Addresslow);
    AutoACK();
    for(i=0;i<64;i++)
    {
        Writex(*Writeip++);
        AutoACK();
    }
    I2CStop();
}
/*把EEPROM中的数据读出来存放在内存缓冲中,起始地址为(是IDATA的数据)*/
void X24_ReadPage(Uchar Addresshigh,Uchar Addresslow,Uchar idata *Readip)
{
    Uchar i;
    I2CStart();
    Writex(0xA0);
    AutoACK();
    Writex(Addresshigh);
    AutoACK();
    Writex(Addresslow);
    AutoACK();
    I2CStart();
    Writex(0xA1);
    AutoACK();
    for(i=0;i<63;i++)        //PAGE读的时候最后一个BYTE不要ACK信号//
    {
        *Readip = Readx();
         Readip = Readip++;
         ACK();
        }
    *Readip = Readx();
    NACK();
    I2CStop();
    Delay_1ms(0);
}


//*******************以下为对PCF8383/PCF8563的读写子程序********************//    
//**********时钟片device address的写地址为0A2H,读地址为0A3H******************//
/*对PCF8563的时钟读到内存中,以IDATA指针开始的连续7个BYTE*/
//****读出的内容依次为“秒,分钟,小时,日,星期,月/世纪,年********************//
//PCF8585依次为“秒,分钟,小时,日,星期月
void GetPCF8563(Uchar idata *Getip)
{
    Uchar i;
    I2CStart();
    Writex(0xA2);
    AutoACK();
    Writex(0x02);    //从秒地址开始读//
    AutoACK();
    I2CStart();
    Writex(0xA3);
    AutoACK();
    for(i=0;i<6;i++)
    {
        *Getip = Readx();
        Getip = Getip++;
        ACK();
    }
    *Getip = Readx();
    NACK();
    I2CStop();
    Delay_1ms(0);
}
/*设定8563/8583的时间内容依次为“秒,分钟,小时,日,星期,月/世纪,年*/
//PCF8585依次为“秒,分钟,小时,日,星期月
void SetPCF8563(Uchar idata *Setip)
{
    Uchar i;
    I2CStart();
    Writex(0xA2);
    AutoACK();
    Writex(0x02);
    AutoACK();
    for(i=0;i<7;i++)
    {
        Writex(*Setip++);
        AutoACK();
    }
    I2CStop();
}

Uchar ReadPCF8563(Uchar AddrePCF)
{
    Uchar i;
    I2CStart();
    Writex(0xA2);
    AutoACK();
    Writex(AddrePCF);
    AutoACK();
    I2CStart();
    Writex(0xA3);
    AutoACK();
    i =Readx();
    //ACK();    //注意:这里不能有ACK应答信号//
    I2CStop();
    Delay_1ms(0);
    return(i);
}
void WritePCF8563(Uchar AddrePCF,Uchar PCFdata)
{
    I2CStart();
    Writex(0xA2);
    AutoACK();
    Writex(AddrePCF);
    AutoACK();
    Writex(PCFdata);
    AutoACK();
    I2CStop();
    Delay_1ms(10);
}
     
    

void SetWaring (Uchar Wyear,Uchar Wmonth,Uchar Wday)
{
    X24_Write(0x07,0xf0,Wyear);
    X24_Write(0x07,0xf1,Wmonth);
    X24_Write(0x07,0xf2,Wday);
}

    
/*返回值为1和0,1为已溢出,0为没有溢出*/    
bit CheckTime(void)
{
    Uchar j,k;
    j = X24_Read(0x07,0xcb);
    k = ReadPCF8563(0x08 );        /*读年的时间*/
    if(k<j)
    {
        return(0);
    }
    else 
    {    
        if(k>j)
        {
            return(1);

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12]  下一页


本文关键字:程序  51单片机单片机-工控设备 - 51单片机