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


相关文章
stm32学习 3-2 LED流水灯
stm32学习 3-2 LED流水灯
277 4
stm32学习3-1 LED闪烁
stm32学习3-1 LED闪烁
220 4
STM32CubeMX FreeRTOS点亮LED
STM32CubeMX FreeRTOS点亮LED
550 10
STM32CubeMX 按键控制LED
STM32CubeMX 按键控制LED
629 0
使用STM32F103标准库实现定时器控制LED点亮和关闭
通过这篇博客,我们学习了如何使用STM32F103标准库,通过定时器来控制LED的点亮和关闭。我们配置了定时器中断,并在中断处理函数中实现了LED状态的切换。这是一个基础且实用的例子,适合初学者了解STM32定时器和中断的使用。 希望这篇博客对你有所帮助。如果有任何问题或建议,欢迎在评论区留言。
1899 2
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
2157 0
|
缓存 网络协议 算法
[蓝桥杯嵌入式]hal库 stm32 PWM的使用(随时修改占空比,随时修改频率)
[蓝桥杯嵌入式]hal库 stm32 PWM的使用(随时修改占空比,随时修改频率)
|
传感器 编解码 API
【STM32开发入门】温湿度监测系统实战:SPI LCD显示、HAL库应用、GPIO配置、UART中断接收、ADC采集与串口通信全解析
SPI(Serial Peripheral Interface)是一种同步串行通信接口,常用于微控制器与外围设备间的数据传输。SPI LCD是指使用SPI接口与微控制器通信的液晶显示屏。这类LCD通常具有较少的引脚(通常4个:MISO、MOSI、SCK和SS),因此在引脚资源有限的系统中非常有用。通过SPI协议,微控制器可以向LCD发送命令和数据,控制显示内容和模式。
904 2