新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > AT24C02開機記憶

        AT24C02開機記憶

        作者: 時間:2012-08-18 來源:網絡 收藏
        //************************************
        /*
        程序功能:記憶開機的次數,并顯示在
        */
        //************************************

        #includereg52.h>
        #define uint unsigned int
        #define uchar unsigned char
        uchar code num[]={0x80,0xed,0x42,0x48,0x2c,0x18,0x10,0xcc,0x00,0x08};
        //****管腳定義****
        sbit scl=P0^3;//艾方西的數據線
        sbit sda=P0^4;//艾方西的時鐘線

        sbit rck=P2^0;
        sbit sck=P2^1;
        sbit si=P2^2; //的串行數據輸入端

        sbit key1=P1^0;
        //====函數的聲明=====
        void delayus();//微秒級延時函數
        void delayms();//毫秒級延時函數
        void start();//起始函數
        void stop();//終止函數
        void ack();//應答函數
        void noack();//非應答函數
        void write_byte(uchar date);//寫字節函數
        uchar read_byte();//讀字節函數
        void xie(uchar add,uchar date);//寫操作函數
        uchar du(uchar add);//讀操作函數
        void write_595(uchar date);//
        void smg_595(uint j,uint i);
        //************************************
        void delayus()
        {
        ; ; ;
        }
        /*void delayms(uint time)
        {
        uint i,j;
        for(i=time;i>0;i--)
        for(j=110;j>0;j--);
        } */
        void start()
        {
        sda=1;
        delayus();
        scl=1;//時鐘線在高電平期間,數據線由高到底的跳變表示起始
        delayus();
        sda=0;
        delayus();
        }
        void stop()
        {
        sda=0;
        delayus();
        scl=1; //時鐘線在高電平期間,數據線由底到高的跳變表示終止
        delayus();
        sda=1;
        delayus();
        }
        void ack()
        {
        uint i=0;
        scl=1;
        if((sda==1)(i250))i++;
        scl=0;
        delayus();
        }
        void noack()
        {
        sda=1;
        delayus();
        scl=0;
        delayus();
        scl=1;
        delayus();
        scl=0;
        }
        void write_byte(uchar date)
        {
        uint i;
        scl=0;
        for(i=0;i8;i++)
        {
        if(date0x80)
        {
        sda=1;
        }
        else
        {
        sda=0;
        }
        scl=1;
        date=date1;
        delayus();
        scl=0;
        sda=1;
        delayus();
        }
        sda=1;
        delayus();
        }
        uchar read_byte()
        {
        uint i;
        uchar date=0x00;
        sda=1;
        delayus();
        scl=0;
        delayus();
        for(i=0;i8;i++)
        {
        scl=1;
        delayus();
        date=date1;
        if(sda)
        {
        date++;
        }

        scl=0;
        delayus();
        }

        return date;
        }
        void xie(uchar add,uchar date)
        {
        start();
        write_byte(0xa0);
        ack();
        write_byte(add);
        ack();
        write_byte(date);
        ack();
        stop();
        }
        uchar du(uchar add)
        {
        uchar k;
        start();
        write_byte(0xa0);
        ack();
        write_byte(add);
        ack();

        start();
        write_byte(0xa1);
        ack();
        k=read_byte();
        noack();
        stop();
        return k;
        }
        void chushihua()
        {
        sda=1;
        scl=1;
        }
        void main()
        {
        uchar k=0;
        k=du(7);
        k=k%10;
        smg_595(k,k);
        k++;
        xie(7,k);
        while(1);
        }
        void smg_595(uint j,uint i)
        {
        write_595(num[i]);
        write_595(num[j]);
        rck=0;
        rck=1;
        }
        void write_595(uchar date)
        {
        uint i;
        for(i=0;i8;i++)
        {
        date>>=1;
        sck=0;
        si=CY;
        sck=1;
        }
        }


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 金堂县| 马边| 睢宁县| 河池市| 德阳市| 绥化市| 永顺县| 娄烦县| 丽水市| 平昌县| 金塔县| 隆德县| 维西| 吉木乃县| 通化市| 奈曼旗| 西乌珠穆沁旗| 平原县| 新邵县| 舟山市| 舒兰市| 股票| 乌什县| 宜宾县| 遂昌县| 鄯善县| 雷山县| 营口市| 富源县| 景德镇市| 成武县| 邢台市| 凤山县| 收藏| 无棣县| 仪陇县| 延寿县| 惠州市| 施秉县| 富蕴县| 绥棱县|