新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > PCF8563驅(qū)動(dòng)(C語(yǔ)言版)

        PCF8563驅(qū)動(dòng)(C語(yǔ)言版)

        作者: 時(shí)間:2016-11-21 來(lái)源:網(wǎng)絡(luò) 收藏
        //CPU:STC89C52RC 晶震:11.0592M

        #include 〈reg52.h>

        本文引用地址:http://www.104case.com/article/201611/319370.htm

        #include

        #include

        #define uchar unsigned char

        #define uint unsigned int

        uchar TAB_T[]={ 0x31,0x06,0x10,//秒,分,時(shí)

        0x13,0x01,0x07,0x08};//日,星期,月,年.

        sbit SDA=P2^6; //數(shù)據(jù)

        sbit SCL=P2^7; //時(shí)鐘

        void Delay5us(void)

        {

        _nop_();

        _nop_();

        _nop_();

        _nop_();

        _nop_();

        }

        void Start(void)

        {

        SDA=1;

        SCL=1;

        Delay5us();

        SDA=0;

        Delay5us();

        }

        void Stop(void)

        {

        SDA=0;

        SCL=1;

        Delay5us();

        SDA=1;

        Delay5us();

        }

        void Reack(void)

        {

        uchar i=0;

        SCL=1; //準(zhǔn)備檢測(cè)SDA Delay5us();

        while((SDA==1)&&(i<100))i++;//SDA=0為應(yīng)該信號(hào),SDA=1為非應(yīng)答

        SCL=0; //準(zhǔn)備下一變化數(shù)據(jù)

        }

        void WriteByte(uchar ucByte)

        {

        uchar i;

        SCL=0;

        for(i=0;i<8;i++)

        {

        SDA=(bit)(ucByte&0x80);//先寫入高位

        SCL=1;

        Delay5us();

        SCL=0;

        ucByte<<=1;

        }

        SDA=1; //釋放數(shù)據(jù)線

        }

        uchar ReadByte(void)

        {

        uchar i,ucByte;

        SCL=0;

        for(i=0;i<8;i++)

        {

        ucByte<<=1;

        if(SDA)

        ucByte++;

        SCL=1;

        Delay5us();

        SCL=0;

        }

        return ucByte;

        }

        void Write8563(uchar ucAddr,uchar ucData)

        {

        Start();

        WriteByte(0xa2);

        Reack();

        WriteByte(ucAddr);

        Reack();

        WriteByte(ucData);

        Reack();

        Stop();

        }

        uchar Read8563(uchar ucAddr)

        {

        uchar ucData;

        Start();

        WriteByte(0xa2); //寫器件地址

        Reack();

        WriteByte(ucAddr); //寫字節(jié)地址

        Reack();

        Start();

        WriteByte(0xa3); //寫器件地址,最低為1表示讀

        Reack();

        ucData=ReadByte(); //寫字節(jié)地址

        Stop();

        return ucData; //讀數(shù)據(jù)

        }

        void Init8563(void)

        {

        uchar i,ucAddr=0x02;

        Write8563(0x00,0x00);

        Write8563(0x01,0x11);

        for(i=0;i<7;i++)

        {

        Write8563(ucAddr,TAB_T[i]);

        ucAddr++;

        }

        }

        void GetTime(void)

        {

        uchar i,ucData1,ucData2,ucAddr=0x02;

        uchar *pTime=TAB_T;

        for(i=0;i<7;i++)

        {

        pTime[i]=Read8563(ucAddr);

        ucAddr++;

        }

        pTime[0]&=0x7f; //屏蔽無(wú)效位

        pTime[1]&=0x7f;

        pTime[2]&=0x3f;

        pTime[3]&=0x3f;

        pTime[4]&=0x07;

        pTime[5]&=0x1f;

        for(i=0;i<7;i++)

        {

        ucData1=pTime[i]/16; //BCD碼轉(zhuǎn)十六進(jìn)制

        ucData2=pTime[i]%16;

        pTime[i]=ucData1*10+ucData2;

        }

        }



        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 花垣县| 蓬溪县| 杨浦区| 大方县| 保山市| 邵阳县| 泗洪县| 遵义市| 集安市| 高安市| 白玉县| 南皮县| 苏州市| 永兴县| 余庆县| 泸西县| 横山县| 滦南县| 霍林郭勒市| 刚察县| 宜川县| 甘洛县| 晴隆县| 平邑县| 连江县| 承德市| 印江| 佛坪县| 长丰县| 怀柔区| 格尔木市| 望城县| 元氏县| 平罗县| 九江市| 连州市| 蓬安县| 深水埗区| 蛟河市| 云安县| 大悟县|