|
我用AVR—stdio单步仿真书中例9.3简单电话拨号键盘的程序,发现一个问题,在下面这段程序中(只是扫描矩阵键盘的一部分)
unsigned char read_keyboard()
{
static unsigned char key_state = 0, key_value, key_line;
unsigned char key_return = No_key,i;
switch (key_state)
{
case 0:
key_line = 0b00001000;
for (i=1; i<=4; i++) // 扫描键盘
{
PORTD = ~key_line; // 输出行线电平
PORTD = ~key_line; // 必须送2次!!!
key_value = Key_mask & PIND; // 读列电平
if (key_value == Key_mask)
key_line <<= 1; // 没有按键,继续扫描
else
{
key_state++; // 有按键,停止扫描
break; // 转消抖确认状态
}
}
break;
在没有任何按键按下的情况下,执行完key_value = Key_mask & PIND;这条命令后,key_value 并不等于 Key_mask,所以key_line <<= 1并不会执行,会执行else里面的语句,我发现此时PIND的值是0b11111000,可是在初始化时,PORTD=0XFF,DDRD=0XF8,也就是低3位输入,并且带内部上拉,那为什么PIND的低三位还是0呢?请马老师解答一下 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|