目的:利用扫描IO口的方式直接操作按键
配置文件:#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
寄存器、结构体定义以及库函数参看流水灯一节
程序代码分析:(代码出自FIRE)
Led.c文件再次不在叙述,参看流水灯一节
重点分析key.c文件,其基本结构如下:
1、按键io口初始化,这里有两个按键key1和key2,初始化过程完全相同
void Key1_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;//定义GPIO初始化结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//开GPIO时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //选中IO口标号
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; //配置IO口速度
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入
GPIO_Init(GPIOA, &GPIO_InitStructure);//利用初始化库函数初始化GPIO
}
2、扫描按键
uint8_t Key_Scan(GPIO_TypeDef* GPIOx,u16 GPIO_Pin)//该函数将返回一个unsigned char型变量,输入参数为GPIO寄存器结构体(字母),和GPIO端口号(数字)
{
if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON ); //利用单个位读取函数读取按键的值
{
Key_Delay(10000); //延时,消抖
if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON ) //再次确认按键按下
{
while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON);//等待按键释放
return KEY_ON;
}
else
return KEY_OFF;
}
else
return KEY_OFF;
}
其中有两个宏定义
#define KEY_ON 0
#define KEY_OFF 1
3、按键按下后的执行函数:按键按下后需要执行相应的操作,所以要列写此函数
void Key_Test(void)
{
LED_GPIO_Config();
LED1_ON;
LED2_ON;
/*config key*/
Key1_GPIO_Config();//调用按键GPIO初始化函数
Key2_GPIO_Config();
while(1)
{
if( Key_Scan(GPIOA,GPIO_Pin_0) == KEY_ON ) // KEY1
{
LED1_TOGGLE;
}
if( Key_Scan(GPIOC,GPIO_Pin_13) == KEY_ON ) // KEY2
{
LED2_TOGGLE;
}
}
}
其中操作LED灯的几个函数参看流水灯一节
小总结:1、在写key.c文件时,除了包含自己的key.h文件,还要包含led.h文件才能调用 流水灯函数。
2、主函数还要包含上述两个头文件
3、延时函数
static void Key_Delay(__IO u32 nCount)
{
for(; nCount != 0; nCount--);
}
注意函数中static 和__IO的宏定义为volatile,传入参数为无符号32位int型变量
上一篇:STM32F1x系列——按键输入实验
下一篇:STM32 LED灯的另一种写法
推荐阅读最新更新时间:2024-11-17 07:19
设计资源 培训 开发板 精华推荐
- 三相双向SiC无桥图腾柱逆变器/PFC开发板
- 使用 Diodes Incorporated 的 ZR78L07 的参考设计
- LTC3615EUF-1 双路 3A 同步降压型 DC/DC 转换器用于 DDR 存储器终端的典型应用
- ADR392B 4.096 Vout 微功率、低噪声精密电压基准的典型应用
- A000088, Arduino Mini-05 无接头开发套件平台基于 ATmega328 8bit ATmega AVR MCU
- 基于涂鸦智能的湿温度传感器
- 使用 RTC2-2405SRW 隔离式 DC/DC 转换器、ON/OFF CTRL 电路的典型应用
- AD5330 并行接口、单电压输出、8 位 DAC 的典型应用
- TB2902HQ 最大功率 41W BTL x 4ch 音频功率的典型应用
- 具有可编程电流限制的 LT3091MPR 线性稳压器的典型应用