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我;