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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > AVR簡單好用的4x4矩陣鍵盤

          AVR簡單好用的4x4矩陣鍵盤

          作者: 時間:2016-11-10 來源:網(wǎng)絡(luò) 收藏
          // Target : ATMEGA16

          // Crystal: 8.0000Mhz

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

          //key.h

          #ifndef _4X4_H_
          #define _4X4_H_

          #define No_key 255

          #define key_port PORTB
          #define key_port_ddr DDRB
          #define key_port_pin PINB


          unsigned char keyboard_Scan(void);

          #endif

          //key.c

          #include
          #include

          #include "key.h"

          const unsigned char key_table[16] =
          {
          1, 2, 3,12,
          4, 5, 6,13,
          7, 8, 9,14,
          10,0,11,15,
          };

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

          //4x4矩陣鍵盤掃描函數(shù)

          unsigned char keyboard_Scan(void)
          {
          unsigned char temp,key,row,Column;

          key_port_ddr = 0b00001111;// 高四位輸入行線/低四位輸出列線
          key_port= 0b11110000;// 高四位打開上拉電阻/低四位輸出低電平
          delay_nus(5);// 延時5us
          if((key_port_pin & 0xF0)!= 0xF0)// 作初檢查有否鍵按下,沒有,就返回
          {// 如果行線不全為1,可能有鍵按下
          delay_nms(5);// 延時去抖動

          //設(shè)置列線初始值3~0=1110
          for(Column=0,key_port=0b11111110;Column<4;Column++)
          {
          for(row=0,temp=0b11101111;row<4;row++)// 設(shè)置行線初始值7~4=1110
          {
          while((key_port_pin & 0xF0)==(temp & 0xF0))// 輸入行線,查看這行有否鍵按下
          {
          key=4*row+Column;// 鍵編碼=4*行輸入值+列掃描值
          key=key_table[key];// 鍵盤編碼轉(zhuǎn)換鍵值
          return (key);
          }
          temp<<=1;// 行線左移1位
          }
          key_port=((key_port<<1)|0x01);// 列線掃描值左移1位,掃描下一行
          }
          }
          return (No_key);
          }

          //main.c

          #include
          #include

          #include "key.h"

          voidmain(void)
          {
          unsigned char Key;
          while(1)
          {
          Key = keyboard_Scan();// 鍵盤掃描
          switch(Key)
          {
          case 0:
          break;

          ......

          default:
          break;
          }
          }
          }

          主函數(shù)中的延時個人覺得最好還是用定時器

          電路接法不同可修改key_table數(shù)組



          關(guān)鍵詞: AVR4x4矩陣鍵

          評論


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