野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15491|回复: 5

火哥,求教扫描中断

[复制链接]
发表于 2015-11-27 13:29:22 | 显示全部楼层 |阅读模式
附程序,就是我这个KEY2放在哪个位置,能把LED1,LED2,LED3同时关闭,如果现在不能同时灭3LED,该怎么改!菜鸟求火哥罩下,各位大大求指教 程序.jpg
程序.jpg
回复

使用道具 举报

 楼主| 发表于 2015-11-27 13:30:29 | 显示全部楼层
KEY2_ON定义为1
回复 支持 反对

使用道具 举报

发表于 2015-11-27 13:45:17 | 显示全部楼层
具体要看keyscanf函数是怎么写的。

或者不要用keyscanf函数,直接根据引脚的电平来判断是否按下就行了,按下的时候你就对LED灯做相应的操作。

程序可行了你再把消抖加上就好
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-27 14:31:56 | 显示全部楼层
flyleaf 发表于 2015-11-27 13:45
具体要看keyscanf函数是怎么写的。

或者不要用keyscanf函数,直接根据引脚的电平来判断是否按下就行了, ...

#include "key.h"

static void KEY_Delay(u32 nKEY)
{
  for(;nKEY !=0;nKEY--);
}


void LED_KEY1_Config(void)
{
/*¶¨òåÃûÎaGPIO_InitStructμĽá11ìå*/
GPIO_InitTypeDef  GPIO_InitStruct;
/*ê1ÄüGPIOBoíGPIOCμÄê±Öó*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
       
/*Ñ¡ÔñGPIOBÖDGPIO_PinμÄòy½Å0*/
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0;
/*Ñ¡ÔñGPIOBÖDGPIO_ModeμÄÄ£ê½íÆíìêä3ö*/
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;
/*3õê¼»ˉGPIOAμÄ2Îêy*/
GPIO_Init(GPIOA,&GPIO_InitStruct);

}

void LED_KEY2_Config(void)
{
/*¶¨òåÃûÎaGPIO_InitStructμĽá11ìå*/
GPIO_InitTypeDef  GPIO_InitStruct;
/*ê1ÄüGPIOBoíGPIOCμÄê±Öó*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

/*Ñ¡ÔñGPIOCÖDGPIO_PinμÄòy½Å13*/
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_13;
/*Ñ¡ÔñGPIOBÖDGPIO_ModeμÄÄ£ê½íÆíìêä3ö*/
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;
/*3õê¼»ˉGPIOCμÄ2Îêy*/
GPIO_Init(GPIOC,&GPIO_InitStruct);

}

void LED_KEY_Config(void)
{
  LED_KEY1_Config();
        LED_KEY2_Config();

}

u8 KEY1_Scan(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
        if (GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)==KEY1_ON)
   {
        KEY_Delay(10000);
                 if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)==KEY1_ON)
                 {
                         while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)==KEY1_ON);
                         return KEY1_ON;
     }
     else
                 return KEY1_OFF;
                }
    else
    return KEY1_OFF;
               
}
u8 KEY2_Scan(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
        if (GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)==KEY2_ON)
   {
        KEY_Delay(10000);
                 if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)==KEY2_ON)
                 {
                         while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)==KEY2_ON);
                         return KEY2_ON;
     }
     else
                 return KEY2_OFF;
                }
    else
    return KEY2_OFF;
               
}

void KEY_Scan(void)
{
  u8 KEY1_Scan(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
  u8 KEY2_Scan(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-27 14:36:34 | 显示全部楼层
ai602683692 发表于 2015-11-27 14:31
#include "key.h"

static void KEY_Delay(u32 nKEY)

思路是:按下KEY1让LED1亮,LED1亮后LED2、LED3闪烁,当按下KEY2后,LED1-LED3都灭,现在按下KEY2没反应,把while(GPIO_ReadOutputDataBit( GPIOB, GPIO_Pin_0)==0)
                 {
     
                         LED2(ON);
       LED_Delay(0X0FFFFF);
                         LED2(OFF);
                         
       LED3(ON);
                         LED_Delay(0X0FFFFF);
                         LED3(OFF);
                       
                        }          去掉后换成LED2(ON);LED3(ON);KEY2才管用
回复 支持 反对

使用道具 举报

发表于 2015-11-28 08:46:05 | 显示全部楼层
板子的key按键不是接到pb0的吧,你看看原理图,并且看看按键按下的时候是高电平还是低电平
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-6 00:53 , Processed in 0.048201 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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