stm32(寄存器)--按键输入

1;硬件接口;
mini版stm32上有4个按键,分别为KEY_0,KEY_1,(内接高电平,下降沿触发,连接PC(5),PA(15)),KEY_UP(内接地,上升沿触发,连接PA(0)),RESET(复位键);

2;key.c函数实现;

在这里插入代码片
#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,主函数实现

在这里插入代码片
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;
 }
}

有问题请指正,不懂可以call我;

猜你喜欢

转载自blog.csdn.net/qq_45906993/article/details/108565827