新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > #單片機#利用pcf8591讀取電位器電壓值

        #單片機#利用pcf8591讀取電位器電壓值

        作者: 時間:2016-11-27 來源:網絡 收藏
        #include
        sbit sda=P2^0;
        sbit scl=P2^1;
        #define uint unsigned int
        #define uchar unsigned char
        uchar code table[] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0x40};
        //0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的顯示碼
        //--定義PCF8591的讀寫地址--//
        #define WRITEADDR 0x90 //寫地址
        #define READADDR 0x91 //讀地址
        void delayms(uint z)
        {
        int x,y;
        for(x=z;x>0;x--)
        for(y=110;y>0;y--);
        }
        void delay()
        { ;; }
        void start()
        {
        sda=1;
        delay();
        scl=1;
        delay();
        sda=0;
        delay();
        }
        void stop()
        {
        sda=0;
        delay();
        scl=1;
        delay();
        sda=1;
        delay();
        }
        void respons() //應答
        {
        uchar i;
        scl=1;
        delay();
        while((sda==1)&&(i<250))i ;
        scl=0;
        delay();
        }
        void write_byte(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_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();
        }
        return k;
        }
        uchar ADC_PCF8591_rd_(uchar channal)
        {
        uchar date;
        start();
        write_byte(0x90);
        respons();
        write_byte(channal);
        respons();
        start();
        write_byte(0x91);
        respons();
        date=read_byte();
        stop();
        return date;
        }
        void ADC_PCF8591_wt_(uchar date)
        {
        start();
        write_byte(0x90);
        respons();
        write_byte(0x40);
        respons();
        write_byte(date);
        respons();
        stop();
        }
        //注:主函數中進行AD或者DA的選擇,進行處理
        void display(uchar i)
        {
        float a; int j;
        a=i;
        a=a*500/256;
        j=a;
        P2=0xfd;
        P0=0xff;
        P0=~table[j/100]&0x7f;
        delayms(5);
        P2=0xfb;
        P0=0xff;
        P0=~table[j0/10];
        delayms(5);
        P2=0xf7;
        P0=0xff;
        P0=~table[j];
        delayms(5);
        }
        void main()
        {
        uint temp;
        sda=1;
        delay();
        scl=1;
        delay();
        while(1)
        {
        temp=ADC_PCF8591_rd_(0x00);
        display(temp);
        }
        }


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 敖汉旗| 东丽区| 浑源县| 宝清县| 宝坻区| 泸州市| 三门峡市| 舒兰市| 谷城县| 双流县| 弥渡县| 绥江县| 涞水县| 科技| 普陀区| 巴林左旗| 蕲春县| 宁阳县| 龙江县| 珲春市| 化德县| 清河县| 新龙县| 漳平市| 正镶白旗| 华池县| 昌宁县| 江西省| 天水市| 周口市| 麻阳| 扶余县| 大埔县| 黑山县| 汉川市| 三亚市| 荥经县| 华蓥市| 镇安县| 奈曼旗| 廊坊市|