本帖最后由 wrnb11 于 2016-7-30 22:10 编辑
我用的是正点原子的探索者开发板,实验功能是这样的:
什么按键都不按,只有绿灯亮,按了(按一下)KEY_UP后红灯亮,绿灯灭,蜂鸣器响并保持这个状态,直到按了KEY0后恢复初始状态(只有绿灯亮)。
但现在按了KEY_UP后,经常会出现红灯灭、绿灯亮、蜂鸣器响的问题(按着KEY_UP不放能正常运行),如果再按一下KEY_UP又可以正常运行(有时候也需要按几下)。
我把KEY_UP换成KEY1后解决了这个问题,但我想知道为什么用KEY_UP就会出现上述的问题,请各位大神帮帮小弟,谢谢了!
程序如下:
main.c:
#include"stm32f4xx.h"
#include"led.h"
#include"beep.h"
#include"delay.h"
#include"key.h"
int main(void)
{
beep_init();
led_Init();
delay_init(168);
key_init();
while(1)
{
GPIO_SetBits(GPIOF,GPIO_Pin_9);
GPIO_ResetBits(GPIOF,GPIO_Pin_10);
key_scan1();
key_scan();
if(key_scan1())
while(!key_scan());
}
}
key.c:
u8 key_scan(void) //1
{
hjc=0;
if(key0==0)
{
delay_ms(1);
if(key0==0)
{
GPIO_ResetBits(GPIOF,GPIO_Pin_10);
GPIO_SetBits(GPIOF,GPIO_Pin_9);
GPIO_ResetBits(GPIOF,GPIO_Pin_8);
hjc=1;
}
while(!key0);
delay_ms(10);
while(!key0);
}
return hjc;
}
u8 key_scan1(void) //2
{
hfz=0;
if(key_up==1)
{
delay_ms(1);
if(key_up==1)
{
GPIO_ResetBits(GPIOF,GPIO_Pin_9);
GPIO_SetBits(GPIOF,GPIO_Pin_10);
GPIO_SetBits(GPIOF,GPIO_Pin_8);
hfz=1;
}
while(key_up);
delay_ms(10);
while(key_up);
}
return hfz;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
改了延时还是不行,不过还是要谢谢你的回答。
一周热门 更多>