在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > AVR學(xué)習(xí)心得(二)

            AVR學(xué)習(xí)心得(二)

            作者: 時(shí)間:2016-11-10 來源:網(wǎng)絡(luò) 收藏
            AVR mega128 I/O控制

            下面是我用C語言寫的第一個(gè)實(shí)驗(yàn):花樣流水燈

            本文引用地址:http://www.biyoush.com/article/201611/317323.htm

            功能說明:

            1.有四種顯示方式,沒鍵按下時(shí)為默認(rèn)的第1種方式:循環(huán)點(diǎn)亮

            2.當(dāng)按下K1時(shí),顯示第1種方式:循環(huán)點(diǎn)亮;當(dāng)按下K2時(shí),顯示第2種方式:逐個(gè)點(diǎn)亮;當(dāng)按下K3時(shí),顯示第3種方式:間隔點(diǎn)亮;當(dāng)按下K4時(shí),顯示第4種方式:循環(huán)熄滅。

            實(shí)驗(yàn)中容易出現(xiàn)的問題:

            1.在定義數(shù)組時(shí),要區(qū)別與51的定義方式:

            51:unsigned charcodearr[ ] = { };

            AVR:#program codeunsigned char arr[ ] = { }; 或constunsigned char arr[ ] = { };

            2.在端口設(shè)置時(shí),應(yīng)該把PORTX放在前面,DDRX放在后面,否則會出現(xiàn)一些初始化時(shí)的錯(cuò)誤。例如:如果端口接的是低電平有效的發(fā)光二極管,放反后就會出現(xiàn)短暫的閃爍。

            3.if((key_scan&0xF0)!=0xF0),在這一句中如果沒有括號,程序不能正常運(yùn)行。所以應(yīng)注意C語言中符合的優(yōu)先級和結(jié)合方式。

            /************************************************
            文件:main.c
            用途:
            注意:內(nèi)部8M晶振
            創(chuàng)建:2008.4.23
            修改:2008.4.23
            Copy Right (c) zhaojun
            ************************************************/
            #include
            #include

            // 按鍵端口定義
            #define KEY_DDR DDRD
            #define KEY_PORT PORTD
            #define KEY_PIN PIND
            #define S1 4
            #define S2 5
            #define S3 6
            #define S4 7

            //
            const unsigned char led1[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,0xFF};//循環(huán)點(diǎn)亮
            const unsigned char led2[]={0x7F,0x3F,0x1F,0x0F,0x07,0x03,0x01,0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};//逐個(gè)點(diǎn)亮
            const unsigned char led3[]={0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0xFF};//間隔點(diǎn)亮
            const unsigned char led4[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00};//循環(huán)熄滅

            /*============================ 延時(shí)部分 ======================================*/

            void delay_1ms(void) //1ms延時(shí)函數(shù)
            {
            unsigned int i;
            for (i=0;i<1140;i++);
            }

            void delay_nms(unsigned int n) //N ms延時(shí)函數(shù)
            {
            unsigned int i=0;
            for (i=0;i delay_1ms();
            }
            /*============================ 按鍵部分 ======================================*/

            void key_init(void) //按鍵端口初始化
            {
            KEY_PORT|= (1< KEY_DDR &= (1<}

            unsigned char key_get(void) //按鍵獲取
            {
            unsigned char key_value = 0xFF;
            key_value = KEY_PIN&((1< if(key_value!=((1< {
            delay_nms(2);//延時(shí)消抖
            if(KEY_PIN&((1< {
            key_value = KEY_PIN&((1< while((KEY_PIN&((1< //等待按鍵釋放
            }
            }
            return key_value; //返回按鍵值
            }
            /*============================ 流水燈部分 ====================================*/

            unsigned char scan(const unsigned char * led)
            {
            unsigned char i;
            unsigned char key_scan;
            for(i=0;i<16;i++)
            {
            PORTE = led[i]; // 輸入顯示
            delay_nms(300); // 延時(shí)
            key_scan=key_get(); // 按鍵掃描
            if((key_scan&0xF0)!=0xF0)// 如果有鍵按下,返回按鍵值
            return key_scan;
            }
            }

            /*============================ 主函數(shù)部分 ====================================*/
            void main(void)
            {
            unsigned char key;
            const unsigned char * led_temp;
            PORTE = 0xFF; // 初始化顯示端口
            DDRE = 0xFF;
            key_init(); // 初始化按鍵端口
            led_temp=led1; // 默認(rèn)方式
            while(1)
            {
            key=scan(led_temp); // 流水燈顯示
            switch(key)
            {
            case((1< case((1< case((1< case((1< default:break;
            }
            }
            }

            /*============================ 程序結(jié)束 ======================================*/



            關(guān)鍵詞: AVR學(xué)習(xí)心

            評論


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

            關(guān)閉