新聞中心

        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;
        }
        }


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 泾阳县| 永川市| 仪征市| 密山市| 崇礼县| 卓尼县| 民权县| 彰化县| 竹溪县| 吴忠市| 宁德市| 宁陕县| 贡嘎县| 疏附县| 靖州| 乐清市| 兰西县| 静安区| 迁西县| 景泰县| 射洪县| 禹州市| 汝阳县| 图们市| 浪卡子县| 林西县| 盐边县| 根河市| 泸西县| 敦化市| 韶关市| 金寨县| 赤水市| 土默特右旗| 修文县| 长阳| 通辽市| 鄂伦春自治旗| 宣恩县| 定西市| 比如县|