⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 untitled.c

📁 4×4矩阵键盘检测
💻 C
字号:
#include <htc.h>
#include <pic18.h>
#define uchar unsigned char //--------------在程序中用uchar置换unsgned char减省录入量
#define uint unsigned int

#define FLASH_LED PORTD    //用FLASH_LED置换PORTD,方便以后移置。
#define LED_TRIS TRISD    //

void init(void);         //PIC芯片资源初始化函数
unsigned char  table[]={0x3f,0x06,0x5b,0x4f, 

                            0x66,0x6d,0x7d,0x07, 

                            0x7f,0x6f,0x77,0x7c, 

                            0x39,0x5e,0x79,0x71}; 

unsigned char temp; 

unsigned char key; 

unsigned char i,j; 


//--------------------------
void init(void)
{
   // ADCON1=0x0f;  
   TRISB=0x0F;      //定义端口B为低4位输出,高4位为输入
   TRISC=0x00;      //定义端口C为输出
   INTCON=0x00;     //关闭所有中断 

}
//---------------------------- 
void main(void) 

{ 
init();
PORTC=0x00;
  while(1) 

    { 
       
     // PORTB=0xFF; 

     //RB0=0; 
     PORTB=0xFE;

      temp=PORTB; 

      temp=temp & 0xf0; 

      if (temp!=0xf0) 

        { 

          for(i=50;i>0;i--) 

          for(j=200;j>0;j--); 

          temp=PORTB; 

          temp=temp & 0xf0; 

          if (temp!=0xf0) 

            { 

              temp=PORTB; 

             // temp=temp & 0xf0;              

              switch(temp) 

                { 

                  case 0xee: 

                    key=1; 

                    break; 

                  case 0xde: 

                    key=2; 

                    break; 

                  case 0xbe: 

                    key=3; 

                    break; 

                  case 0x7e: 

                    key=4; 

                    break; 

                } 


              temp=PORTB; 

             // RA0=~RA0; 

              PORTC=table[key]; 

              temp=temp & 0xf0;              

              //while(temp!=0x0f) 

               // { 

                 // temp=PORTB; 

                  //temp=temp & 0x0f;              

                //} 

            } 

        } 

  //****************扫描第二行

      PORTB=0xfd; 

     // RB1=0; 

      temp=PORTB; 

      temp=temp & 0xf0; 

      if (temp!=0xf0) 

        { 

          for(i=50;i>0;i--) 

          for(j=200;j>0;j--); 

         // temp=PORTB; 

          //temp=temp & 0xf0; 

          if (temp!=0xf0) 

            { 

              temp=PORTB; 

              temp=temp & 0x0f;              

              switch(temp) 

                { 

                  case 0xed: 

                    key=5; 

                    break; 

                  case 0xdd: 

                    key=6; 

                    break; 

                  case 0xbd: 

                    key=7; 

                    break; 

                  case 0x7d: 

                    key=8; 

                    break; 

                } 

              temp=PORTB; 

             // RA0=~RA0; 

              PORTC=table[key]; 

              temp=temp & 0x0f;              

             // while(temp!=0xf0) 

               // { 

                  //temp=PORTB; 

                 // temp=temp & 0xf0;              

               // } 

            } 

        } 

  
//××××××××××××××扫描第三行

      PORTB=0xfb; 

     // RB2=0; 

      temp=PORTB; 

      temp=temp & 0xf0; 

      if (temp!=0xf0) 

        { 

          for(i=50;i>0;i--) 

          for(j=200;j>0;j--); 

          temp=PORTB; 

          temp=temp & 0x0f; 

          if (temp!=0x0f) 

            { 

              temp=PORTB; 

              temp=temp & 0xf0;              

              switch(temp) 

                { 

                  case 0xeb: 

                    key=9; 

                    break; 

                  case 0xdb: 

                    key=10; 

                    break; 

                  case 0xbb: 

                    key=11; 

                    break; 

                  case 0x7b: 

                    key=12; 

                    break; 

                } 

              temp=PORTB; 

            //  RA0=~RA0; 

              PORTC=table[key]; 

              temp=temp & 0x0f;              

              //while(temp!=0x0f) 

               // { 

                //  temp=PORTB; 

                 // temp=temp & 0x0f;              

               // } 

            } 

        } 

  //**********扫描第四行

      PORTB=0xf7; 

     // RB3=0; 

      temp=PORTB; 

      temp=temp & 0xf0; 

      if (temp!=0xf0) 

        { 

          for(i=50;i>0;i--) 

          for(j=200;j>0;j--); 

          temp=PORTB; 

          temp=temp & 0xf0; 

          if (temp!=0xf0) 

            { 

              temp=PORTB; 

              temp=temp & 0x0f;              

              switch(temp) 

                { 

                  case 0xe7: 

                    key=13; 

                    break; 

                  case 0xd7: 

                    key=14; 

                    break; 

                  case 0xb7: 

                    key=15; 

                    break; 

                  case 0x77: 

                    key=16; 

                    break; 

                } 

              temp=PORTB; 

             // RA0=~RA0; 

              PORTC=table[key]; 

              temp=temp & 0x0f;              

              //while(temp!=0x0f) 

               // { 

                 // temp=PORTB; 

                 // temp=temp & 0x0f;              

               // } 

            } 

        } 

    } 

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -