C atmega16单端口签入while()循环或if()
Atmega16C atmega16单端口签入while()循环或if(),c,microcontroller,atmega,avr-gcc,C,Microcontroller,Atmega,Avr Gcc,Atmega16PORTC用于按钮,并重命名为 #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) 或 考虑因素是什么
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(正常)
或if(向上)
在函数中不工作
但是,通过函数将键值带到变量,我就可以检查它了。当我使用一个函数时,
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中模拟时会显示上述错误可能是您按下了键()代码>在内部执行去抖动,您不必担心
如果检查pin状态,当金属触点在很短的时间内反弹时,您可能会收到数十次或数百次假“按键”:
可能是您按下了键()代码>在内部执行去抖动,您不必担心
如果检查pin状态,当金属触点在很短的时间内反弹时,您可能会收到数十次或数百次假“按键”:
这是错误的优先顺序!=运算符的值高于&(按位and)运算符的值
我被用作
而(确定=1)
意思是
while (PINC & ((1 << 6) != 1))
while(PINC&(1这是错误的!=运算符的优先级高于&(按位and)运算符的优先级
我被用作
而(确定=1)
意思是
while (PINC & ((1 << 6) != 1))
while(PINC&((1)在我看来,你应该得到一些。你问的问题非常不清楚。什么是“不起作用”?行为是什么?你能举个例子吗?当(…)
你在那里旋转循环,如果(…)
是验证声明。您可以决定您需要对应用程序的需求执行什么。A将非常有助于使这个问题变得更好。在我看来,您应该获得一些。您所问的问题非常不清楚。什么是“不起作用”?行为是什么?您能举个例子吗?while(…)
是您在那里旋转的循环,if(…)
是验证语句。您可以决定根据应用程序的需要执行哪些操作。A将非常有助于改进此问题。而((PINC&(1)我现在不想更改端口,请说明如何针对0或false进行测试。在这种情况下,if(S_确定)
或如果(!S_OK)
或如果(S_OK==false)
或如果(S_OK==0)
。最后三个是相同的。而((PINC&(1)我现在不想更改端口,请说明如何针对0或false进行测试。在这种情况下如果(S_OK)
或如果(!S_OK)
或如果(S_OK==false)
(S_OK==0)
。最后三个是相同的。
while (PINC & ((1 << 6) != 1))
while ((PINC & (1 << 6)) != 1)
while ((PINC & (1 << 6)) != (1 << 6))
#define OK_S (PINC & (1 << 6))