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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > PCF8591(AD-DA)芯片-51單片機(jī)程序

          PCF8591(AD-DA)芯片-51單片機(jī)程序

          作者: 時(shí)間:2016-11-30 來(lái)源:網(wǎng)絡(luò) 收藏

          void ADCinshow(uchar dd)//模擬量輸入值顯示
          {
          P0=seg[dd/100];
          P2=tab[7];
          delay(8);
          P0=0xff; //顯示消影
          P2=0xff;
          P0=seg[dd%100/10];
          P2=tab[6];
          delay(8);
          P0=0xff;
          P2=0xff;
          P0=seg[dd%10];
          P2=tab[5];
          delay(8);
          P0=0xff;
          P2=0xff;
          }
          void ADCoutshow(uchar k) //模擬量輸出值顯示
          {
          P0=seg[k/100];
          P2=tab[2];
          delay(8);
          P0=0xff;
          P2=0xff;
          P0=seg[k%100/10];
          P2=tab[1];
          delay(8);
          P0=0xff;
          P2=0xff;
          P0=seg[k%10];
          P2=tab[0];
          delay(8);
          P0=0xff;
          P2=0xff;
          }
          //------------------主函數(shù)----------------
          void main()
          {
          uchar val; //模擬量讀取值變量
          uint cnt=0; //設(shè)置喇叭報(bào)警延時(shí)變量
          while(1)
          { key1();
          key2();
          val=readADC(3);//讀取通道3的轉(zhuǎn)換值
          ADCinshow(val);
          if(writeDAC(outdata)!=0); //模擬量輸出值
          ADCoutshow(outdata);
          if(val>200) //模擬量輸入值超過(guò)200 喇叭報(bào)警
          {
          cnt++;
          if(cnt>2)
          {
          bz=~bz;
          cnt=0;
          }
          }
          else
          bz=1;
          }
          }
          //IIC庫(kù)函數(shù)---------------------------------------------------------------

          sbit scl=P3^0; //IIC 時(shí)鐘線
          sbit sda=P3^1; //IIC數(shù)據(jù)線
          uchar ack; //應(yīng)答位

          void delay_nop() //延時(shí)約5us
          {
          _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
          }
          void iic_start() //啟動(dòng)IIC總線
          {
          sda=1;
          _nop_();
          scl=1;//時(shí)鐘線高電平期間,數(shù)據(jù)線下降沿產(chǎn)生啟動(dòng)信號(hào)
          delay_nop(); //5us延時(shí)
          sda=0;
          delay_nop();
          scl=0; //釋放總線開(kāi)始準(zhǔn)備接受/發(fā)送數(shù)據(jù)
          _nop_();
          _nop_();
          }
          void iic_stop() //停止IIC總線
          {
          sda=0;
          _nop_(); //時(shí)鐘線高電平期間,數(shù)據(jù)線上升沿產(chǎn)生停止信號(hào)
          scl=1;
          delay_nop();
          sda=1;
          delay_nop();
          }
          voidiic_sendbyte(uchar byte) //IIC發(fā)送一個(gè)字節(jié)命令
          {
          uchar i;
          for(i=0;i<8;i++)
          {
          if((byte<else sda=0; //發(fā)送字節(jié)中數(shù)據(jù)左移一位
          _nop_();
          scl=1; //時(shí)鐘線至高位 ,數(shù)據(jù)保持穩(wěn)定
          delay_nop();
          scl=0; //釋放開(kāi)始下一個(gè)數(shù)據(jù)發(fā)送
          }
          sda=1; //發(fā)送完,釋放數(shù)據(jù)線開(kāi)始接受應(yīng)答
          _nop_();
          _nop_();
          scl=1;//時(shí)鐘線至高位
          _nop_();
          _nop_();
          _nop_();
          if(sda==1)ack=0; //應(yīng)答判斷
          else ack=1;
          scl=0;
          _nop_();
          _nop_();
          }

          uchariic_receive() //IIC接受一個(gè)字節(jié)
          {
          uchar i;
          uchar byte=0;
          sda=1; //數(shù)據(jù)線釋放開(kāi)始接受
          for(i=0;i<8;i++)
          {
          scl=0; //時(shí)鐘線置低開(kāi)始接受數(shù)據(jù)
          delay_nop();
          scl=1; //時(shí)鐘線置高,接受數(shù)據(jù)
          _nop_(); _nop_();
          byte=byte<<1;
          if(sda==1)byte=byte+1; //數(shù)據(jù)左移1位
          _nop_();
          _nop_();
          }
          scl=0; //接受完釋放總線
          _nop_();
          _nop_();
          return byte; //返回接受值
          }
          void iic_noack()//非應(yīng)答
          {
          sda=1;
          _nop_();
          _nop_();
          _nop_();
          scl=1;
          delay_nop();
          scl=0;
          _nop_();
          _nop_();
          }
          uchar readADC(uchar chl) //ADC轉(zhuǎn)換子函數(shù) 選擇通道chl
          {
          uchar value;
          iic_start();
          iic_sendbyte(0x90);//發(fā)送寫(xiě)方向
          if(ack==0)return 0;
          iic_sendbyte(0x40|chl); //控制命令
          if(ack==0)return 0;
          iic_start();
          iic_sendbyte(0x91); //發(fā)送讀方向
          if(ack==0)return 0;
          value=iic_receive(); //接受轉(zhuǎn)換數(shù)據(jù)
          iic_noack();
          iic_stop();
          return value; //返回轉(zhuǎn)換值
          }

          uchar writeDAC(uchar da) //模擬量輸出值函數(shù)
          {
          iic_start();
          iic_sendbyte(0x90);
          if(ack==0)return 0;
          iic_sendbyte(0x40);
          if(ack==0)return 0;
          iic_sendbyte(da);
          if(ack==0)return 0;
          iic_stop();
          return 1; //正常輸出返回值1 異常返回值0
          }
          //--------------------------------------------------------------------


          上一頁(yè) 1 2 下一頁(yè)

          關(guān)鍵詞: PCF8591AD-DA芯片51單片

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(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); })();