【发布时间】:2017-08-28 11:32:23
【问题描述】:
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中模拟时会显示上述错误
【问题讨论】:
-
在我看来你应该得到几个good beginners books to read。
-
很不清楚你在问什么。什么是“不工作”?是什么行为?能举个例子吗?
-
while(..)是你在那里旋转的循环,if(..)是验证语句。您可以根据应用程序的需要决定需要执行的操作。 -
A minimal reproducible example 将有助于使这个问题变得更好。
标签: c microcontroller atmega avr-gcc