原创 键盘扫描的子程序

2008-8-29 14:43 2940 5 5 分类: MCU/ 嵌入式

sbit line1=P1^0;
sbit line2=P1^1;
sbit line3=P1^2;
sbit line4=P1^3;


uchar code c[]={0x3f,0x30,0x5b,0x4f,0x66,
                0x6d,0x7d,0x07,0x7f,0x67,
                0x77,0x7f,0x39,0x3f,0x79,
                0x71,0x00};//数码管共阳极


void delay(uint j)
{
 while(j--);
}
// 键盘延时子程序
void delay10ms()
{
 uchar i,j;
 for(i=0;i<10;i++)
  { 
   for(j=0;j<72;j++)
    {;}
  }
}


 // 键盘扫描子程序
unsigned char kbscan()
{
unsigned char sccode,recode;
unsigned char i;
for (i=0;i<5;i++)
{
if(i==0)
{ /*扫描第1行*/
P1 = 0xFF;
line1 = 0;// 发0行扫描。
line2 = 1;
line3 = 1;
line4 = 1;
sccode= P1;
sccode&= 0xFE;
//本行有键按下
if(sccode != 0xFE)
{
   delay10ms();
   sccode = P1;
   sccode&=0xFE;
   if(sccode !=0xFE)
   {
    sccode="P1";
    sccode&=0xFE;
  
    switch(sccode)
    {
     case 0x7E:
     recode="0";break;
     case 0xBE:
     recode="1";break;
     case 0xDE:
     recode="2";break;
     case 0xEE:
     recode="3";break;
     default:
     break;
    }
   return(recode);
   }
}
}//end of if =0
else if (i == 1)
{
/*扫描第2行*/
P1 = 0xFF;
line1 = 1;// 发1行扫描。
line2 = 0;
line3 = 1;
line4 = 1;
sccode= P1;
sccode&= 0xFD;
//本行有键按下
if(sccode != 0xFD)
{
   delay10ms();
   sccode = P1;
   sccode&=0xFD;
   if(sccode !=0xFD)
   {
    sccode="P1";
    sccode&=0xFD;
  
    switch(sccode)
    {
     case 0x7D:
     recode="4";break;
     case 0xBD:
     recode="5";break;
     case 0xDD:
     recode="6";break;
     case 0xED:
     recode="7";break;
     default:
     break;
    }
   return(recode);
   }
}
} // end of if i =1;
else if (i ==2)
{ /*扫描第3行*/
P1 = 0xFF;
line1 = 1;// 发3行扫描。
line2 = 1;
line3 = 0;
line4 = 1;
sccode= P1;
sccode&= 0xFB;
//本行有键按下
if(sccode != 0xFB)
{
   delay10ms();
   sccode = P1;
   sccode&=0xFB;
   if(sccode !=0xFB)
   {
    sccode="P1";
    sccode&=0xFB;
    switch(sccode)
    {
     case 0x7B:
     recode="8";break;
     case 0xBB:
     recode="9";break;
     case 0xDB:
     recode="10";break;
     case 0xEB:
     recode="11";break;
     default:
     break;
    }
    return(recode);
   }
}
} // end of if i ==2;
else if (i ==3)
{
/*扫描第4行*/
P1 = 0xFF;
line1 = 1;// 发4行扫描。
line2 = 1;
line3 = 1;
line4 = 0;
sccode= P1;
sccode&= 0xF7;
//本行有键按下
if(sccode != 0xF7)
{
   delay10ms();
   sccode = P1;
   sccode&=0xF7;
   if(sccode !=0xF7)
   {
    sccode="P1";
    sccode&=0xF7;
  
    switch(sccode)
    {
     case 0x77:
     recode="12";break;
     case 0xB7:
     recode="13";break;
     case 0xD7:
     recode="14";break;
     case 0xE7:
     recode="15";break;
     default:
     break;
    }
    return(recode);
   }
}
} // end of if i =3;
else
{
  recode="16";
return(recode);//没有键被按下
}
}// end of for .
}

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
5
关闭 站长推荐上一条 /4 下一条