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

📄 矩阵键盘扫描1.c

📁 51单片机试验板-sch-pcb-4.0M.zip
💻 C
字号:
#include<reg51.h>
#include<intrins.h>

#define uchar unsigned char
#define uint  unsigned int

sbit LE1=P2^7;
sbit A=P2^0;
sbit BB=P2^1;
sbit C=P2^2;

sbit beep=P2^6;


uchar code table[]={0x3f,0x06,0x5b,0x4f, 
                    0x66,0x6d,0x7d,0x07, 
                    0x7f,0x6f,0x77,0x7c,                   		           					 
 		            0x39,0x5e,0x79,0x71,0x00};
uchar temp,keynum,Flag;
void display(void);
void Init(void);
uchar Keyscan();
void Speak(void);

void delay_50us(uint t)
{
   uchar j;
   for(;t>0;t--) 
    for(j=19;j>0;j--);
}



void main(void)
{
    Init();
    P0=0x00;
    LE1=0;
    while(1)
    {
      
      if( Flag==1)
        Speak();
      display();

    }
}


void Init(void)
{
   P1=0xff;
   P2=0xff;
   P3=0xff;
   P0=0xff;
   keynum=0;
   beep=1;
   Flag=0;
}

void Speak(void)
{
  beep=~beep;
  delay_50us(100);
  delay_50us(100);
  beep=1;
}

uchar Keyscan()
{
   uchar keynum;
   temp=0xfe;
   P3=temp;
   if((P3&0xf0)!=0xf0)  
     {
       delay_50us(100);
       if((P3&0xf0)!=0xf0) 
         {
           Flag=1;
            switch(P3)
             {
               case 0xee:keynum=12;break;
               case 0xde:keynum=9;break;
               case 0xbe:keynum=5;break;
               case 0x7e:keynum=1;break;
             }

         }
     }

    temp=0xfd;
    P3=temp;
   if((P3&0xf0)!=0xf0)  
     {
       delay_50us(100);
       if((P3&0xf0)!=0xf0) 
         {   Flag=1;
            switch(P3)
             {
               case 0xed:keynum=13;break;
               case 0xdd:keynum=0;break;
               case 0xbd:keynum=6;break;
               case 0x7d:keynum=2;break;
             }

         }
     }

    temp=0xfb;
    P3=temp;
      if((P3&0xf0)!=0xf0)  
     {
       delay_50us(100);
       if((P3&0xf0)!=0xf0) 
         {   Flag=1;
            switch(P3)
             {
               case 0xeb:keynum=14;break;
               case 0xdb:keynum=10;break;
               case 0xbb:keynum=7;break;
               case 0x7b:keynum=3;break;
             }

         }
     } 

   temp=0xf7;
   P3=temp;
      if((P3&0xf0)!=0xf0)  
     {
       delay_50us(100);
       if((P3&0xf0)!=0xf0) 
         {  Flag=1;
            switch(P3)
             { 
               case 0xe7:keynum=15;break;
               case 0xd7:keynum=11;break;
               case 0xb7:keynum=8;break;
               case 0x77:keynum=4;break;
             }

         }
     }
  return(keynum);
}


void display(void)
{
   Flag=0;
   LE1=1;//选通hc573
 //分别依次选通数码管的位选端
   A=0;
   BB=0;
   C=0;
   P0=table[Keyscan()];
delay_50us(10);
   A=1;
   BB=0;
   C=0;
   P0=table[Keyscan()];
 delay_50us(10);
   A=0;
   BB=1;
   C=0;
   P0=table[Keyscan()];
 delay_50us(10);  
   A=1;
   BB=1;
   C=0;
   P0=table[Keyscan()];
delay_50us(10);
   A=0;
   BB=0;
   C=1;
   P0=table[Keyscan()];
delay_50us(10);
   A=1;
   BB=0;
   C=1;
   P0=table[Keyscan()];
delay_50us(10);
   A=0;
   BB=1;
   C=1;
   P0=table[Keyscan()];
delay_50us(10);
   A=1;
   BB=1;
   C=1;
   P0=table[Keyscan()];
delay_50us(10);
P0=0x00;
LE1=0;

}

⌨️ 快捷键说明

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