如何在 Proteus 中处理带有中断的指令
How handle directions with interrupt in Proteus
我想用 Atmega16 实现 Snake 游戏我遵循 this tutorial. My problem is I couldnt handle the KeyPad ! I found another tutorial (here) 关于一个带中断的按钮但是在 Snake 中我们需要 4 个按钮来指示方向而且我不知道如何在 Proteus 中处理这个?
我们有 3 个外部中断和 4 个按钮我不知道该怎么做:(
非常感谢任何帮助
已编辑:
这是我最后一次尝试,但现在它不检测方向并且总是在我的中断中进入 if 语句的第一个条件而不检查其他条件
主要 :
void main()
{
TCCR0=0X01;
DDRC=0XFF;
DDRB=0XFF;
DDRD|=(1<<PD0)|(1<<PD1)|(1<<PD7);
DDRD&=~((1<<PD2)|(1<<PD3)|(1<<PD4)|(1<<PD5)|(1<<PD6));
DDRA=0xFF;
pos=1;
position();
right();
while(1)
{
no_inp();
init_interrupts();
}
}
这里是我的插话:
ISR (INT0_vect){
sss=0;
if((PIND&(1<<PIND3))&& status!=3)
{
right();
status=1;
}
else if((PIND&(1<<PIND4))&& status!=4)
{
up();
status=2;
}
else if((PIND&(1<<PIND5))&& status!=1)
{
left();
status=3;
}
else if((PIND&(1<<PIND6))&& status!=2)
{
down();
status=4;
}
else
{
no_inp();
}
}
您总是以第一种情况结束,因为您对按钮使用 "active low" 逻辑,但您检查该位是否为高电平。但是,当未按下时,您的按钮输入被拉高。因此,只需反转您的 if 条件并检查相应的引脚是否为低电平(实际按下)。
我想用 Atmega16 实现 Snake 游戏我遵循 this tutorial. My problem is I couldnt handle the KeyPad ! I found another tutorial (here) 关于一个带中断的按钮但是在 Snake 中我们需要 4 个按钮来指示方向而且我不知道如何在 Proteus 中处理这个? 我们有 3 个外部中断和 4 个按钮我不知道该怎么做:(
非常感谢任何帮助
已编辑:
这是我最后一次尝试,但现在它不检测方向并且总是在我的中断中进入 if 语句的第一个条件而不检查其他条件
主要 :
void main()
{
TCCR0=0X01;
DDRC=0XFF;
DDRB=0XFF;
DDRD|=(1<<PD0)|(1<<PD1)|(1<<PD7);
DDRD&=~((1<<PD2)|(1<<PD3)|(1<<PD4)|(1<<PD5)|(1<<PD6));
DDRA=0xFF;
pos=1;
position();
right();
while(1)
{
no_inp();
init_interrupts();
}
}
这里是我的插话:
ISR (INT0_vect){
sss=0;
if((PIND&(1<<PIND3))&& status!=3)
{
right();
status=1;
}
else if((PIND&(1<<PIND4))&& status!=4)
{
up();
status=2;
}
else if((PIND&(1<<PIND5))&& status!=1)
{
left();
status=3;
}
else if((PIND&(1<<PIND6))&& status!=2)
{
down();
status=4;
}
else
{
no_inp();
}
}
您总是以第一种情况结束,因为您对按钮使用 "active low" 逻辑,但您检查该位是否为高电平。但是,当未按下时,您的按钮输入被拉高。因此,只需反转您的 if 条件并检查相应的引脚是否为低电平(实际按下)。