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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > AVR學習心得(二)

          AVR學習心得(二)

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

          下面是我用C語言寫的第一個實驗:花樣流水燈

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

          功能說明:

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

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

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

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

          51:unsigned charcodearr[ ] = { };

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

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

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

          /************************************************
          文件:main.c
          用途:
          注意:內部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)點亮
          const unsigned char led2[]={0x7F,0x3F,0x1F,0x0F,0x07,0x03,0x01,0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};//逐個點亮
          const unsigned char led3[]={0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0xFF};//間隔點亮
          const unsigned char led4[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00};//循環(huán)熄滅

          /*============================ 延時部分 ======================================*/

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

          void delay_nms(unsigned int n) //N ms延時函數(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);//延時消抖
          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); // 延時
          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; // 默認方式
          while(1)
          {
          key=scan(led_temp); // 流水燈顯示
          switch(key)
          {
          case((1< case((1< case((1< case((1< default:break;
          }
          }
          }

          /*============================ 程序結束 ======================================*/



          關鍵詞: AVR學習心

          評論


          技術專區(qū)

          關閉
          看屁屁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); })();