|
void main(void)//主函数
{
unsigned char key, j ,k, s;
wei1=0;
wei2=0;
wei3=0;
wei4=0;
wei5=0;
wei6=0; //初始化位选,只让最后一位数码管显示
while(1)
{
if(key_certain()== 1) //确定键被按下后,扫描是那个键被按下
{
P1=0xfe; //送第一行为低电平
k=0xfe; //保留这次扫描数值,备移位用
for(j=0;j<4;j++) //四次扫描处理
{
s=P1&0xf0; //屏蔽低四位,取高四位,根据s数值确定那一列,根据扫描的j行确定行数,
switch(s)
{
case 0xe0: key=4*j+0; break; //第1列
case 0xd0: key=4*j+1; break; //第2列
case 0xb0: key=4*j+2; break; //第3列
case 0x70: key=4*j+3; break; //第4列
default: break;
}
k=(k<<1)|0x01; //循环扫描,
P1=k; //每次仅向一行送0扫描
}//for
}//
P0=tab[key]; //数据送数码管显示数据口
wei1=1; //选中片选
delay(10);
}//while
}
|
|