本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要 登录 才可以下载或查看,没有账号?注册会员
×
while(flag==0) //一旦有按键,跳出该函数,flag在keyscan函数里,初始为0
{
we0=0;//数码管动态显示,we为位选,38译码器000亮第一个灯,001亮第二个
we1=0;
we2=0;
P0=tab[num1];
delay(300);
we0=1;
we1=0;
we2=0;
P0=tab[num2];
delay(300);
num1=keyscan();
}
为什么这句话在数码管显示的时候会出现全为num2的值呢?本来应该两个数码管一个显示num1另一个显示num2的
unsigned char keyscan()
{
uchar code keycode[]={0x7e,0x7d,0x7b,0x77,0xbe,0xbd,0xbb,0xb7,0xde,0xdd};//键盘表,定义10个按键的行列组合值
uchar cord_h,cord_l,temp,i; //定义变量行、列、返回值、循环变量
P3=0x0f; //行线输出全为0
cord_h=P3&0x0f; //读入列线值
if(cord_h!=0x0f) //先检测有无按键按下
{
delay(20);
if(cord_h!=0x0f)
{
flag++; //有按键加1
cord_h=P3&0x0f; //读入列线值
P3=cord_h|0xf0; //输出当前列线值
cord_l=P3&0xf0; //读入行线值
temp=cord_h+cord_l;//键盘最后组合码值
for(i=0;i<10;i++)
{
if(temp==keycode[i])
{
k=i;
break;
}
}
}
//等待按键释放
}
return k; //返回键值
} |
|