新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 從零開始學單片機(五)A/D轉化

        從零開始學單片機(五)A/D轉化

        作者: 時間:2016-11-22 來源:網絡 收藏
        所謂A/D轉換器就是模擬/數字轉換器(Analog to Digital Converter 簡稱ADC)是將輸入的模擬信號轉換成為數字信號。這里我們用ADC0804做這個試驗,下面的圖示它的引腳圖。

        /CS:芯片選擇信號。
        VREF:輔助參考電壓。
        /WR:用來啟動轉換的控制,當/WR自1變為0時,轉換器被清除;當/WR回到1時,轉換正式啟動。
        /RD:外部讀取轉換結果的控制腳輸出信號。
        /INTR:中斷請求信號輸出,低電平動。
        AGND,DGND:模擬信號以及數字信號接地。
        CLK IN,CLK R:時鐘輸入或接振蕩元件(R,C),頻率約限制在100KHz~1460KHz。
        VIN(+),VIN(-):差動模擬電壓輸入。輸入單端正電壓時,VIN(-)接地。
        DB0~DB7:8位數字輸出。
        ADC0804電壓輸入與數字輸出關系如表所示


        十六進制

        二進制碼
        與滿刻度的比率相對電應值VREF=2.560伏
        高四位字節低四位字節高四位字節電壓低四位字節電壓
        F111115/1615/2564.8000.300
        E111014/1614/2564.4800.280
        D110113/1613/2564.1600.260
        C110012/1612/2563.8400.240
        B101111/1611/2563.5200.220
        A101010/1610/2563.2000.200
        910019/169/2562.8800.180
        810008/168/2562.5600.160
        701117/167/2562.2400.140
        601106/166/2561.9200.120
        501015/165/2561.6000.100
        401004/164/2561.2800.080
        300113/163/2560.9600.060
        200102/162/2560.6400.040
        100011/161/2560.3200.020
        0000000

        接下來看看實驗電路的原理圖

        片選CS接P2.4,RD接P3.7,WR接P3.6,為了簡單起見INTR沒有使用它
        AD芯片的VIN(+)接一個可調電阻,改變阻值能夠帶來不同的電壓,以此作為輸入。
        寫程序前還得看看時序圖

        不同的電阻值顯示0-255不同大小的值,延時時間略長,有點閃爍
        #include
        #include
        sbit ADCS = P2^4; //ADC0804片選信號,低電平有效
        sbit ADWR = P3^6; //ADC0804寫信號,低電平有效
        sbit ADRD = P3^7; //ADC0804讀信號,低電平有效
        unsigned char code_table[]=
        {
        0x3f,0x06,0x5b,0x4f,
        0x66,0x6d,0x7d,0x07,
        0x7f,0x6f,0x77,0x7c,
        0x39,0x5e,0x79,0x71,0
        };
        sbit Led8En = P2^6; //數碼管,鎖存器使能信號,高電平有效 ,數碼管輸出P0
        sbit Led8CS = P2^7; //數碼管片選,鎖存器使能信號,電平有效,低電平選中
        void delay(unsigned int times);
        void dlight(unsigned char i, unsigned char number, unsigned int duration);
        void ADC0804();
        void main()
        {
        while(1)
        {
        ADC0804();
        delay(100);
        }
        }
        void delay(unsigned int times)
        {
        unsigned int i,j;
        for (i=0; i
        for (j=0; j<125; j++)
        _nop_();
        }
        void ADC0804()
        {
        unsigned char temp;
        ADCS = 0;
        ADWR = 0;
        delay(1);
        ADWR = 1;
        ADCS = 1;
        delay(10);
        ADCS = 0;
        ADRD = 0;
        _nop_();
        temp = P1;
        ADRD = 1;
        ADCS = 1;
        dlight(0xEE,code_table[temp % 10],1);
        dlight(0xDD,code_table[temp / 100],1);
        dlight(0xBB,code_table[(temp/10 )% 10],1);
        }
        void dlight(unsigned char cs, unsigned char display, unsigned int duration)
        {
        Led8CS = 1;
        P0=cs; //片選
        Led8CS = 0;
        Led??8En = 1;
        P0=display; //. a b c d e f g, 高電平亮
        Led8En = 0;
        delay(duration);
        }


        關鍵詞: 單片機AD轉

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 宝丰县| 丁青县| 罗甸县| 锦州市| 滁州市| 涞水县| 元江| 崇文区| 新和县| 咸丰县| 闵行区| 昭通市| 呼伦贝尔市| 且末县| 磐安县| 襄城县| 景洪市| 金湖县| 新野县| 新郑市| 上杭县| 修水县| 辉南县| 新营市| 岗巴县| 理塘县| 夏邑县| 镇赉县| 天等县| 固始县| 海晏县| 临沭县| 南涧| 商水县| 丹凤县| 巴彦县| 武冈市| 眉山市| 文山县| 新和县| SHOW|