这是一个矩阵键盘按键的主函数
红色部分为判断按键式否松开,但其中定义PORTB=0xf0;但是无论怎么样while(PINB!=0xf0);括号里的一定不成立,那这个判断按键是否松开的演示函数不就没用了啊啊!!!
//读键盘值 键盘在端口B
uchar key_value()
{
uchar tem1,tem2,rem,i;
rem=0; //不清零会返回一个不可预知的值
DDRB=0xf0; //B口高四位输出 低四位输入
PORTB=0x0f; //输入有上拉电阻 输出低电平
s_ms(1);
tem1=PINB; //读取端口B
tem1=tem1&0x0f;
if(tem1!=0x0f) //判断是否有键被按下
{
s_ms(200); //延时
tem2=PINB; //读取端口B
tem2=tem2&0x0f;
if(tem1==tem2) //判断是否为干扰
{
DDRB=0x0f; //B口高四位输入 低四位输出
PORTB=0xf0; //反相输出
s_ms(50); //换向后要延时
rem=PINB; //读取端口B
rem=rem&0xf0; //取高四位
rem=rem+tem1; //合并
rem=~rem;
do //判断按键是否被释放
{
PORTB=0xf0;
s_ms(200);
}while(PINB!=0xf0);
}
return(rem);
}
|