專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

一個(gè)改進(jìn)型的4*4矩陣鍵盤掃描----用了SWITCH CASE 嵌套之后程序循序簡(jiǎn)潔了好多

作者:李俊軒   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2013年07月18日   【字體:

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar temp,num,bai,shi,ge;
uchar key[]={0x3f,0x5f,0x6f};
uchar code table[]=
{
0x3f , 0x06 , 0x5b ,
0x4f , 0x66 , 0x6d ,
0x7d , 0x07 , 0x7f ,
0x6f };
void keyscan();
void delay(uchar z);
void dsp(uchar bai,uchar shi,uchar ge);
void main()

 while(1)
 {
    keyscan(); 
    dsp(bai,shi,ge);
 }
}
void delay(uchar z)
{
 uchar x,y;
 for(x=100;x--;x>0)
  for(y=z;y--;y>0);
}
void dsp(uchar bai,uchar shi,uchar ge)
{
  
   bai=num/100;
   shi=num%100/10;
   ge=num%10;
   
   P0=0xfb;
   P2=table[bai];
   delay(1);
   P0=0xfd;
   P2=table[shi];
   delay(1);
   P0=0xfe;
   P2=table[ge];
   delay(1);
}
void keyscan()
{   uchar i;
 for(i=0;i<3;i++)
   {
     P1=key[i];
     temp=P1;
     temp&=0x0f;
     if(temp!=0x0f) //如果有鍵按下
     {
      delay(5);
   temp=P1;
      temp&=0x0f;
   if(temp!=0x0f)//確實(shí)有鍵按下
    {
     switch(temp)
     {
      case 0x07:switch(i)
          {
            case 0:num=1;break;
            case 1:num=5;break;
            case 2:num=9;break;
          };
      
      break;
 
      case 0x0b:switch(i)
          {
            case 0:num=2;break;
            case 1:num=6;break;
            case 2:num=10;break;
          };
      break;
 
      case 0x0d:switch(i)
          {
            case 0:num=3;break;
            case 1:num=7;break;
            case 2:num=11;break;
          };
      break;
 
      case 0x0e:switch(i)
          {
            case 0:num=4;break;
            case 1:num=8;break;
            case 2:num=12;break;
          };;
      break;
 
      while(temp!=0xf0) //松開手后就跳出循環(huán),否則等待松手
      {
      temp=P1;
      temp=temp&0xf0;
      dsp(bai,shi,ge);
      }
     }
        
    }
     }
   }
}  

關(guān)閉窗口

相關(guān)文章