No.6 STM32F429IGT6 LED按键检测 按键点灯 (STM32F429/F767/H743)

简介: No.6 STM32F429IGT6 LED按键检测 按键点灯 (STM32F429/F767/H743)

原理图:

按键的四个引脚:

创建key.c和key.h文件

  1. 使能 GPIO 端口时钟;
  2. 初始化 GPIO 目标引脚为输入模式 (引脚默认电平受按键电路影响,浮空/上拉/下拉均没有区别);
  3. 编写简单测试程序,检测按键的状态,实现按键控制 LED 灯。

参考正点原子和野火

部分源代码

main.c

#include "sys.h"
#include "delay.h" 
#include "led.h"
#include "key.h"
int main(void)
{ 
  u8 key;
  Stm32_Clock_Init(360,25,2,8);//ÉèÖÃʱÖÓ,180Mhz
  delay_init(180);    //³õʼ»¯ÑÓʱº¯Êý
  LED_Init();       //³õʼ»¯LEDʱÖÓ
  KEY_Init();           //³õʼ»¯Óë°´¼üÁ¬½ÓµÄÓ²¼þ½Ó¿Ú
  LED0=0;         //ÏȵãÁÁºìµÆ  
  while(1)
  {
    key=KEY_Scan(0);  //µÃµ½¼üÖµ
      if(key)
    {              
      switch(key)
      {        
        case WKUP_PRES: //¿ØÖÆLED0,LED1»¥³âµãÁÁ
          LED1=!LED1;
          LED0=!LED1;
          break;
        case KEY2_PRES: //¿ØÖÆLED0·­×ª
          LED0=!LED0;
          break;
        case KEY1_PRES: //¿ØÖÆLED1·­×ª   
          LED1=!LED1;
          break;
        case KEY0_PRES: //ͬʱ¿ØÖÆLED0,LED1·­×ª 
          LED0=!LED0;
          LED1=!LED1;
          break;
      }
    }else delay_ms(10); 
  }
}

key.c

#include "key.h"
#include "delay.h" 
//°´¼ü³õʼ»¯º¯Êý
void KEY_Init(void)
{
  RCC->AHB1ENR|=1<<0;    
  RCC->AHB1ENR|=1<<2;     
  RCC->AHB1ENR|=1<<7;     
  GPIO_Set(GPIOA,PIN0,GPIO_MODE_IN,0,0,GPIO_PUPD_PD);       
  GPIO_Set(GPIOC,PIN13,GPIO_MODE_IN,0,0,GPIO_PUPD_PU);      
  GPIO_Set(GPIOH,PIN2|PIN3,GPIO_MODE_IN,0,0,GPIO_PUPD_PU);    
} 
u8 KEY_Scan(u8 mode)
{  
  static u8 key_up=1;
  if(mode)key_up=1;   
  if(key_up&&(KEY0==0||KEY1==0||KEY2==0||WK_UP==1))
  {
    delay_ms(10);//È¥¶¶¶¯ 
    key_up=0;
    if(KEY0==0)return 1;
    else if(KEY1==0)return 2;
    else if(KEY2==0)return 3;
    else if(WK_UP==1)return 4;
  }else if(KEY0==1&&KEY1==1&&KEY2==1&&WK_UP==0)key_up=1;      
  return 0;
}

key.h

#ifndef __KEY_H
#define __KEY_H  
#include "sys.h" 
#define KEY0    PHin(3)     //PH3
#define KEY1    PHin(2)   //PH2 
#define KEY2    PCin(13)  //PC13
#define WK_UP     PAin(0)   //PA0 
#define KEY0_PRES   1 //KEY0
#define KEY1_PRES 2 //KEY1
#define KEY2_PRES 3 //KEY2
#define WKUP_PRES   4 //KEY_UP
void KEY_Init(void);  //IO
u8 KEY_Scan(u8);         
#endif


相关文章
|
7月前
|
芯片
最详细STM32,cubeMX 按键点亮 led
最详细STM32,cubeMX 按键点亮 led
116 0
|
7月前
|
传感器 芯片
最详细STM32,cubeMX 点亮 led
最详细STM32,cubeMX 点亮 led
85 0
No.5 STM32F429IGT6 标准库实战GPIO输出LED灯 点亮闪烁(STM32F429/F767/H743)
No.5 STM32F429IGT6 标准库实战GPIO输出LED灯 点亮闪烁(STM32F429/F767/H743)
|
10月前
STM32使用PWM实现led亮度变化
STM32使用PWM实现led亮度变化
205 0
|
11月前
使用STM32CubeMX实现LED闪烁
使用STM32CubeMX实现LED闪烁
137 0
|
11月前
|
存储 IDE 安全
STM32CubeMX开发教程(2)— 使用教程(点亮LED灯)
STM32CubeMX开发教程(2)— 使用教程(点亮LED灯)
422 0
|
12月前
|
传感器 芯片 开发者
STM32实战之LED循环点亮
STM32实战之LED循环点亮
|
12月前
|
C语言 芯片
STM32 实战之点亮LED
STM32 实战之点亮LED
|
12月前
|
芯片
1-STM32之GPIO点亮LED
1-STM32之GPIO点亮LED
|
3月前
|
C++ 芯片 编译器
STM32F103标准外设库—— 新建工程与库函数(四)
STM32F103标准外设库—— 新建工程与库函数(四)
44 0
STM32F103标准外设库—— 新建工程与库函数(四)