OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4753|回复: 0

STM32F103 正点原子精英版 按键控制失灵

[复制链接]

2

主题

3

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2021-2-7
在线时间
4 小时
发表于 2021-2-24 16:15:24 | 显示全部楼层 |阅读模式
5金钱

情况描述:
KEY0控制LED0,KEY1控制LED1,KEY_UP控制蜂鸣器
在按下KEY0和KEY_UP时,LED0和蜂鸣器可以使用
按下KEY1的时候,一共可以按下两次,LED1一次暗一次亮,然后所有按键失灵

尝试过KEY0控制LED1,KEY1控制LED0,情况与上面相同,LED1一次暗亮循环后所有按键失灵

下面附上main函数,附件中有整个工程
希望有大佬能解答
  1. #include "stm32f10x.h"
  2. #include "led.h"
  3. #include "beep.h"
  4. #include "key.h"
  5. #include "delay.h"


  6. int main(void){
  7.         int key = 0,keyStatus[3] = {0, 0, 1};
  8.        
  9.         LED_Init();
  10.         BEEP_Init();
  11.         KEY_Init();
  12.        
  13.         GPIOB->ODR|=1<<5;
  14.         keyStatus[0] = 1;
  15.         GPIOE->ODR|=1<<5;
  16.         keyStatus[1] = 1;
  17.        
  18.         while(1){
  19.                 delay_ms(10);
  20.                 key = KEY_Read(0);
  21.                 if(key == 1){                        //LED0
  22.                         if(keyStatus[0] == 1){
  23.                                 GPIOB->ODR|=1<<5;
  24.                                 keyStatus[0] = 0;
  25.                         }
  26.                         else{
  27.                                 GPIOB->ODR&=0<<5;
  28.                                 keyStatus[0] = 1;
  29.                         }
  30.                 }
  31.                 if(key == 2){                        //LED1
  32.                         if(keyStatus[1] == 1){
  33.                                 GPIOE->ODR|=1<<5;
  34.                                 keyStatus[1] = 0;
  35.                         }
  36.                         else{
  37.                                 GPIOE->ODR&=0<<5;
  38.                                 keyStatus[1] = 1;
  39.                         }
  40.                 }
  41.                 if(key == 3){                        //蜂鸣器
  42.                         if(keyStatus[2] == 1){
  43.                                 GPIOB->ODR|=1<<8;
  44.                                 keyStatus[2] = 0;
  45.                         }
  46.                         else{
  47.                                 GPIOB->ODR&=0<<8;
  48.                                 keyStatus[2] = 1;
  49.                         }
  50.                 }else delay_ms(10);
  51.         }
  52. }
复制代码
Template.zip (6.42 MB, 下载次数: 0)

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 14:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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