冰糖炖雪梨 发表于 2020-4-23 18:00

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

我按照视频教程把代码写进去但是 按key1键的时候灯会亮灭,按key2键时候灯没反应,再按key1键时,就没反应了。源代码我给附上,跪求大佬解惑(补充:原文件时例程的 13-GPIO输入-按键检测)
**
******************************************************************************
* @file    main.c
* @authorfire
* @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_AddrGPIOB_BASE+0x0C
      #define Pbout(n) *(unsigned int*)((GPIOB_ODR_Addr & 0xF0000000)+0x02000000+((GPIOB_ODR_Addr & 0x00FFFFFF)<<5)+(n<<2))
      #define GPIOA_IDR_AddrGPIOA_BASE+0x08
      #define Pain(n) *(unsigned int*)((GPIOA_IDR_Addr & 0xF0000000)+0x02000000+((GPIOA_IDR_Addr & 0x00FFFFFF)<<5)+(n<<2))
      #define GPIOC_IDR_AddrGPIOC_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**********************/
页: [1]
查看完整版本: 有关按键的问题,对应于14节位带操作