新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 使用PCF8591進行ADDA轉換

        使用PCF8591進行ADDA轉換

        作者: 時間:2016-11-27 來源:網絡 收藏
        1.電路圖


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

        2.AD轉換

        //AD轉換,P0口連接J12(數碼管)
        //功能:通過轉動滑動變阻器改變模擬輸入
        //通過AD轉換,把數值用數碼管顯示
        #include 
        #define uchar unsigned char
        #define uint unsigned int
        #define PCF8591 0x90 //PCF8591 地址
        bit write=0;  //寫24c02的標志
        sbit SCL=P2^1;        //串行時鐘輸入端
        sbit SDA=P2^0;  //串行數據輸入端
        sbit LS138A=P2^2;//138譯碼器的3位 控制數碼管的 
        sbit LS138B=P2^3;
        sbit LS138C=P2^4;
        uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};      //數顯管字模
        void delay()   //延時4-5個微秒
        {;;}
        void delay_1ms(uint z)
        {
        uint x,y;
        for(x=z;x>0;x--)
        for(y=110;y>0;y--)
        ;
        }
        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 init()      //初始化
        {
        SDA=1;
        delay();
        SCL=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;
        }
        void write_byte(uchar date)       //寫一字節數據
        {
        uchar i,temp;
        temp=date;
        for(i=0;i<8;i++)
        {
        temp=temp<<1; //左移一位 移出的一位在CY中
        SCL=0;                      //只有在scl=0時sda能變化值
        delay();
        SDA=CY;
        delay();
        SCL=1;
        delay();            
        }   
        SCL=0;
        delay();
        SDA=1;
        delay();
        }
        void write_add(uchar control,uchar date)
        {
        start();
        write_byte(PCF8591);        //10010000 前四位固定 接下來三位全部被接地了 所以都是0 最后一位是寫 所以為低電平
        respons();
        write_byte(control);
        respons();
        write_byte(date);
        respons();
        stop();
        }
        uchar read_add(uchar control)
        {
        uchar date;
        start();
        write_byte(PCF8591);
        respons();
        write_byte(control);
        respons();
        start();
        write_byte(PCF8591+1);      //把最后一位變成1,讀
        respons();
        date=read_byte();
        stop();
        return date;
        }				   
        				
                    
                        
        			
        							
        上一頁 1 2 下一頁

        關鍵詞: PCF8591ADDA轉

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 米易县| 湟中县| 资兴市| 合江县| 香河县| 社旗县| 安宁市| 西城区| 襄汾县| 滁州市| 商河县| 阳谷县| 巴青县| 饶阳县| 吐鲁番市| 遵化市| 房山区| 瓦房店市| 巴楚县| 鹤庆县| 上思县| 新蔡县| 辉南县| 金昌市| 汝阳县| 佛学| 莱西市| 彰化市| 肥城市| 游戏| 如皋市| 平果县| 滦平县| 明光市| 绥江县| 刚察县| 科技| 桃园市| 大化| 额敏县| 会宁县|