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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > PIC18F452單片機(jī) 矩陣鍵盤

          PIC18F452單片機(jī) 矩陣鍵盤

          作者: 時間:2016-11-21 來源:網(wǎng)絡(luò) 收藏
          #include //調(diào)用頭文件,可以去PICC18軟件下去查找PIC18FXX2.H
          __CONFIG(1,XT) ; //晶振為外部4M
          __CONFIG(2,WDTDIS) ; //看門狗關(guān)閉
          __CONFIG(4,LVPDIS) ; //禁止低電壓編程
          #define B7 RB7
          #define B6 RB6
          #define B5 RB5
          #define B4 RB4
          #define B3 RB3
          #define B2 RB2
          #define B1 RB1
          #define B0 RB0
          #define B PORTB
          #define D PORTD
          #define E2 RE2
          #define E1 RE1
          #define E0 RE0
          #define C7 RC7
          char shuma[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
          void delayms(int x)
          {
          int i,j;
          for(i=0;i<=30;i++)
          for(j=0;j<=x;j++);
          }
          int keyscan()
          {
          B=0x7f;
          if(B3==0)
          {
          delayms(5);
          return 16;
          }
          if(B2==0)
          {
          delayms(5);
          return 12;
          }
          if(B1==0)
          {
          delayms(5);
          return 8;
          }
          if(B0==0)
          {
          delayms(5);
          return 4;
          }
          delayms(5);
          B=0xbf;
          if(B3==0)
          {
          delayms(5);
          return 15;
          }
          if(B2==0)
          {
          delayms(5);
          return 11;
          }
          if(B1==0)
          {
          delayms(5);
          return 7;
          }
          if(B0==0)
          {
          delayms(5);
          return 3;
          }
          delayms(5);
          B=0xdf;
          if(B3==0)
          {
          delayms(5);
          return 14;
          }
          if(B2==0)
          {
          delayms(5);
          return 10;
          }
          if(B1==0)
          {
          delayms(5);
          return 6;
          }
          if(B0==0)
          {
          delayms(5);
          return 2;
          }
          delayms(5);
          B=0xef;
          if(B3==0)
          {
          delayms(5);
          return 13;
          }
          if(B2==0)
          {
          delayms(5);
          return 9;
          }
          if(B1==0)
          {
          delayms(5);
          return 5;
          }
          if(B0==0)
          {
          delayms(5);
          return 1;
          }
          delayms(5);
          }
          void display(int num)
          {
          int ge,shi;
          ge=num;
          shi=num/10;
          E2=0;
          E1=1;E0=1;
          if(shi==0&&ge==0)
          D=0x00;
          else D=shuma[ge];
          delayms(2);
          E1=1;E0=0;
          if(shi==0)
          D=0x00;
          else D=shuma[shi];
          delayms(2);
          D=0x00;
          delayms(2);
          }
          void main(void)
          {
          int temp,num=0;
          ADCON1=0X06; //所有IO均為數(shù)字口,模擬量輸入禁止
          TRISB=0X0f;
          TRISD=0x00;
          TRISE=0x00;
          TRISC=0x00;
          while(1)
          {
          temp=keyscan();
          switch(temp)
          {
          case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 13:case 14:case 15:case 16:num=temp;C7=1;break;
          default:C7=0;break;
          }
          display(num);
          }
          }
          利用一個I/O口的輸入輸出變化,有點(diǎn)類似動態(tài)掃描,輪流檢測每一行是否有按鍵按下
          效果:按下一個鍵,在數(shù)碼管上顯示該鍵的數(shù)字


          評論


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