AVR就改了个口,程序就执行不鸟了,怎么回事
时间:10-02
整理:3721RD
点击:
我PA0为按键时能正常执行,但把按键改为PA1后,就不行了,怎么会时。还有,我这个程序现实中实际上是控制电磁阀,但PA0根本没控制到电磁阀,电磁阀的指示灯都没亮。
正常程序如下://只用到了PA0,没用到PA1
#include <iom128v.h>
#include <macros.h>
#define uchar unsigned char
#define uint unsigned int
uchar i=0;
void delay(uint ms)
{
uint a,j;
for(a=0;a<ms;a++)
for(j=0;j<1140;j++);
}
uchar key_press()
{
if((PINA&BIT(PA0))==0)
{return 1;}
if((PINA&BIT(PA0))==1)
{return 0;}
}
void key_scan()
{
delay(20);
if(key_press())
{
i++;
switch(i)
{
case 1:PORTA|=BIT(PA2);break;
case 2:PORTA&=~BIT(PA3);
PORTA&=~BIT(PA4);break;
case 3:PORTA|=BIT(PA3);break;
case 4:PORTA|=BIT(PA4);break;
case 5:PORTA&=~BIT(PA2);i=0;break;
}
while(key_press()==1);
delay(20);
}
}
main()
{uchar j;
DDRA=0X1C;//
PORTA=0X1B;
while(1)
{
key_scan();
}
}
修改PA0为PA1://此时PA1用,PA0闲着
uchar key_press()//修改部分,其他没变
{
if((PINA&BIT(PA0))==0)
{return 1;}
if((PINA&BIT(PA0))==1)
{return 0;}
}
正常程序如下://只用到了PA0,没用到PA1
#include <iom128v.h>
#include <macros.h>
#define uchar unsigned char
#define uint unsigned int
uchar i=0;
void delay(uint ms)
{
uint a,j;
for(a=0;a<ms;a++)
for(j=0;j<1140;j++);
}
uchar key_press()
{
if((PINA&BIT(PA0))==0)
{return 1;}
if((PINA&BIT(PA0))==1)
{return 0;}
}
void key_scan()
{
delay(20);
if(key_press())
{
i++;
switch(i)
{
case 1:PORTA|=BIT(PA2);break;
case 2:PORTA&=~BIT(PA3);
PORTA&=~BIT(PA4);break;
case 3:PORTA|=BIT(PA3);break;
case 4:PORTA|=BIT(PA4);break;
case 5:PORTA&=~BIT(PA2);i=0;break;
}
while(key_press()==1);
delay(20);
}
}
main()
{uchar j;
DDRA=0X1C;//
PORTA=0X1B;
while(1)
{
key_scan();
}
}
修改PA0为PA1://此时PA1用,PA0闲着
uchar key_press()//修改部分,其他没变
{
if((PINA&BIT(PA0))==0)
{return 1;}
if((PINA&BIT(PA0))==1)
{return 0;}
}
不正常时,PA1
正常时,PA0
有图,来真相,求相助
不正常的情况是这样的,我一通电,还没安按键,灯就开始亮起走了,按一下PA1,灯就停了,截屏图片没搞好,我重发点
下面是我重发的不正常图
不正常2