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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > mega8515的矩陣鍵盤與LED顯示程序

          mega8515的矩陣鍵盤與LED顯示程序

          作者: 時(shí)間:2016-11-29 來源:網(wǎng)絡(luò) 收藏
          ATmega8515是一種與51單片機(jī)引腳相容的avr單片機(jī),下面的程序已經(jīng)通過測試可以正常使用:

          /******************************************************************
          //文件名稱:Key4X4_Led
          //功 能:4X4矩陣鍵盤控制LED小燈
          //作 者:懶貓愛飛
          //日 期:2010.05.25
          *******************************************************************/
          #include
          #include

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

          #define uchar unsigned char
          #define uint unsigned int

          uint Key_num=20;

          //宏定義左移,右移函數(shù)crol為左移,cror為右移
          #define crol(a,n) a=(a<>(8-n))
          #define cror(a,n) a=(a>>n)|(a<<(8-n))

          /****************************************************************
          //函數(shù)名稱: delay(void)
          //功 能:延時(shí)
          //入口參數(shù):無
          //出口參數(shù):無
          *****************************************************************/
          void delay(void)
          {
          uint i;
          for(i=1;i<100;i++)
          ;
          }

          /****************************************************************
          //函數(shù)名稱:delay_1ms(void)
          //功 能:延時(shí)1ms
          //入口參數(shù):無
          //出口參數(shù):無
          *****************************************************************/
          void delay_1ms(void)//1ms
          {
          uint i;
          for(i=1;i<(uint)(8*143-2);i++)
          ;
          }
          /****************************************************************
          //函數(shù)名稱:delay_ms(uint time)
          //功 能:延時(shí)time ms
          //入口參數(shù):time
          //出口參數(shù):無
          *****************************************************************/
          void delay_ms(uint time)//time*1ms
          {
          uint i="0";
          while(i {
          delay_1ms();
          i++;
          }
          }
          /****************************************************************
          //函數(shù)名稱:Port_init(void)
          //功 能:端口初始化
          //入口參數(shù):無
          //出口參數(shù):無
          *****************************************************************/
          void Port_init(void)
          {
          DDRA = 0xff; //A口輸出口,控制LED
          PORTA = 0xff;

          DDRB = 0x00; //B口設(shè)為輸出口,控制LED
          PORTB = 0x00;

          DDRC = 0xff; //C口
          PORTC = 0xff;

          DDRD = 0xf0; //D口低四位輸入,置高電平,高四位輸出,置低電平
          PORTD = 0x00;
          }

          /****************************************************************
          //函數(shù)名稱:uchar Key_scan(void)
          //功 能:鍵盤掃描,讀取鍵值
          //入口參數(shù):無
          //出口參數(shù):無
          *****************************************************************/
          uchar Key_scan(void)
          {
          uchar i,j;
          DDRD = 0xf0; //設(shè)置PD高四位為輸出口,低四位為輸入口
          PORTD = 0x00; // 初始運(yùn)行輸出全為0
          if((PIND & 0x0f) == 0x0f) return 20; // 判斷有無按鍵動(dòng)作,沒有,返回0
          else
          {
          delay_ms(10); //按鍵消抖
          if((PIND & 0x0f) == 0x0f) return 20; //再次判斷是否有按鍵動(dòng)作
          else
          {
          for(i = 4;i < 8;i++) //逐行輸出0
          {
          PORTD = ~(1 << i) | 0x0f; //第i行輸出0
          for(j = 0;j < 4;j++)
          {
          if((PIND & (1 << j)) == 0) //逐列檢測
          Key_num= (i - 4) * 4 + j; //計(jì)算鍵值
          }
          }
          return Key_num; //
          }
          }
          }
          /****************************************************************
          //函數(shù)名稱:Led_display(void)
          //功 能:Led顯示控制
          //入口參數(shù):無
          //出口參數(shù):無
          *****************************************************************/
          void Led_display(void)
          {
          switch(Key_num) //根據(jù)鍵碼值選擇控制情況
          {
          case 0:PORTA=0xfe;PORTC=0xff;break;
          case 1:PORTA=0xfc;PORTC=0xff;break;
          case 2:PORTA=0xf8;PORTC=0xff;break;
          case 3:PORTA=0xf0;PORTC=0xff;break;
          case 4:PORTA=0xe0;PORTC=0xff;break;
          case 5:PORTA=0xc0;PORTC=0xff;break;
          case 6:PORTA=0x80;PORTC=0xff;break;
          case 7:PORTA=0x00;PORTC=0xff;break;
          case 8:PORTA=0x00;PORTC=0xfe;break;
          case 9:PORTA=0x00;PORTC=0xfc;break;
          case 10:PORTA=0x00;PORTC=0xf8;break;
          case 11:PORTA=0x00;PORTC=0xf0;break;
          case 12:PORTA=0x00;PORTC=0xe0;break;
          case 13:PORTA=0x00;PORTC=0xc0;break;
          case 14:PORTA=0x00;PORTC=0x80;break;
          case 15:PORTA=0x00;PORTC=0x00;break;
          default: break;
          }
          }
          /****************************************************************
          //函數(shù)名稱:main(void)
          //功 能:主程序
          //入口參數(shù):無
          //出口參數(shù):無
          *****************************************************************/
          void main(void)
          {
          //#define debug1
          #ifdef debug1
          Key_code=2;//測試函數(shù)Led_display()是否可用
          #endif

          Port_init();
          while(1)
          {
          Key_scan();
          Led_display();
          }
          }



          關(guān)鍵詞: mega8515矩陣鍵盤LED顯

          評(píng)論


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