在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

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

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

            作者: 時(shí)間:2016-11-30 來(lái)源:網(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庫(kù)函數(shù)
            //-------按鍵輸入點(diǎn)設(shè)置-------
            #define s1 (PIND&0x10) //變量值增加鍵
            #define s2 (PIND&0x20) //變量值減少鍵
            #define s3 (PIND&0x40) //存儲(chǔ)鍵
            #define s4 (PIND&0x80) //讀取鍵
            //-------------------
            #define TWINT 7 //中斷標(biāo)志
            #define TWEN 2 //中斷時(shí)能
            #define TWSTA 5 //啟動(dòng)狀態(tài)位
            #define TWSTO 4 //停止?fàn)顟B(tài)位
            //-----TWI狀態(tài)定義,MT主方式傳送,MR主方式接受
            #define START 0x08 //啟動(dòng)
            #define RE_START 0x10 // 重新啟動(dòng)
            #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)檢測(cè),屏蔽預(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防止按鍵抖動(dòng)
            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) //值存儲(chǔ)鍵
            {
            delay(100);
            if(s3==0)
            {
            iicwrite(70,val);
            }
            }
            if(s4==0) //值讀取鍵
            {
            delay(100);
            if(s4==0)
            {
            val=iicread(70);
            }
            }
            }
            }

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

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

            評(píng)論


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

            關(guān)閉