新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機-AT24C

        51單片機-AT24C

        作者: 時間:2016-12-02 來源:網絡 收藏
        void write(uchar date)
        {
        uchar i,temp;
        temp=date;
        for(i=0;i<8;i++)
        {
        temp=temp<<1;
        SCL=0;
        delay();
        SDA=CY;
        delay();
        SCL=1;
        delay();
        }
        SCL=0;
        delay();
        SDA=1;
        delay();
        }
        uchar read()
        {
        uchar i,k;
        SCL=0;
        delay();
        SDA=1;
        delay();
        for(i=0;i<8;i++)
        {
        SCL=1;
        delay();
        k=(k<<1)|SDA; // 將SDA賦給K的每一位
        SCL=0;
        delay();
        }
        return k;
        }
        void response(){
        int i;
        SCL = 1; //在SCL為高電平期間,進行應答
        delay();
        while((SDA == 1) && (i < 170))i++; //SCL釋放總線,等待從設備應答,從設備會把SDA拉低
        SCL = 0;
        delay();
        }
        void At24c_Write(uchar address, uchar value){
        start();
        write(0xa0); //寫入設備地址
        response();
        write(address); //寫入首地址
        response();
        write(value); //寫入數據
        response();
        stop();
        }
        uchar At24c_Read(uchar address){
        uchar value;
        start();
        write(0xa0); //偽寫,先寫入設備地址
        response();
        write(address); //再寫入要讀取數據的首地址
        response();
        start(); //再次
        write(0xa1); //寫入要讀取數據的地址,方向為1
        response();
        value = read(); //讀取數據
        stop();
        return value;
        }
        void main(){
        uint i;
        flag = 1;
        P1 = 0x0; // 位選,使最地位數碼管被選中
        EA = 1;
        ET0 = 1;
        sum = 0;
        temp = 0;
        TMOD = 0x01;
        TH0 = (65536 - 50000) / 256;
        TL0 = (65536 - 50000) % 256;
        TR0 = 1;
        Init();
        P2 = At24c_Read(23);
        for(i = 0; i < 10; i++)
        if(duan[ i] == P2){
        sum = i;
        break;
        flag = 0;
        }
        while(1){
        if(temp == 20){
        temp = 0;
        if(sum == 10){
        sum = 0;
        }
        if(flag == 1){
        At24c_Write(23,duan[sum]);
        delay1(100);
        P2 = duan[sum];
        }
        sum++;
        }
        }
        }
        void time0() interrupt 1{
        TH0 = (65536 - 50000) / 256;
        TL0 = (65536 - 50000) % 256;
        temp++;
        }
        上一頁 1 2 3 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 南丰县| 潞城市| 屏山县| 太原市| 漾濞| 兴业县| 家居| 商丘市| 三穗县| 凉城县| 舞阳县| 合川市| 蓬溪县| 华蓥市| 固安县| 太原市| 抚松县| 柳林县| 湾仔区| 调兵山市| 淮北市| 宁德市| 抚远县| 尤溪县| 霍林郭勒市| 佛山市| 淮北市| 桐乡市| 宁陕县| 陆河县| 延寿县| 安多县| 海盐县| 吴堡县| 吴江市| 马山县| 扶风县| 承德县| 沁阳市| 广州市| 大姚县|