新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于PCF8591的I_2C總線A_D_D_A轉換的資料

        基于PCF8591的I_2C總線A_D_D_A轉換的資料

        作者: 時間:2016-12-01 來源:網絡 收藏
        void respons()
        /*
        應答信號,SCL在高電平期間,SDA被從設備拉為低電平表示應答。
        (sda==1)和i<255相與,表示若在一段時間內沒有從器件的應答則主器件
        默認從器件已經收到數據而不再等待應答信號
        */
        {
        uchar i;
        scl=1;
        delay();
        while((sda==1)&&(i<250))
        {
        i++;
        }
        scl=0;
        delay();
        }
        void stop()//SCL在高電平期間,SDA一個上升沿停止信號
        {
        sda=0;
        delay();
        scl=1;
        delay();
        sda=1;
        }
        void write_byte(uchar date)//寫一個字節
        {
        uchar i,temp;
        temp=date;
        for(i=0;i<8;i++)
        {
        temp=temp<<1;
        scl=0;//只有在SCL為0期間才允許SDA數據線上的狀態才允許變化
        delay();
        sda=CY;//PSW的寄存器的CY進位標志位
        delay();
        scl=1; //SCL時鐘信號為高電平期間數據線上的數據必須保持穩定 delay();
        delay();
        }
        scl=0;
        delay();
        sda=1;//釋放總線
        delay();
        }
        uchar read_byte()
        {
        uchar i,k;
        scl=0;
        delay();
        sda=1;//釋放總線
        delay();
        for(i=0;i<8;i++)
        {
        scl=1;
        delay();
        k=(k<<1)|sda;
        scl=0;
        delay();
        }
        //delay();here is a bug
        return k;
        }

        void write_address(uchar address,uchar date)
        {
        start();
        write_byte(0x90);
        respons();
        write_byte(address);
        respons();
        write_byte(date);
        respons();
        stop();
        }
        uchar read_address(uchar address)
        {
        uchar date;
        start();
        write_byte(0x90); //10010000 前四位固定 接下來三位全部被接地了 所以都是0 最后一位是寫 所以為低電平
        respons();
        write_byte(address);
        respons();
        start();
        write_byte(0x91);
        respons();
        date=read_byte();
        stop();
        return date;
        }
        void display(uchar ge,uchar shi,uchar bai)
        {
        P0=0xff;
        LS138A=1; //第一位
        LS138B=1;
        LS138C=1;
        P0=table[ge];
        delay1ms(1);
        P0=0xff;

        LS138A=0; //第二位
        LS138B=1;
        LS138C=1;
        P0=table[shi];
        delay1ms(1);
        P0=0xff;

        LS138A=1; //第三位
        LS138B=0;
        LS138C=1;
        P0=table[bai];
        delay1ms(1);
        }
        void main()
        {
        init();
        while(1)
        {
        num=read_address(0x40);
        bai=num/100;
        shi=num/10%10;
        ge=num%10;
        display(ge,shi,bai);
        }
        }
        上一頁 1 2 下一頁

        關鍵詞: PCF8591DA轉換總

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 化德县| 平武县| 平山县| 金湖县| 晋中市| 潼关县| 上杭县| 咸丰县| 达日县| 缙云县| 县级市| 成安县| 开鲁县| 吉林省| 五原县| 太仆寺旗| 甘洛县| 西充县| 重庆市| 化州市| 惠州市| 长乐市| 大埔县| 淮安市| 陇南市| 定日县| 盐亭县| 鹿泉市| 凯里市| 含山县| 平凉市| 建瓯市| 望谟县| 灵石县| 余干县| 安阳县| 湟中县| 杂多县| 宁蒗| 观塘区| 临西县|