野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14023|回复: 4

按键程序只能停留在 Key_Scan的位置,按键下去后无法进入下面的程序

[复制链接]
发表于 2015-5-6 15:11:14 | 显示全部楼层 |阅读模式
在做按键查询的时候,程序只能停在key_scan的位置,按键后也进不去下面的程序。

其中主程序是:
int main(void)
{
/* LED 端口初始化 */
led_config();  
  key_config();

while (1)
{
  GPIO_ResetBits(GPIOF, GPIO_Pin_7|GPIO_Pin_8);
  GPIO_ResetBits(GPIOB, GPIO_Pin_0);
if( Key_Scan(GPIOA,GPIO_Pin_0) == KEY_ON  )
  {//接下来程序进不去了
   GPIO_SetBits(GPIOB, GPIO_Pin_0);
   GPIO_SetBits(GPIOF, GPIO_Pin_7|GPIO_Pin_8);
  }
}
}

其中,key的所有程序如下:
#include"key.h"
void key_config()
{
GPIO_InitTypeDef GPIO_InitStructure;

/*开启按键端口(PA)的时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;

GPIO_Init(GPIOA, &GPIO_InitStructure);

}
uint8_t Key_Scan(GPIO_TypeDef* GPIOx,u16 GPIO_Pin)
{   
/*检测是否有按键按下 */
if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON )
{   
  /*延时消抖*/
  Delay(10000);  
  if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON )  
  {  
   /*等待按键释放 */
   while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON);   
   return  KEY_ON;  
  }
  else
   return KEY_OFF;
}
else
  return KEY_OFF;
}
static void Delay(__IO u32 nCount)
{
for(; nCount != 0; nCount--);
}

真心求大神帮助!
回复

使用道具 举报

发表于 2015-5-6 15:29:16 | 显示全部楼层
板子的KEY1和KEY2一个按下是高电平一个按下是低电平,要注意区分,看原理图来区分
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-5-7 09:05:13 | 显示全部楼层
我看了原理图,都是按下为低电平啊

key1和key2的按键图

key1和key2的按键图
回复 支持 反对

使用道具 举报

发表于 2015-5-7 09:35:33 | 显示全部楼层
不要用key_scanf函数,自己写一个看看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-5-7 10:11:54 | 显示全部楼层
啊,真的诶诶,成功了,太谢谢啦!!可是为什么用key_scan函数不能按键成功呢?key_scan是例子程序中拷贝过来的,用例子程序的时候按键又是有效的~~这是为啥啊??
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-6 19:44 , Processed in 0.040067 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表