stm32 (register)-key input

1; Hardware interface;
There are 4 buttons on the mini version of stm32, namely KEY_0, KEY_1, (internal high level, falling edge trigger, connected to PC(5), PA(15)), KEY_UP (internal ground, rising edge Trigger, connect to PA(0)), RESET (reset button);

2;key.c function implementation;

在这里插入代码片
#include "key.h"
#include "stm32f10x.h"
#include "delay.h"
void KEY_Init()
{
    
    
 //开启AC时钟;
 RCC->APB2ENR |=1<<2;
 RCC->APB2ENR |=1<<4;
 //端口配置及初始化
 GPIOC->CRL &=0XFF0FFFFF;
 GPIOC->CRL |=0X00300000;
 GPIOC->IDR |=1<<5;
 //
 GPIOA->CRH &=0X0FFFFFFF;
 GPIOA->CRH |=0X30000000;
 GPIOA->IDR |=1<<15;
}
//由于按键按下可分为两种,即一直按单次触发和一直按连续触发,故加入参数mode,为0表示单次触发,为1表示连续触发;
u8 key(u8 mode)
{
    
    
 static u8 key_up=1;
 if(mode==1)
  key_up=1;
 if(key_up && KEY_1==0)
 {
    
    
  delay_ms(10);
  key_up=0;
  if(KEY_1==0)
   return 1;
 }
 else if(KEY_1!=0)
  key_up=1;
 return 0;
}

3:key.h

在这里插入代码片
#ifndef _KEY_H_
#define _KEY_H_
#include "sys.h"

#define KEY_0  PCin(5)
#define KEY_1  PAin(15)
#define KEY_UP PAin(0)

void KEY_Init(void);
u8 key(u8 mode);
#endif

4. Implementation of the main function

在这里插入代码片
int  main(void)
{
    
    
 Stm32_Clock_Init(9);//PLL
 LED_Init();//LED初始化
 delay_init(72);//延时函数时钟
 KEY_Init();//按键配置
 while(1)
 {
    
    
  if(key(0)==1)
  {
    
    
   LED0=0;
   delay_ms(100);
  }
  LED0=1;
 }
}

Please correct me if you have any questions, you can call me if you don’t understand;

Guess you like

Origin blog.csdn.net/qq_45906993/article/details/108565827