新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機IO口模擬驅動AT24c02

        51單片機IO口模擬驅動AT24c02

        作者: 時間:2016-11-23 來源:網絡 收藏
        #include

        #include

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

        void somenop()
        {
        uchar i=5;
        while(i--)
        {
        _nop_();
        }
        }

        //8位掃描顯示,共陽數碼管
        uchar shum[]={
        0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
        void delaym()
        {
        uchar i;
        for(i=0;i<0xff;i++);

        }

        void init();
        void star();
        void stop();
        void ack();
        void write_byte(uchar date);
        uchar read_byte();
        sbit scl=P1^2;
        sbit sda=P1^3;
        uchar sec,min=30,tt;

        void init()
        {
        sda=1;
        somenop();
        scl=1;
        somenop();

        }

        void star()
        {
        sda=1;
        somenop();
        scl=1;
        somenop();
        sda=0;
        somenop();
        }
        void stop()
        {
        sda=0;
        somenop();
        scl=1;
        somenop();
        sda=1;
        somenop();
        }
        void ack()
        {
        scl=1;
        somenop();

        scl=0;
        somenop();
        }
        void write_byte(uchar date)
        {
        uchar i,temp;
        temp=date;
        for(i=0;i<8;i++)
        {
        scl=0;
        somenop();

        if((temp&0x80)==0x80)
        {sda=1;}
        else
        { sda=0;}
        temp=temp<<1;
        somenop();
        scl=1;
        somenop();
        scl=0;
        somenop();
        }
        scl=0;
        somenop();
        sda=1;
        somenop();
        }
        uchar read_byte()
        {
        uchar i,temp1,j;
        scl=0;
        somenop();
        sda=1;
        somenop();
        for(i=0;i<8;i++)
        {
        scl=1;
        somenop();
        j=sda;
        temp1=(temp1<<1)|j;
        scl=0;
        somenop();
        }
        return temp1;
        }


        void write_address(uchar address,uchar date)
        {
        star();
        write_byte(0xa0);
        ack();
        write_byte(address);
        ack();
        write_byte(date);
        ack();
        stop();
        }
        uchar read_address(uchar address)
        {
        uchar redata;
        star();
        write_byte(0xa0);
        ack();
        write_byte(address);
        ack();
        star();
        write_byte(0xa1);
        ack();
        redata=read_byte();
        stop();
        return redata;
        }


        void timer0() interrupt 1
        {
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        tt++;
        if(tt==20)
        {
        tt=0;
        sec++;
        if(sec==60)
        {sec=0;min++;

        if(min==60)
        { min=0;}
        write_address(100,min); delaym();
        }
        write_address(10,sec); delaym(); //把秒寫入AT24C02的10地址
        //單片機寫數據會占用一些時間,所以延時一會兒較好

        }
        }

        void int0(void) interrupt 0
        {
        EA=0;
        min++;
        if(min==60)
        {
        min=0;
        }
        write_address(100,min); //把分寫入AT24C02的100地址
        delaym();
        EA=1;
        }


        void disp()
        {
        P0=shum[sec%10];//sec 個位
        P2=0x08;
        delaym();

        P0=shum[sec/10];//sec 十位
        P2=0x04;
        delaym();

        P0=shum[min%10]&0x7f;//加小數點
        P2=0x02;
        delaym();

        P0=shum[min/10];
        P2=0x01;
        delaym();
        }

        void main()
        {
        TMOD=0x01;
        ET0=1;
        EX0=1;
        IT0=1;
        EA=1;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        TR0=1;
        init();
        sec=read_address(10);//從AT24C02的10地址讀出秒數據
        min=read_address(100);   //從AT24C02的100地址讀出分數據

        while(1)
        {
        disp();
        }
        }




        評論


        技術專區

        關閉
        主站蜘蛛池模板: 乐陵市| 襄垣县| 太白县| 呈贡县| 阳谷县| 平安县| 娄底市| 隆德县| 梁平县| 武邑县| 梁山县| 兴海县| 伊金霍洛旗| 垫江县| 天全县| 呈贡县| 巫山县| 泾阳县| 重庆市| 平武县| 红原县| 龙州县| 庐江县| 温州市| 都昌县| 大连市| 太白县| 长兴县| 工布江达县| 城步| 云梦县| 台湾省| 耒阳市| 左权县| 枝江市| 修文县| 门源| 徐州市| 亳州市| 红安县| 名山县|