中级会员
 
- 积分
- 379
- 金钱
- 379
- 注册时间
- 2015-1-2
- 在线时间
- 74 小时
|
5金钱
while(1)
{
if(flag0==1)
{
flag0=0;
LED0_ON;
delay_ms(300);
LED0_OFF;
delay_ms(300);
LED0_ON;
delay_ms(300);
LED0_OFF;
delay_ms(300);
}
if(flag1==1)
{
flag1=0;
LED1_ON;
delay_ms(300);
LED1_OFF;
delay_ms(300);
LED1_ON;
delay_ms(300);
LED1_OFF;
delay_ms(300);
}
}
void EXTI2_IRQHandler(void)
{
delay_ms(10);//????
if(KEY1==0) //°??üKEY2
{
flag0=1;
}
EXTI-> R=1<<2; //????LINE2????????±ê????
}
void EXTI3_IRQHandler(void)
{
delay_ms(10);
if(KEY2==0)
{
flag1=1;
}
EXTI-> R=1<<3;
}
中断函数中置位flag0和flag1,在主函数中判断,若为1则LED闪烁3次,不知道为什么实际只闪烁一次。
另外,如果在exti.c中定义__IO uint8_t flag0=0,flag1=0
在主函数中定义extern __IO uint8_t flag0=0,flag1=0
编译的时候提示重复定义,我实在是纠结,还请高人指点
|
最佳答案
查看完整内容[请看2#楼]
1,你这程序是1.2秒闪烁两次啊,注意一下是两次,还是一次,
2,extern __IO uint8_t flag0=0,flag1=0这句是有问题的,C语言多看一下!在exti.c中定义__IO uint8_t flag0=0,flag1=0已经赋值了,这里只能声明而不能再赋值了,你赋值了,所以 编译的时候提示重复定义,
|