色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

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

          51單片機 ADC0804控制

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

          原理圖:

          本文引用地址:http://cafeforensic.com/article/201611/321312.htm


          代碼如下:

          //頭文件
          #include
          #include //_nop_延時一個機械周期函數(shù)所在頭文件
          //定義宏
          #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; //存放模數(shù)轉換后的數(shù)字量
          uint baiwei,shiwei,gewei; //存放模數(shù)轉換后的數(shù)字量的百位、十位、各位

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

          以上,結束。



          關鍵詞: 51單片機ADC0804控

          評論


          技術專區(qū)

          關閉