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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > AVR單片機(jī)IIC實(shí)驗(yàn)

          AVR單片機(jī)IIC實(shí)驗(yàn)

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


          //芯片ATMEGA16 晶振8mhz

          #include
          #include
          #define uchar unsigned char
          #define uint unsigned int
          //-----------------------------
          uchar str1[]={"IIC TEST"};
          //---------------------------
          void delay(uint k) //延時(shí)函數(shù)
          {
          uint i,j;
          for(i=0;i
          for(j=0;j<1140;j++);
          }

          #include "1602.h" //1602庫函數(shù)
          //-------按鍵輸入點(diǎn)設(shè)置-------
          #define s1 (PIND&0x10) //變量值增加鍵
          #define s2 (PIND&0x20) //變量值減少鍵
          #define s3 (PIND&0x40) //存儲鍵
          #define s4 (PIND&0x80) //讀取鍵
          //-------------------
          #define TWINT 7 //中斷標(biāo)志
          #define TWEN 2 //中斷時(shí)能
          #define TWSTA 5 //啟動狀態(tài)位
          #define TWSTO 4 //停止?fàn)顟B(tài)位
          //-----TWI狀態(tài)定義,MT主方式傳送,MR主方式接受
          #define START 0x08 //啟動
          #define RE_START 0x10 // 重新啟動
          #define MT_SLA_ACK 0x18 //主機(jī)應(yīng)答
          #define MT_SLA_NOACK 0x20 //主機(jī)非應(yīng)答
          #define MT_DATA_ACK 0x28 //主機(jī)數(shù)據(jù)傳送后應(yīng)答
          #define MT_DATA_NOACK 0x30 //主機(jī)數(shù)據(jù)傳送后非應(yīng)答
          #define MR_SLA_ACK 0x40 //從機(jī)應(yīng)答
          #define MR_SLA_NOACK 0x48 //從機(jī)非應(yīng)答
          #define MR_DATA_ACK 0x50 //從機(jī)數(shù)據(jù)應(yīng)答
          #define MR_DATA_NOACK 0x58 //從機(jī)數(shù)據(jù)非應(yīng)答
          //-------------------------
          #define start() (TWCR=(1<
          #define stop() (TWCR=(1<
          #define wait() {while(!(TWCR&(1<
          #define testack() (TWSR&0xf8) //TWI狀態(tài)檢測,屏蔽預(yù)分頻位
          #define setack() (TWCR|(1<
          #define setnoack() (TWCR&=~(1<
          #define twi() (TWCR=(1<
          #define writebit(x) {TWDR=(x);TWCR=(1<
          //------I/0口設(shè)置------------
          void portinit()
          {
          PORTA=0xff;
          DDRA=0xff;
          PORTB=0xff;
          DDRB=0xff;
          PORTC=0xff;
          DDRC=0xff;
          PORTD=0xff;
          DDRD=0x00;
          }
          //-----------讀數(shù)據(jù)函數(shù)----------
          uchar iicread(uchar address)
          {
          uchar temp;
          start();
          wait();
          if(testack()!=START) return 0;
          writebit(0xa0);
          wait();
          if(testack()!=MT_SLA_ACK) return 0;
          writebit(address);
          wait();
          if(testack()!=MT_DATA_ACK) return 0;
          start();
          wait();
          if(testack()!=RE_START) return 0;
          writebit(0xa1);
          wait();
          if(testack()!=MR_SLA_ACK) return 0;
          twi();
          wait();
          if(testack()!=MR_DATA_NOACK) return 0;
          temp=TWDR;
          stop();
          return temp;
          }
          //---------------寫數(shù)據(jù)函數(shù)----------------
          uchar iicwrite(uchar address,uchar data)
          {
          start();
          wait();
          if(testack()!=START) return 1;
          writebit(0xa0);
          wait();
          if(testack()!=MT_SLA_ACK) return 1;
          writebit(address);
          wait();
          if(testack()!=MT_DATA_ACK) return 1;
          writebit(data);
          wait();
          if(testack()!=MT_DATA_ACK) return 1;
          stop();
          delay(10);
          return 0;
          }

          void main()
          {
          uchar val=0; //數(shù)據(jù)值變量
          portinit();
          delay(200);
          init();
          delay(200);
          display(2,0,str1);
          delay(200);
          while(1)
          {
          displayz(5,1,val/10+0x30);
          displayz(6,1,val%10+0x30);
          delay(10);
          if(s1==0) //值增加鍵
          {
          delay(100); //軟件延時(shí)100ms防止按鍵抖動
          if(s1==0)
          {
          val++;
          if(val>30)val=0;
          }
          }
          if(s2==0) //值減少鍵
          {
          delay(100);
          if(s2==0)
          {
          val--;
          if(val<1)val=40;
          }
          }
          if(s3==0) //值存儲鍵
          {
          delay(100);
          if(s3==0)
          {
          iicwrite(70,val);
          }
          }
          if(s4==0) //值讀取鍵
          {
          delay(100);
          if(s4==0)
          {
          val=iicread(70);
          }
          }
          }
          }

          上一頁 1 2 下一頁

          關(guān)鍵詞: AVR單片機(jī)IIC實(shí)

          評論


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