我按照视频教程把代码写进去但是 按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**********************/ |