新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機24c02的使用

        51單片機24c02的使用

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

        #include

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

        #define AddWr 0xae //Write Address
        #define AddRd 0xaf //Read Address

        //全局變量
        sbit Sda=P1^2; //定義總線連接端口
        sbit Scl=P1^1;
        sbit WP=P1^0;//No connect here

        void mDelay(unsigned char j)//A normal delay
        {
        unsigned int i;
        for(;j>0;j--)
        {
        for(i=0;i<125;i++)
        {;}
        }
        }

        //啟動 IIC總線
        void Start(void)
        {
        Sda=1;
        _nop_();_nop_();
        Scl=1;
        _nop_();_nop_();_nop_();_nop_();_nop_();
        Sda=0;
        _nop_();_nop_();_nop_();_nop_();_nop_();
        Scl=0;
        }

        //停止 IIC總線
        void Stop(void)
        {
        Sda=0;
        _nop_();
        Scl=1;
        _nop_();_nop_();_nop_();_nop_();_nop_();
        Sda=1;
        _nop_();_nop_();_nop_();_nop_();_nop_();
        Scl=0;
        }

        //應答 IIC總線
        void Ack(void)
        {
        Sda=0;
        _nop_();_nop_();_nop_();
        Scl=1;
        _nop_();_nop_();_nop_();_nop_();_nop_();
        Scl=0;
        _nop_();_nop_();
        }

        //非應答 IIC總線
        void NoAck(void)
        {
        Sda=1;
        _nop_();_nop_();_nop_();
        Scl=1;
        _nop_();_nop_();_nop_();_nop_();_nop_();
        Scl=0;
        _nop_();_nop_();
        }

        //發送一個字節
        void Send(unsigned char Data)
        {
        unsigned char BitCounter=8;
        unsigned char temp;

        do
        {
        temp=Data;
        Scl=0;
        _nop_();_nop_();_nop_();_nop_();_nop_();
        if((temp&0x80)==0x80)
        Sda=1;
        else
        Sda=0;


        Scl=1;
        temp=Data<<1;
        Data=temp;
        BitCounter--;
        }
        while(BitCounter);
        Scl=0;
        }

        //讀一個字節并返回變量
        unsigned char Read(void)
        {
        unsigned char temp=0;
        unsigned char temp1=0;
        unsigned char BitCounter=8;

        Sda=1;
        do
        {
        Scl=0;
        _nop_();_nop_();_nop_();_nop_();_nop_();
        Scl=1;
        _nop_();_nop_();_nop_();_nop_();_nop_();
        if(Sda)
        temp=temp|0x01;
        else
        temp=temp&0xfe;

        if(BitCounter-1)
        {
        temp1=temp<<1;
        temp=temp1;
        }
        BitCounter--;
        }
        while(BitCounter);
        return(temp);
        }
        //write to ROM
        void WrToROM(unsigned char Data[],unsigned char Address,unsigned char Num)
        {
        unsigned char i;
        unsigned char *PData;
        PData=Data;
        for(i=0;i {
        Start();
        Send(AddWr);//Write Address
        Ack();
        Send(Address+i);//Write sub Address
        Ack();
        Send(*(PData+i));//Write Data
        Ack();
        Stop();
        mDelay(20);
        }
        }
        //read from ROM
        void RdFromROM(unsigned char Data[],unsigned char Address,unsigned char Num)
        {
        unsigned char i;
        unsigned char *PData;
        PData=Data;
        for(i=0;i {
        Start();
        Send(AddWr);//Write Address
        Ack();
        Send(Address+i);//Write sub Address
        Ack();
        Start();
        Send(AddRd);//Read Address
        Ack();
        *(PData+i)=Read();//Read Data
        Scl=0;
        NoAck();
        Stop();
        }
        }

        void main()
        {
        unsigned char Number[4]={0x06,0x5b,0x4f,0x66};// 顯示碼值 1234
        unsigned char i;
        WP=0;//寫保護關掉
        P2=0x00;

        WrToROM(Number,4,4);//寫入24c02
        mDelay(200);
        Number[0]=0;//清除當前數據
        Number[1]=0;
        Number[2]=0;
        Number[3]=0;
        RdFromROM(Number,4,4);//調用存儲數據

        while(1)
        {

        P0=Number[i];//顯示存儲數據
        mDelay(200);
        mDelay(200);
        i++;
        if(i==4)
        i=0;
        }
        }



        關鍵詞: 51單片機24c0

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 岑溪市| 义马市| 兴仁县| 张家口市| 成都市| 多伦县| 囊谦县| 昆山市| 汕头市| 汉中市| 高雄县| 虹口区| 武川县| 来安县| 建宁县| 鹤岗市| 元氏县| 若羌县| 绿春县| 太康县| 慈溪市| 霍林郭勒市| 平江县| 沈阳市| 延庆县| 灵山县| 卓资县| 蒙自县| 磐石市| 察雅县| 永济市| 平昌县| 容城县| 井冈山市| 深水埗区| 启东市| 当阳市| 威信县| 玉田县| 肇源县| 吉林省|