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

📄 pcf8563.c

📁 字符型液晶显示程序字符型液晶显示程序 字符型液晶显示程序 字符型液晶显示程序
💻 C
字号:
//----------------------------------------------------------------------
void delay(void) //延时程序
{
    delay_us(3);
}
//----------------------------------------------------------------------
void I2CStart(void) //启动
{
    SDAOUT;
    SCL_0;
    delay();
    SDA_1;
    delay();
    SCL_1;
    delay();
    SDA_0;
    delay();
    SCL_0;
}
//----------------------------------------------------------------------
void I2CStop(void)//关闭
{
    SDAOUT;
    SCL_0;
    delay();
    SDA_0;
    delay();
    SCL_1;
    delay();
    SDA_1;
    delay();
    SCL_0;
}
//----------------------------------------------------------------------
unsigned char WaitAck(void)//接收应答
{
    unsigned char errtime=255;//因故障接收方无ACK,超时值为255。
    SDAOUT;
    delay();
    SDA_1;
    delay();
    SDAIN;
    SCL_1;
    delay();
    while(SDA_IN) {errtime--; if (!errtime) return 0;}
    SCL_0;
    return 1;
}
//----------------------------------------------------------------------
void SendAck(void)//发送应答
{
    SDAOUT;
    delay();
    SDA_0;
    delay();
    SCL_1;
    delay();
    delay();
    SCL_0;
}
//----------------------------------------------------------------------
void SendNotAck(void)//不发送应答
{
    SDAOUT;
    delay();
    SDA_1;
    delay();
    SCL_1;
    delay();
    delay();
    SCL_0;
}
//----------------------------------------------------------------------
void I2CSendByte(unsigned char ch)//发送一字节数据
{
    unsigned char i=8;
    SDAOUT;
    while (i--)
    {
        SCL_0;
        delay();
        if(ch&0x80) SDA_1;
        else SDA_0;
        ch<<=1;
        delay();
        SCL_1;
        delay();
        delay();
    }
    SCL_0;
}
//----------------------------------------------------------------------
unsigned char I2CReceiveByte(void)//接收一字节数据
{
    unsigned char i=8;
    unsigned char ddata=0;
    SDAOUT;
    SDA_1;
    SDAIN;
    while (i--)
    {
        ddata<<=1;
        SCL_0;
        delay();
        delay();
        SCL_1;
        delay();
        ddata|=SDA_IN;
        delay();
    }
    SCL_0;
    return ddata;
}
//----------------------------------------------------------------------
void GetPCF8563(void) //读取时间和日期数据
{
    I2CStart();
    I2CSendByte(0xa2);
    WaitAck();
    I2CSendByte(0x02);
    WaitAck();
    I2CStart();
    I2CSendByte(0xa3);
    WaitAck();
    rdata[6]=I2CReceiveByte();   //秒
    SendAck();
    rdata[5]=I2CReceiveByte();   //分
    SendAck();
    rdata[4]=I2CReceiveByte();   //时
    SendAck();
    rdata[3]=I2CReceiveByte();   //日
    SendAck();
    rdata[2]=I2CReceiveByte();   //星
    SendAck();
    rdata[1]=I2CReceiveByte();   //月
    SendAck();
    rdata[0]=I2CReceiveByte();   //年
    SendNotAck();
    I2CStop();
    rdata[6]&=0x7f; //把一些没用的位屏蔽掉
    rdata[5]&=0x7f;
    rdata[4]&=0x3f;
    rdata[3]&=0x3f;
    rdata[2]&=0x07;
    rdata[1]&=0x1f;
}
//----------------------------------------------------------------------
void c8563t_init(void) //时钟芯片初始化
{
    I2CStart();    //打开总线,开始初始化
    I2CSendByte(0xa2);
    WaitAck();
    I2CSendByte(0x00);
    WaitAck();
    I2CSendByte(0x00);
    WaitAck();
    I2CSendByte(0x00);
    WaitAck();
    I2CSendByte(wdata[6]);   //秒
    WaitAck();
    I2CSendByte(wdata[5]);   //分
    WaitAck();
    I2CSendByte(wdata[4]);   //时
    WaitAck();
    I2CSendByte(wdata[3]);   //日
    WaitAck();
    I2CSendByte(wdata[2]);   //星
    WaitAck();
    I2CSendByte(wdata[1]);   //月
    WaitAck();
    I2CSendByte(wdata[0]);   //年
    WaitAck();
    I2CSendByte(0x80);
    WaitAck();
    I2CSendByte(0x80);
    WaitAck();
    I2CSendByte(0x80);
    WaitAck();
    I2CSendByte(0x80);
    WaitAck();
    I2CSendByte(0x80);
    WaitAck();
    I2CSendByte(0x00);
    WaitAck();
    I2CStop();   //关闭总线,初始化结束
}
//--------------------------------------------------------
unsigned char  BCD_TO_BIN(unsigned char i)//BCD 数转化为二进制数
{
    unsigned char j;
    j=i>>4;
    j&=0x0f;
    j*=10;
    j+=i&0x0f;
    return (j);
}
//--------------------------------------------------------
unsigned char BIN_TO_BCD(unsigned char i)//二进制数转化为BCD 数
{
    unsigned char j;
    j=i/10;
    j<<=4;
    j&=0xf0;
    j|=i%10;
    return (j);
}
//----------------------------------------------------------------------

⌨️ 快捷键说明

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