<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          ADC0832檢測模擬電壓值

          作者: 時(shí)間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
          =============================================================================================

          ``````````````````````````````程序思想`````````````````````````````

          本文引用地址:http://www.ex-cimer.com/article/201611/321145.htm

          AD0832與AD08004有所不同,AD0804的數(shù)據(jù)是并行輸出,而AD0832是串行輸出,其思想略有復(fù)雜。

          根據(jù)ADC0832的時(shí)序,首先選通芯片,在第一個脈沖下沿前讓addi為高,在第二個下沿前給addi1位數(shù)據(jù),在第三個下沿前給addi1位數(shù)據(jù),
          兩位數(shù)據(jù)為10時(shí)選通CH0,為11時(shí)選通CH1; 在第三個下沿后開始接收數(shù)據(jù)。

          數(shù)據(jù)接收核心思想:
          1、以dat來接收從高位到低位傳回來的數(shù)據(jù),分8次依次接收。dat每接收一位后向高位移1位,最低位與下一位接收到的數(shù)據(jù)
          相或,直到接收到8位。
          2、以ndat來接收從低位到高位傳回來的數(shù)據(jù),分8次依次接收。 用參數(shù)j來接收1位數(shù)據(jù),ndat來存儲接收到的8位數(shù)據(jù)。當(dāng)j接收到1位數(shù)據(jù)以后
          向左移7位,到最高位,然后與ndat相或,即將數(shù)據(jù)傳給ndat,ndat每接收到1位以后,其數(shù)據(jù)向右移1位,直到7位傳完。最后將接收到的數(shù)據(jù)傳回即可。

          AD00832接收數(shù)據(jù)共分為19個時(shí)鐘脈沖,由單片機(jī)提供。前三個為初始化,第四個到第11個為高位在先數(shù)據(jù),第11到第19個為低位在先數(shù)據(jù)。

          從AD中讀到的數(shù)據(jù)并非為真實(shí)的電壓值,只是一個虛擬量。真是的電壓值為

          V=date*VREF/256,(VREF為外部提供的基準(zhǔn)電壓,即AD給供電的VCC)

          *********************轉(zhuǎn)載請注明出處,謝謝!*********************

          ==============================================================================================

          #include
          #include
          #define uchar unsigned char
          #define uint unsigned int
          uchar code table[]={0x3F, //"0"
          0x06, //"1"
          0x5B, //"2"
          0x4F, //"3"
          0x66, //"4"
          0x6D, //"5"
          0x7D, //"6"
          0x07, //"7"
          0x7F, //"8"
          0x6F, //"9"
          };

          //端口定義
          sbit adcs=P3^3; //芯片選通信號,低有效
          sbit adclk=P3^2; //芯片時(shí)鐘信號
          sbit addo=P3^7; //通道0
          sbit addi=P3^6; //通道1
          uchar date;
          int a,b,c;

          void delay(uchar z)//延時(shí)函數(shù)
          {
          uchar x,y;
          for(x=z;x>0;x--)
          for(y=110;y>0;y--);
          }

          void delay1() //延時(shí)兩個空指令
          {
          _nop_();
          _nop_();
          }


          int ADconvert() //AD轉(zhuǎn)換


          {
          uchar i=0;
          uchar j;
          uint dat=0;
          uchar ndat=0;

          addi=1;
          delay1();
          adcs=0; //芯片選通
          delay1();
          adclk=1; //
          delay1();
          adclk=0; //下降沿1
          delay1();
          adclk=1; //
          addi=0;
          delay1();
          adclk=0; //下降沿2
          delay1();
          adclk=1; //
          addi=1; //選擇通道
          delay1();
          adclk=0; //下降沿3
          addi=1;
          delay1();
          dat=0;
          for(i=0;i<8;i++) //串行接收數(shù)據(jù)高位在前
          {
          dat|=addo; //將addo數(shù)據(jù)給dat
          adclk=1; //拉高
          delay1();
          adclk=0;//拉低,循環(huán)時(shí)鐘
          delay1();
          dat<<=1;//將數(shù)據(jù)向左移動1位,方便低位接收下一位數(shù)據(jù)
          if(i==7)
          dat|=addo;//最后一位數(shù)據(jù)直接賦給dat
          }
          for(i=0;i<8;i++) //串行接收數(shù)據(jù)低位在前
          {
          j=0; //每次接收前復(fù)位為0
          j|=addo;//j用來接收1位數(shù)據(jù)
          adclk=1; //拉高
          delay1();
          adclk=0;//拉低,循環(huán)時(shí)鐘
          delay1();
          j<<=7;//將接收到的數(shù)據(jù)移動到最高位
          ndat=ndat|j; //將接收到的數(shù)據(jù)傳給ndat
          if(i<7)
          ndat>>=1; //每接收到1為數(shù)據(jù),ndat向右移動1位
          }
          adcs=1;
          adclk=0;
          addo=1; //回到初始狀態(tài)
          dat<<=8; //int型數(shù)據(jù)為16位,將接收到的8位數(shù)據(jù)移到高8位,
          dat|=ndat;
          return(dat);
          }

          void display() //數(shù)碼管顯示
          {
          P1=0xf0;
          P2=table[a];
          delay(10);
          P1=0xf2;
          P2=table[b];
          delay(10);
          P1=0xf4;
          P2=table[c];
          delay(10);

          }

          void main()
          {
          int num;
          delay(500);
          adcs=1;

          while(1)
          {
          date=ADconvert(); //獲取轉(zhuǎn)換數(shù)據(jù)
          a=date/100;
          b=date0/10;
          c=date;
          for(num=255;num>0;num--)
          {
          display();
          }

          }

          }



          關(guān)鍵詞: ADC0832檢測模擬電壓

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();