新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機 ADC0804控制

        51單片機 ADC0804控制

        作者: 時間:2016-11-25 來源:網絡 收藏
        現在大多單片機都帶有ADC模塊,對于精度要求不是很高的場合,一般都能夠滿足的。這里例程重在理解控制過程。

        原理圖:

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


        代碼如下:

        //頭文件
        #include
        #include //_nop_延時一個機械周期函數所在頭文件
        //定義宏
        #define uint unsigned int
        #define uchar unsigned char
        //端口聲明
        sbit duanxuan=P2^6;
        sbit weixuan=P2^7;
        sbit ADC0804_WR=P3^6; //寫信號輸入,低電平有效
        sbit ADC0804_RD=P3^7; //讀信號輸入,低電平有效
        //變量定義
        uint number; //存放模數轉換后的數字量
        uint baiwei,shiwei,gewei; //存放模數轉換后的數字量的百位、十位、各位

        //編碼定義
        uchar code table[]={
        0x3f,0x06,0x5b,0x4f,
        0x66,0x6d,0x7d,0x07,
        0x7f,0x6f,0x77,0x7c,
        0x39,0x5e,0x79,0x71};
        //數組聲明,其內部元素代表的是位選端口選通信號數值,如0xfe代表選通第一個數碼管,包括選通ADC0804的CS端
        uint weixuan_shuzu[]={
        0x7e,0x7d,0x7b,
        0x77,0x6f,0x5f};
        //函數聲明
        void delay(uint); //延時函數聲明
        void quwei(uint); //整數取出每一位函數聲明
        void display(uint); //顯示函數申明
        void ADC0804_writting(); //ACD0804寫入操作函數聲明
        void ADC0804_reading(); //ACD0804讀取操作函數聲明
        //主函數
        void main()
        {
        uint aa; //用于模數轉換前得多次顯示,確保轉換完成
        weixuan=1;
        P0=0x7f; //首先選擇ADC0804的CS端口,選中ACD0804(如果沒有這里的,那么接下來的ADC0804寫操作函數不能進行)
        weixuan=0;
        while(1)
        {
        ADC0804_writting(); //啟動AD轉換
        for(aa=10;aa>0;aa--) //10次顯示轉換結果
        {
        display(number); //顯示轉換結果
        }
        ADC0804_reading(); //讀取AD轉換結果
        }
        }
        //延時函數主體
        void delay(uint xs)
        {
        uint i,j;
        for(i=xs;i>0;i--)
        {
        for(j=110;j>0;j--)
        {
        }
        }
        }
        //整數取出每一位函數主體
        void quwei(uint digital_data0)
        {
        baiwei=digital_data0/100; //取出百位
        shiwei=digital_data00/10;
        gewei=digital_data0;
        }
        //顯示函數主體
        void display(uint digital_data)
        {
        quwei(digital_data); //首先取出結果的每一位
        //顯示第一位
        duanxuan=1;
        P0=table[baiwei];
        duanxuan=0;
        P0=0xff;
        weixuan=1;
        P0=weixuan_shuzu[0];
        weixuan=0;
        delay(2);
        //顯示第二位
        duanxuan=1;
        P0=table[shiwei];
        duanxuan=0;
        P0=0xff;
        weixuan=1;
        P0=weixuan_shuzu[1];
        weixuan=0;
        delay(2);
        //顯示第三位
        duanxuan=1;
        P0=table[gewei];
        duanxuan=0;
        P0=0xff;
        weixuan=1;
        P0=weixuan_shuzu[2];
        weixuan=0;
        delay(2);
        }
        //ACD0804寫入操作函數主體
        void ADC0804_writting()
        {
        ADC0804_WR=1; //首先拉高寫使能端
        _nop_(); //延時一個機械周期
        ADC0804_WR=0; //寫使能端低電平有效,開始轉換
        _nop_();
        ADC0804_WR=1; //轉換結束
        }
        //ACD0804讀取操作函數主體
        void ADC0804_reading()
        {
        P1=0xff; //讀取結果之前,先拉高P1口一次
        ADC0804_RD=1; //讀取之前先拉高讀取使能端
        _nop_(); //延時一個機械周期
        ADC0804_RD=0; //讀取使能端低電平有效,開始讀取
        _nop_();
        number=P1; //讀取的結果存放到number中,注意:number不需要轉換為十進制,直接當成十進制用就OK
        ADC0804_RD=1; //讀取結束
        }

        以上,結束。



        關鍵詞: 51單片機ADC0804控

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 五家渠市| 卢龙县| 惠来县| 靖宇县| 松江区| 青田县| 吉木乃县| 崇礼县| 南江县| 合作市| 萝北县| 新安县| 洛宁县| 农安县| 商都县| 玉环县| 黄浦区| 邢台市| 循化| 正安县| 万州区| 德安县| 松江区| 赤峰市| 新竹市| 雷州市| 建阳市| 临潭县| 泗洪县| 久治县| 舟山市| 仲巴县| 岢岚县| 嘉祥县| 宝坻区| 寿阳县| 峡江县| 东方市| 大邑县| 佛冈县| 盐津县|