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 .
}
文章评论(0条评论)
登录后参与讨论