Atmega16 PORTC
用于按钮,并重命名为
#define LEFT_S PINC&(1<<2)
#define RIGHT_S PINC&(1<<3)
#define UP_S PINC&(1<<4)
#define DOWN_S PINC&(1<<5)
#define OK_S PINC&(1<<6)
我试图把它放在像
这样的循环中while (OK_S);
或
if (UP_S);
考虑什么?
while (OK_S)
或if (UP_S)
无效。
但是通过函数将键值赋给变量,我可以检查它
当我使用函数ch = Key_pressed();
while(ch==1)
工作正常时。
int Key_pressed(void)
{
while(1) {
if (LEFT_S) { while (LEFT_S); return 1; }
if (RIGHT_S) { while (RIGHT_S); return 2; }
if (UP_S) { while (UP_S); return 3; }
if (DOWN_S) { while (DOWN_S); return 4; }
if (OK_S) { while (OK_S); return 5; }
}
}
在Proteus
中进行模拟时会显示上述错误答案 0 :(得分:1)
答案 1 :(得分:1)
错误的优先级!=运算符高于&amp; (按位和)运算符
我被用作
而(OK_S != 1)
它意味着
while (PINC & ((1 << 6) != 1))
到C编译器更喜欢像
这样的东西while ((PINC & (1 << 6)) != 1)
但正确的方法是
while ((PINC & (1 << 6)) != (1 << 6))
所以我将宏定义更正为
#define OK_S (PINC & (1 << 6))
工作正常。