野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10824|回复: 1

有关按键的问题,对应于14节位带操作

[复制链接]
发表于 2019-1-3 17:06:18 | 显示全部楼层 |阅读模式
我按照视频教程把代码写进去但是 按key1键的时候灯会亮灭,按key2键时候灯没反应,再按key1键时,就没反应了。源代码我给附上,跪求大佬解惑(补充:原文件时例程的 13-GPIO输入-按键检测)
**
  ******************************************************************************
  * @file    main.c
  * @author  fire
  * @version V1.0
  * @date    2013-xx-xx
  * @brief   测试按键
  ******************************************************************************
  * @attention
  *
  * 实验平台:野火 F103-指南者 STM32 开发板
  * 论坛    :http://www.firebbs.cn
  * 淘宝    :https://fire-stm32.taobao.com
  *
  ******************************************************************************
  */

#include "stm32f10x.h"
#include "bsp_led.h"  
#include "bsp_key.h"

/**
  * @brief  主函数
  * @param  无
  * @retval 无
  */
       
       
        #define GPIOB_ODR_Addr  GPIOB_BASE+0x0C
        #define Pbout(n) *(unsigned int*)((GPIOB_ODR_Addr & 0xF0000000)+0x02000000+((GPIOB_ODR_Addr & 0x00FFFFFF)<<5)+(n<<2))
        #define GPIOA_IDR_Addr  GPIOA_BASE+0x08
        #define Pain(n) *(unsigned int*)((GPIOA_IDR_Addr & 0xF0000000)+0x02000000+((GPIOA_IDR_Addr & 0x00FFFFFF)<<5)+(n<<2))
        #define GPIOC_IDR_Addr  GPIOC_BASE+0x08
        #define Pcin(n) *(unsigned int*)((GPIOC_IDR_Addr & 0xF0000000)+0x02000000+((GPIOC_IDR_Addr & 0x00FFFFFF)<<5)+(n<<2))
       
       
        void delay(uint32_t count)
        {
                for(;count>0;count--);
        }
       
int main(void)
{       
        /* LED端口初始化 */
        LED_GPIO_Config();
        //LED1_ON;

        /* 按键端口初始化 */
        Key_GPIO_Config();
       
#if 0
        while(1)
{         
        //GPIO_SetBits(LED3_GPIO_PORT ,LED3_GPIO_PIN  );
          Pbout(1) = 1;
         delay(0xFFFFF);
        //GPIO_ResetBits( LED3_GPIO_PORT , LED3_GPIO_PIN  );
          Pbout(1) = 0;
         delay(0xFFFFF);
}
        /* 轮询按键状态,若按键按下则反转LED */
#else
while(1)                           
        {          
                if( Pain(0) == KEY_ON  )
                {
                        while( Pain(0) == KEY_ON);
                        /*LED1反转*/
                        LED2_TOGGLE;
                }
                if( Pcin(13) == KEY_ON  )
                {
                        while( Pain(13) == KEY_ON);
                        /*LED1反转*/
                        LED2_TOGGLE;
                }
//                if( Key_Scan(KEY2_GPIO_PORT,KEY2_GPIO_PIN) == KEY_ON  )
//                {
//                        /*LED2反转*/
//                        LED2_TOGGLE;
//                }               
        }
#endif
}
/*********************************************END OF FILE**********************/

回复

使用道具 举报

发表于 2019-1-4 08:42:22 | 显示全部楼层
你应该用read函数读按键引脚的值(数据寄存器)判断有无按下
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 01:01 , Processed in 0.029147 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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