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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于PCF8591的I_2C總線A_D_D_A轉(zhuǎn)換的資料

          基于PCF8591的I_2C總線A_D_D_A轉(zhuǎn)換的資料

          作者: 時間:2016-12-01 來源:網(wǎng)絡(luò) 收藏
          /*******************
          程序功能:
          通過DA轉(zhuǎn)換把輸出電壓逐漸增大,
          使加在上面的發(fā)光二級管慢慢變亮
          到最亮后再變暗,如此循環(huán)
          *******************/

          /*******************
          D/A轉(zhuǎn)換
          *******************/
          #include
          #define uint unsigned int
          #define uchar unsigned char
          #define PCF8591 0x90//PCF8591的地址
          sbit sda=P2^0;
          sbit scl=P2^1;
          void delay()//執(zhí)行空語句,微秒級延時函數(shù)
          {;;}
          void delay1ms(uint z)//延時1ms
          {
          uint x,y;
          for(x=z;x>0;x--)
          {
          for(y=0;y<=110;y++)
          {
          }
          }
          }
          void init()//初始化狀態(tài)下SCL和SDA都為高電平
          {
          scl=1;
          delay();
          sda=1;
          delay();
          }
          void start()//在SCL為高電平時SDA由高電平到低電平
          {
          sda=1;
          delay();
          scl=1;
          delay();
          sda=0;
          }
          void respons()
          /*
          應(yīng)答信號,SCL在高電平期間,SDA被從設(shè)備拉為低電平表示應(yīng)答。
          (sda==1)和i<255相與,表示若在一段時間內(nèi)沒有從器件的應(yīng)答則主器件
          默認(rèn)從器件已經(jīng)收到數(shù)據(jù)而不再等待應(yīng)答信號
          */
          {
          uchar i;
          scl=1;
          delay();
          while((sda==1)&&(i<250))
          {
          i++;
          }
          scl=0;
          delay();
          }
          void stop()//SCL在高電平期間,SDA一個上升沿停止信號
          {
          sda=0;
          delay();
          scl=1;
          delay();
          sda=1;
          }
          void write_byte(uchar date)//寫一個字節(jié)
          {
          uchar i,temp;
          temp=date;
          for(i=0;i<8;i++)
          {
          temp=temp<<1;
          scl=0;//只有在SCL為0期間才允許SDA數(shù)據(jù)線上的狀態(tài)才允許變化
          delay();
          sda=CY;//PSW的寄存器的CY進(jìn)位標(biāo)志位
          delay();
          scl=1; //SCL時鐘信號為高電平期間數(shù)據(jù)線上的數(shù)據(jù)必須保持穩(wěn)定 delay();
          delay();
          }
          scl=0;
          delay();
          sda=1;//釋放總線
          delay();
          }
          uchar read_byte()
          {
          uchar i,k;
          scl=0;
          delay();
          sda=1;//釋放總線
          delay();
          for(i=0;i<8;i++)
          {
          scl=1;
          delay();
          k=(k<<1)|sda;
          scl=0;
          delay();
          }
          //delay();here is a bug
          return k;
          }

          void write_address(uchar address,uchar date)
          {
          start();
          write_byte(0x90);
          respons();
          write_byte(address);
          respons();
          write_byte(date);
          respons();
          stop();
          }
          uchar read_address(uchar address)
          {
          uchar date;
          start();
          write_byte(0x90); //10010000 前四位固定 接下來三位全部被接地了 所以都是0 最后一位是寫 所以為低電平
          respons();
          write_byte(address);
          respons();
          start();
          write_byte(0x91);
          respons();
          date=read_byte();
          stop();
          return date;
          }
          void main()
          {
          uint count;
          init();
          while(1)
          {
          write_address(0x40,count);
          delay1ms(5);
          count++;
          if(count>250)
          {
          count=0;
          }
          }

          }


          /*******************
          程序功能:
          旋轉(zhuǎn)A/D電位器,將模擬量變成數(shù)字量,并用數(shù)碼管顯示其結(jié)果。
          *******************/

          /*******************
          A/D轉(zhuǎn)換
          *******************/
          #include
          #define uint unsigned int
          #define uchar unsigned char
          #define PCF8591 0x90//PCF8591的地址
          sbit sda=P2^0;
          sbit scl=P2^1;
          sbit LS138A=P2^2;//138譯碼器的3位 控制數(shù)碼管的
          sbit LS138B=P2^3;
          sbit LS138C=P2^4;
          uchar num,ge,shi,bai;
          uchar code table[]={
          0x3f,0x06,0x5b,0x4f,
          0x66,0x6d,0x7d,0x07,
          0x7f,0x6f};//段選
          void delay()//執(zhí)行空語句,微秒級延時函數(shù)
          {;;}
          void delay1ms(uint z)//延時1ms
          {
          uint x,y;
          for(x=z;x>0;x--)
          {
          for(y=0;y<=110;y++)
          {
          }
          }
          }
          void init()//初始化狀態(tài)下SCL和SDA都為高電平
          {
          scl=1;
          delay();
          sda=1;
          delay();
          }
          void start()//在SCL為高電平時SDA由高電平到低電平
          {
          sda=1;
          delay();
          scl=1;
          delay();
          sda=0;
          }
          上一頁 1 2 下一頁

          關(guān)鍵詞: PCF8591DA轉(zhuǎn)換總

          評論


          技術(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); })();