日韩床上生活一级视频|能看毛片的操逼网站|色悠悠网站在线观看视频|国产免费观看A淫色免费|国产av久久久久久久|免费A级视频美女网站黄|国产毛片av日韩小黄片|热久久免费国产视频|中文字幕无码色色|成人在线视频99久久久

機電之家資源網(wǎng)
單片機首頁|單片機基礎|單片機應用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓信息
贊助商
經(jīng)典的pcf8563驅(qū)動C51源程序
經(jīng)典的pcf8563驅(qū)動C51源程序
 更新時間:2009-7-9 16:55:37  點擊數(shù):0
【字體: 字體顏色

#i nclude <reg52.h>
#i nclude <intrins.h>
#define uchar unsigned char
sbit SDA=P3^4;
sbit SCL=P3^5;
sbit P10=P1^0;

uchar g8563_Store[4]; /*時間交換區(qū),全局變量聲明*/
uchar code c8563_Store[4]={0x00,0x59,0x07,0x01}; /*寫入時間初值:星期一 07:59:00*/

/********************************************
內(nèi)部函數(shù),延時1
********************************************/
void Delay()
{
   // {P10=1;_nop_();P10=0;}
    _nop_();
   _nop_(); /*根據(jù)晶振頻率制定延時時間*/
}
/********************************************
內(nèi)部函數(shù),I2C開始
********************************************/
void Start()
{  EA=0;
   SDA=1;
   SCL=1;
   Delay();
   SDA=0;
   Delay();
   SCL=0;
}
/********************************************
內(nèi)部函數(shù),I2C結(jié)束
********************************************/
void Stop()
{
   SDA=0;
   SCL=0;
   Delay();
   SCL=1;
   Delay();
   SDA=1;
   Delay();
   EA=1;
}
/********************************************
內(nèi)部函數(shù),輸出ACK ,每個字節(jié)傳輸完成,輸出ack=0,結(jié)束讀書據(jù),ack=1;
********************************************/
void WriteACK(uchar ack)
{
   SDA=ack;
   Delay();
   SCL=1;
   Delay();
   SCL=0;
}
/********************************************
內(nèi)部函數(shù),等待ACK
********************************************/
void WaitACK()
{  uchar errtime=20;
   SDA=1;
   Delay(); /*讀ACK*/
   SCL=1;
   Delay();
   while(SDA)
   {  errtime--;
      if(!errtime) Stop();
   }
   SCL=0;
   Delay();
}
/********************************************
內(nèi)部函數(shù).輸出數(shù)據(jù)字節(jié)
入口:B=數(shù)據(jù)
********************************************/
void writebyte(uchar wdata)
{
   uchar i;
   for(i=0;i<8;i++)
   {
       if(wdata&0x80) SDA=1;
       else SDA=0;
       wdata<<=1;
       SCL=1;
       Delay();
       SCL=0;
   }
   WaitACK();     //I2C器件或通訊出錯,將會退出I2C通訊
}
/********************************************
內(nèi)部函數(shù).輸入數(shù)據(jù)
出口:B
********************************************/
uchar Readbyte()
{
   uchar i,bytedata;
   SDA=1;
   for(i=0;i<8;i++)
   {
      SCL=1;
      bytedata<<=1;
      bytedata|=SDA;
      SCL=0;
      Delay();
   }
   return(bytedata);
}
/********************************************
輸出數(shù)據(jù)->pcf8563
********************************************/
void writeData(uchar address,uchar mdata)
{
   Start();
   writebyte(0xa2); /*寫命令*/
   writebyte(address); /*寫地址*/
   writebyte(mdata); /*寫數(shù)據(jù)*/
   Stop();
}
/********************************************
輸入數(shù)據(jù)<-pcf8563
********************************************/
uchar ReadData(uchar address) /*單字節(jié)*/
{  uchar rdata;
   Start();
   writebyte(0xa2); /*寫命令*/
   writebyte(address); /*寫地址*/
   Start();
   writebyte(0xa3); /*讀命令*/
   rdata=Readbyte();
   WriteACK(1);
   Stop();
   return(rdata);
}
void ReadData1(uchar address,uchar count,uchar * buff) /*多字節(jié)*/
{  uchar i;
   Start();
   writebyte(0xa2); /*寫命令*/
   writebyte(address); /*寫地址*/
   Start();
   writebyte(0xa3); /*讀命令*/
   for(i=0;i<count;i++)
   {
        buff[i]=Readbyte();
        if(i<count-1) WriteACK(0);
   }
  WriteACK(1);
   Stop();
}
/********************************************
內(nèi)部函數(shù),讀入時間到內(nèi)部緩沖區(qū)
********************************************/
void P8563_Read()
{   uchar time[7];
    ReadData1(0x02,0x07,time);
    g8563_Store[0]=time[0]&0x7f; /*秒*/
    g8563_Store[1]=time[1]&0x7f; /*分*/
    g8563_Store[2]=time[2]&0x3f; /*小時*/
    g8563_Store[3]=time[4]&0x07; /*星期*/
}
/********************************************
讀入時間到內(nèi)部緩沖區(qū)----外部調(diào)用
********************************************/
void P8563_gettime()
{
    P8563_Read();
    if(g8563_Store[0]==0)
      P8563_Read(); /*如果為秒=0,為防止時間變化,再讀一次*/
}
/********************************************
寫時間修改值
********************************************/
void P8563_settime()
{
     uchar i;
     for(i=2;i<=4;i++) { writeData(i,g8563_Store[i-2]); }
     writeData(6,g8563_Store[3]);
}
/********************************************
P8563的初始化-----外部調(diào)用
********************************************/
void P8563_init()
{
    uchar i;
    if((ReadData(0xa)&0x3f)!=0x8) /*檢查是否第一次啟動,是則初始化時間*/
    {
        for(i=0;i<=3;i++) g8563_Store[i]=c8563_Store[i]; /*初始化時間*/
        P8563_settime();
        writeData(0x0,0x00);
        writeData(0xa,0x8); /*8:00報警*/
        writeData(0x1,0x12); /*報警有效*/
        writeData(0xd,0xf0);
    }
}

  • 上一篇: C51的數(shù)據(jù)類型
  • 下一篇: 基于W77E58雙串口通信的監(jiān)控系統(tǒng)
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術(shù)支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機電設備,機電供求等信息由機電企業(yè)自行提供,該企業(yè)負責信息內(nèi)容的真實性、準確性和合法性。
    機電之家對此不承擔任何保證責任,有侵犯您利益的地方請聯(lián)系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機電一體化學會
    中國行業(yè)電子商務100強網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1