新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 24c16的使用方法

        24c16的使用方法

        作者: 時間:2016-11-21 來源:網絡 收藏
        自己把24c16的使用結合代碼整理了一遍
        之前看pcf時發現其實有很多芯片和24c系列的芯片很像,所以就不得不整理一下了,發辮以后回顧
        r如果整理的不夠好,請不要噴我,我是弱菜

        #include
        #include //要用到_nop_()精準延時
        #define uchar unsigned char
        #define uint unsigned int
        sbit scl=P2^1;//24c16時鐘線,數據線定義
        sbit sda=P2^0;
        uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//數碼管顯示
        uchar num,sec; //用來計時
        void usdelay()
        {
        _nop_();_nop_();
        _nop_();_nop_();
        _nop_();_nop_();
        }
        void delayms(uint z)
        {
        uint x,y;
        for(x=z;x>0;x--)
        for(y=110;y>0;y--);
        }
        void start() //起始信號 當時鐘線為1,數據線有個下降沿
        {
        sda=1;
        usdelay();
        scl=1;
        usdelay();
        sda=0;
        usdelay();
        }

        void stop()//終止信號 當時鐘線為1,數據線有個上升沿
        {
        sda=0;
        usdelay();
        scl=1;
        usdelay();
        sda=1;
        usdelay();
        }

        void ack() //應答信號由從機發出信號為sda由1變為0
        {
        uchar i;
        scl=1;
        usdelay();
        while((sda==1)&&i<200)i++;
        scl=0;
        usdelay();
        }
        void init24c16()//24c16初始化
        {
        sda=1;
        usdelay();
        scl=1;
        usdelay();
        }
        void write_byte(uchar dat) //字節寫(寫數據或地址)數據線sda不變,scl有個上升沿,寫入數據
        {
        uchar i;
        for(i=0;i<8;i++)
        {
        scl=0;
        usdelay();
        sda=(bit)(dat&0x80);
        usdelay();
        scl=1;
        usdelay();
        dat<<=1;
        }
        scl=0;
        usdelay();
        }


        uchar read_byte() //字節讀 scl有下降沿讀出
        {
        uchar i,k;
        for(i=0;i<8;i++)
        {
        scl=1;
        usdelay();
        k=(k<<1)|sda;
        scl=0;
        usdelay();
        }
        return k;
        }
        void write_add(uchar add,uchar dat)
        {
        start();
        write_byte(0xa0);
        ack();
        write_byte(add);
        ack();
        write_byte(dat);
        ack();
        stop();
        }


        uchar read_add(uchar add)
        {
        uchar dat;
        start();
        write_byte(0xa0);
        ack();
        write_byte(add);
        ack();
        start();
        write_byte(0xa1);
        ack();
        dat=read_byte();
        usdelay();
        stop();
        return dat;
        }

        void main()
        {
        init24c16();
        sec=read_add(2);
        if(sec>9) sec=0;
        TMOD=0x01;//定時器選擇軟件啟動,工作方式為1
        ET0=1;//開定時器0允許
        EA=1;//開總中斷允許
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%6;//給定時器賦初值,定時50ms
        TR0=1;//啟動定時器0
        while(1)
        {
        if(num==20)
        {
        num=0;
        sec++;
        if(sec>9)
        sec=0;
        }
        P3=table[sec];
        write_add(2,sec);
        }
        }
        void t0() interrupt 1
        {
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%6;
        num++;
        }



        關鍵詞: 24c16使用方

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 陆良县| 唐山市| 鄂州市| 云阳县| 景德镇市| 阿坝县| 邢台市| 南京市| 如皋市| 甘南县| 卓资县| 安化县| 广昌县| 新营市| 秦安县| 富源县| 奉化市| 阿克| 武穴市| 介休市| 绵竹市| 屯留县| 云龙县| 盐山县| 龙山县| 手游| 永丰县| 五峰| 徐汇区| 滁州市| 平江县| 嘉鱼县| 眉山市| 太康县| 资中县| 台州市| 五大连池市| 息烽县| 德州市| 桦南县| 天祝|