新手入门
- 积分
- 15
- 金钱
- 15
- 注册时间
- 2018-10-11
- 在线时间
- 14 小时
|
本帖最后由 李赖赖无敌手 于 2020-4-19 23:30 编辑
在这里求助一下,希望原子哥能解答一下。借用原子的红外遥控实验例程改的,改动很小。这是主程序: int main(void)
{
u8 key;
u8 t=0;
u8 *str=0;
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
uart_init(115200); //串口初始化为115200
LED_Init(); //LED端口初始化
KEY_Init();
Remote_Init(); //红外接收初始化
while(1)
{
key=Remote_Scan();
if(key)
{
switch(key)
{
case 34:str="LEFT";Motor_break();break;
}
}
}
}
//*************************//
void Motor_break(void)
{
int i=0;
for(i=999;i>=0;i--)
{
printf("\r\n i= %d\n",i);
}
}
发现个问题啊,我按下一次LEFT键之后,Motor_break()这个函数会执行两次。好崩溃啊,搞了一晚上没做出来。同样的程序,我把这个移植到按键的那个例程,
int main (void)
{
int key;
LED_Init();
delay_init();
KEY_Init();
BEEP_Init();
uart_init(115200);
while(1)
{
key=Key_Scan();
if(key)
{
switch(key)
{
case KEY0_PRES:
Motor_break();break;
case KEY1_PRES:
GPIO_ResetBits(GPIOE,GPIO_Pin_5);break;
case WKUP_PRES:
GPIO_SetBits(GPIOB,GPIO_Pin_8);break;
}
}
}
}
这个例子里面Motor_break()就只执行一次。有没有大神可以解答一下,不胜感激,因为要用这个做毕设,有点麻烦了。因为需要红外遥控。哎
|
|