新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機—ADC0808—05—①

        51單片機—ADC0808—05—①

        作者: 時間:2016-11-26 來源:網絡 收藏
        早晚也是閑著沒事情做~~干脆就發點簡單的東西,畢竟所謂的復雜就是一堆簡單的堆出來的~~~究其根本,沒有什么復雜的~

        畢竟ADC這個東西用的比較多,也很成熟,做出來的東西也是挺多的,所以這個東東就用兩三個實驗來敘述吧~

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

        先說一下ADC0808 這款A/D轉換器的介紹:

        1、ADC0808的簡介

        A/D轉換器是一種能把輸入模擬電壓或者電流信息變成與其成正比的數字量信息的電路芯片。A/D轉換器用于實現模擬量到數字量的轉換。

        ADC0808是典型的8通道模擬輸入8位并行數字輸出的逐次逼近式A/D轉換器。該轉換器采用COMS工藝,可以實現8路模擬信號的分時采集。片內有8路模擬選通開關,以及相應的通道地址鎖存用譯碼電路。

        1)ADC0808芯片的介紹



        2)ADC0808的引腳





        3)ADC0808的工作流程



        4)與51單片機的借口


        基本上也就這么點東西~~~很簡單吧~~我感覺也是~~

        我艸,然我白白調了半天程序,就那么一點點的錯誤,浪費了好多的時間,真不爽啊~~~


        貼圖看看~~



        由于以后會用模塊化編程,便于自己以后直接調用~~~,這個主函數:


        //------------------------------------------------------------------------------
        //實現由ADC0808作為A/D轉換器對電阻進行電壓的測試
        //數碼管顯示的數據范圍為0~255
        #include"reg52.h"
        #include"macroandconst.h"
        #include"delay.h"
        #include"adc0808.h"
        //------------------------------------------------------------------------------
        uchar code seg_disp[4]={0x10,0x20,0x40,0x00};//LED顯示的控制代碼
        uchar count;//LED顯示位控制
        sbittem=P2^0;
        uchar temp_0=0;
        //------------------------------------------------------------------------------
        //定時器初始化函數
        void timer_init()
        {
        TMOD=0X12;//T0工作在模式2,T1工作在模式1
        TH0=(256-50)/256;
        TL0=TH0;
        TH1=(65536-4000)/256;
        TL1=(65536-4000)%6;

        ET0=1;
        ET1=1;
        TR0=1;
        TR1=1;
        //PT1=1;

        EA=1;
        }
        //------------------------------------------------------------------------------
        //main
        void main()
        {
        timer_init();
        while(1)
        {
        ADC0808_init();
        }
        }
        //------------------------------------------------------------------------------
        //timer0
        void timer0() interrupt 1
        {
        CLK=~CLK;
        if(temp_0==100)
        {
        temp_0=0;
        tem=~tem;
        }
        }
        //------------------------------------------------------------------------------
        //timer1
        void timer1() interrupt 3
        {
        TH1=(65536-4000)/256;
        TL1=(65536-4000)%6;
        for(count=0;count<4;count++)
        {
        P1=seg_disp[count]|display[count];
        delay(10);
        }
        }

        然后就是ADC0808的初始化函數了(一些輔助的函數我就不貼出來了,比如宏定義啊,軟件延時啊,引腳定義什么的~~):

        //------------------------------------------------------------------------------
        //adc0808的文件函數
        #include"reg52.h"
        #include"delay.h"
        #include"macroandconst.h"
        //------------------------------------------------------------------------------
        sbit START=P3^0; //轉換啟動信號
        sbit OE=P3^1;//輸出允許信號
        sbit EOC=P3^2;//轉換結束狀態信號
        sbit CLK=P3^7;//時鐘信號輸入端,ADC0808內部沒有時鐘電路,所需的時鐘信號由外部輸入,通常頻率為500KHz
        uchar get_data;//ADC0808轉換后的數值
        uchar temp;//用于存儲ADC0808轉換后處理過程中的臨時數值
        uchar display[3];//存儲十進制的數值
        //------------------------------------------------------------------------------
        //ADC0808的啟動和轉換的初始化函數
        void ADC0808_init()
        {
        START=0;//START信號上升沿,將所有內部寄存器清0
        START=1;
        START=0;//START信號下降沿,開始A/D轉換,在轉換過程中START保持為低電平

        while(EOC==0);//等待轉換結束

        OE=1;//允許器件輸出轉換的結果

        get_data=P0;//P0口接ADC0808,你懂得~~
        temp=get_data;//暫存轉換結果

        OE=0;

        display[0]=get_data/100;//將轉換的結果轉換為10進制數
        display[1]=get_data0/10;
        display[2]=get_data;
        }



        關鍵詞: 51單片機ADC080

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 上饶县| 靖远县| 育儿| 凭祥市| 饶阳县| 镇平县| 常德市| 刚察县| 正蓝旗| 改则县| 南召县| 蓝山县| 城口县| 乐至县| 平定县| 五常市| 榆树市| 库尔勒市| 板桥市| 高雄县| 澄迈县| 大埔县| 桦南县| 新闻| 都匀市| 远安县| 昔阳县| 资阳市| 海城市| 棋牌| 平度市| 康保县| 宣城市| 工布江达县| 舟曲县| 陇南市| 柯坪县| 格尔木市| 五原县| 临安市| 阜阳市|