新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于PCF8591的I_2C總線A_D_D_A轉(zhuǎn)換的資料

        基于PCF8591的I_2C總線A_D_D_A轉(zhuǎn)換的資料

        作者: 時間:2016-12-01 來源:網(wǎng)絡(luò) 收藏
        /*******************
        程序功能:
        通過DA轉(zhuǎn)換把輸出電壓逐漸增大,
        使加在上面的發(fā)光二級管慢慢變亮
        到最亮后再變暗,如此循環(huán)
        *******************/

        /*******************
        D/A轉(zhuǎn)換
        *******************/
        #include
        #define uint unsigned int
        #define uchar unsigned char
        #define PCF8591 0x90//PCF8591的地址
        sbit sda=P2^0;
        sbit scl=P2^1;
        void delay()//執(zhí)行空語句,微秒級延時函數(shù)
        {;;}
        void delay1ms(uint z)//延時1ms
        {
        uint x,y;
        for(x=z;x>0;x--)
        {
        for(y=0;y<=110;y++)
        {
        }
        }
        }
        void init()//初始化狀態(tài)下SCL和SDA都為高電平
        {
        scl=1;
        delay();
        sda=1;
        delay();
        }
        void start()//在SCL為高電平時SDA由高電平到低電平
        {
        sda=1;
        delay();
        scl=1;
        delay();
        sda=0;
        }
        void respons()
        /*
        應(yīng)答信號,SCL在高電平期間,SDA被從設(shè)備拉為低電平表示應(yīng)答。
        (sda==1)和i<255相與,表示若在一段時間內(nèi)沒有從器件的應(yīng)答則主器件
        默認從器件已經(jīng)收到數(shù)據(jù)而不再等待應(yīng)答信號
        */
        {
        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)//寫一個字節(jié)
        {
        uchar i,temp;
        temp=date;
        for(i=0;i<8;i++)
        {
        temp=temp<<1;
        scl=0;//只有在SCL為0期間才允許SDA數(shù)據(jù)線上的狀態(tài)才允許變化
        delay();
        sda=CY;//PSW的寄存器的CY進位標志位
        delay();
        scl=1; //SCL時鐘信號為高電平期間數(shù)據(jù)線上的數(shù)據(jù)必須保持穩(wěn)定 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 main()
        {
        uint count;
        init();
        while(1)
        {
        write_address(0x40,count);
        delay1ms(5);
        count++;
        if(count>250)
        {
        count=0;
        }
        }

        }


        /*******************
        程序功能:
        旋轉(zhuǎn)A/D電位器,將模擬量變成數(shù)字量,并用數(shù)碼管顯示其結(jié)果。
        *******************/

        /*******************
        A/D轉(zhuǎn)換
        *******************/
        #include
        #define uint unsigned int
        #define uchar unsigned char
        #define PCF8591 0x90//PCF8591的地址
        sbit sda=P2^0;
        sbit scl=P2^1;
        sbit LS138A=P2^2;//138譯碼器的3位 控制數(shù)碼管的
        sbit LS138B=P2^3;
        sbit LS138C=P2^4;
        uchar num,ge,shi,bai;
        uchar code table[]={
        0x3f,0x06,0x5b,0x4f,
        0x66,0x6d,0x7d,0x07,
        0x7f,0x6f};//段選
        void delay()//執(zhí)行空語句,微秒級延時函數(shù)
        {;;}
        void delay1ms(uint z)//延時1ms
        {
        uint x,y;
        for(x=z;x>0;x--)
        {
        for(y=0;y<=110;y++)
        {
        }
        }
        }
        void init()//初始化狀態(tài)下SCL和SDA都為高電平
        {
        scl=1;
        delay();
        sda=1;
        delay();
        }
        void start()//在SCL為高電平時SDA由高電平到低電平
        {
        sda=1;
        delay();
        scl=1;
        delay();
        sda=0;
        }
        上一頁 1 2 下一頁

        關(guān)鍵詞: PCF8591DA轉(zhuǎn)換總

        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 木兰县| 余庆县| 莱州市| 获嘉县| 楚雄市| 新乡市| 墨竹工卡县| 辽宁省| 张家界市| 磐安县| 虞城县| 萨迦县| 恭城| 洪泽县| 义马市| 桃源县| 淅川县| 宁波市| 抚宁县| 尚义县| 宕昌县| 株洲县| 平顺县| 贡山| 秭归县| 扶沟县| 绍兴县| 咸阳市| 开平市| 无锡市| 南丹县| 黄骅市| 凭祥市| 望都县| 获嘉县| 和政县| 哈密市| 桦甸市| 利川市| 蒲江县| 浪卡子县|