野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10855|回复: 10

stm32按键

[复制链接]
发表于 2015-11-11 16:43:59 | 显示全部楼层 |阅读模式
if( Key_Scan(GPIOA,GPIO_Pin_0,1) == KEY_ON ) // KEY1
                {
                        /*LED1·′×a*/
                        LED1_TOGGLE;
                }

                else if( Key_Scan(GPIOC,GPIO_Pin_13,0) == KEY_ON ) // KEY2
                {
                        /*LED2·′×a*/
                        LED2_TOGGLE;
                }   
为什么只有一个按键可以反应

回复

使用道具 举报

发表于 2015-11-11 16:50:54 | 显示全部楼层
自己重写key_scan函数吧,因为按下时一个高电平,一个低电平,key_scan函数对这个支持不友好,使用条件太苛刻,容易卡死
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-11 18:09:14 | 显示全部楼层
flyleaf 发表于 2015-11-11 16:50
自己重写key_scan函数吧,因为按下时一个高电平,一个低电平,key_scan函数对这个支持不友好,使用条件太苛 ...

uint8_t Key_Scan(GPIO_TypeDef* GPIOx,u16 GPIO_Pin)//,uint8_t Down_state)
{                       
        /*¼ì2aêÇ·ñóD°′¼ü°′Ï */
        if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)==KEY_ON)// == Down_state )
        {          
                /*Ñóê±Ïû¶¶*/
                Key_Delay(10000);               
                if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)==KEY_ON)// == Down_state )  
                {         
                        /*μè′y°′¼üêí·Å */
                        while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)==KEY_ON) //== Down_state);   
                        return         KEY_ON;         
                }
                else
                        return KEY_OFF;
        }
        else
                return KEY_OFF;
}

/*-----------------------------------------------------------------*/
void Key_Test(void)
{
  /* config the led */
        LED_GPIO_Config();
        LED1_ON;
  LED2_ON;

        /*config key*/
        Key1_GPIO_Config();
  Key2_GPIO_Config();       
       
        while(1)                           
        {          
                if( Key_Scan(GPIOA,GPIO_Pin_0) == KEY_ON ) // KEY1
                {
                        /*LED1·′×a*/
                        LED1_TOGGLE;
                }
   
                else if( Key_Scan(GPIOC,GPIO_Pin_13) == KEY_ON ) // KEY2
                {
                        /*LED2·′×a*/
                        LED2_TOGGLE;
                }   
        }
}


我重写成这样后,按键反应有时不灵敏,要按好几次才有效果,不知道什么原因,请指教
回复 支持 反对

使用道具 举报

发表于 2015-11-12 08:42:57 | 显示全部楼层
201411612104 发表于 2015-11-11 18:09
uint8_t Key_Scan(GPIO_TypeDef* GPIOx,u16 GPIO_Pin)//,uint8_t Down_state)
{                       
        /*¼ì2aê&#1 ...

用这个试试吧

5、POLLING-按键.zip

315.52 KB, 下载次数: 26

回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-12 14:30:29 | 显示全部楼层

谢谢你的帮助,可是为什么按键一点反应都没有呀?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-12 14:42:29 | 显示全部楼层

刚刚说错了,应该说只有按键2有效果
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-12 16:44:29 | 显示全部楼层
火哥,你好!为什么你的mini的例程里的PA0按键这个程序也是没有反应呀???但是PC13那个就有,而如果两个按键合在一起用的时候PC13也没有反应,这是为什么??

6、EXIT-按键.rar

585.6 KB, 下载次数: 16

回复 支持 反对

使用道具 举报

发表于 2015-11-12 17:55:23 | 显示全部楼层
201411612104 发表于 2015-11-12 14:30
谢谢你的帮助,可是为什么按键一点反应都没有呀?

这个是ISO大板的,你要用到MINI需要自己改下引脚的定义
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-12 20:09:17 | 显示全部楼层
野草 发表于 2015-11-12 17:55
这个是ISO大板的,你要用到MINI需要自己改下引脚的定义

我改过了,就只有按键2可以

  1. #define             macLED1_GPIO_APBxClock_FUN              RCC_APB2PeriphClockCmd
  2. #define             macLED1_GPIO_CLK                        RCC_APB2Periph_GPIOB
  3. #define             macLED1_GPIO_PORT                       GPIOB
  4. #define             macLED1_GPIO_PIN                        GPIO_Pin_0

  5. #define             macLED2_GPIO_APBxClock_FUN              RCC_APB2PeriphClockCmd
  6. #define             macLED2_GPIO_CLK                        RCC_APB2Periph_GPIOC
  7. #define             macLED2_GPIO_PORT                       GPIOC
  8. #define             macLED2_GPIO_PIN                        GPIO_Pin_4

  9. #define             macLED3_GPIO_APBxClock_FUN              RCC_APB2PeriphClockCmd
  10. #define             macLED3_GPIO_CLK                        RCC_APB2Periph_GPIOC
  11. #define             macLED3_GPIO_PORT                       GPIOC
  12. #define             macLED3_GPIO_PIN                        GPIO_Pin_3
复制代码


回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-12 21:48:08 | 显示全部楼层

非常感谢我知道问题在哪了,mini的板按键的GPIO都要设为上拉模式
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-12 23:46:04 | 显示全部楼层
野草 发表于 2015-11-12 17:55
这个是ISO大板的,你要用到MINI需要自己改下引脚的定义

请问,一个按键怎么按多次实现多种功能?
查百度资料为
用定时器中断去扫描按键所在IO口的电平,进行计次处理。
1)在不放开按键的情况下连续显示,
此种情况下,次数会被不断累加。你可以每累加一定的基数后,置显示标记,进行显示程序调用。
2)而按一下,则显示一次。当检测到松开时,次数重置。只要保证按下的时长在一定的基数内,就可以实现。
(置显示标记,进行显示程序调)

但是不太懂他的意思,求指教
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 18:28 , Processed in 0.041571 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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