STM32白话文教程内置按键模块外接按键检测 三句话让你玩明白按键 水银倾斜模块
Posted 404detective
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32白话文教程内置按键模块外接按键检测 三句话让你玩明白按键 水银倾斜模块相关的知识,希望对你有一定的参考价值。
还不知道检测输入电平信号用什么输入模式?
就简单的记住:
检测端口输入低电平0要用上拉 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
检测端口输入高电平1要用下拉 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
你不知道你外接按键的原理图,不知道检测什么电平?
最简单的方法:
用电压表黑接地,红接输入端,一测便知。
没有外部按键模块?
骚操作:‘’所有的IO口都是外部按键‘’!
你甚至可以直接用杜邦线接VCC或地来模拟输入高低电平,起到按键效果。
看过第一篇你应该知道怎么初始化GPIO了
所以只讲一些新技巧,也就是上面三点。
下面是每一点的解释。
检测输入电平信号用什么输入模式?
PE2/PE3/PE4 按下后接地,输入为0,所以用上拉
PA0 按下后通3.3V电压,输入为1,所以用下拉
你不知道你外接按键的原理图,不知道检测什么电平?
你可以在模块上分清 VCC(中间) 和GND(—),那剩下的 Signal(S) 就是输入到STM32引脚来检测电平的。
用电压表检测
GND和Signal两端电压电压3.3V
按下后为0
这不跟上面内置的3个按键一样吗?
所以用上拉输入
水银倾斜检测模块
用电压表检测
GND和Signal两段电压电压3.3V
水银将内部连通之后 指示灯点亮
GND和Signal两端电压电压0
跟以上按键类比 是一样的道理
没有外部按键模块?
按键的检测不就是检测一个引脚的高低电平吗?
你可以直接:
上拉一个引脚
用杜邦线接地就是一次按键
下拉一个引脚
用杜邦线接VCC也是一次按键
如果你不想外部按键在PA6 想改成PE9 怎么办?
只需把初始化与PA6相关的做修改
以下为相关代码
只需改这3处 也必须要同时全部改掉这3处
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/*-----------------------
文件名称:main.c
文件描述:按键控制LED闪烁,按下按键
S1取反LED2,
S2取反LED3,
S4同时取反LED2,LED3
The_Key(外部按键)使LED2,LED3闪烁5次
---------------------------*/
#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "key.h"
int main(void)
{
uint8_t j; //定义变量 用于后面for循环
LED_Init();//LED初始化
KEY_Init();//内置按键初始化
The_Key_Init();//外部按键初始化
Daley_Init();//延时初始化
while (1)
{
if(!S1)
{
Delay_ms(10);
//延迟消抖 51单片机教程按键中已讲过
if(!S1)
{
while(!S1);//等待按键释放
LED2_REV;
}
}
if(!S2)
{
Delay_ms(10);
if(!S2)
{
while(!S2);
LED3_REV;
}
}
//按键3类比1、2 此处省略
if(S4)
{
Delay_ms(10);
if(!The_Key)
{
while(!The_Key);
LED2_REV;
LED3_REV;
}
}
//外接按键PA6
//你也可以直接用杜邦线接VCC或地来模拟输入高低电平 起到按键效果
if(!The_Key)
{
Delay_ms(10);
if(S4)
{
while(S4);
for(j=0;j<10;j++)
{
LED2_REV;
LED3_REV;
Delay_ms(100);
}
}
}
}
}
/*------------------------------
文件名称:key.c
文件描述:配置按键初始化参数
--------------------------------*/
#include "key.h"
void KEY_Init(void)//内部按键 PE2/PE3/PE4/PA0
{
GPIO_InitTypeDef GPIO_InitStructure;
//打开PE口时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
//PE2,PE3,PE4引脚设置
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4;
//端口速度
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
//端口模式,此为输入上拉模式
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
//初始化对应的端口
GPIO_Init(GPIOE, &GPIO_InitStructure);
//PA0、PA6引脚设置
//打开PA口时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
//端口速度
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
//端口模式,此为输入下拉模式
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
//初始化对应的端口
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void The_KEY_Init(void)//外部按键 我用PA6去读取
{
GPIO_InitTypeDef GPIO_InitStructure;
//打开PA口时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
//PA0引脚设置
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
//端口速度
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
// 端口输入低电平0要上拉 输入高电平1要下拉
//端口模式,此为输入上拉模式
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
//初始化对应的端口
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
/*------------------------------
文件名称:key.h
--------------------------------*/
#ifndef __KEY_H
#define __KEY_H
#include "stm32f10x.h"
#define S1 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)
#define S2 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)
#define S3 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)
#define S4 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)
#define The_Key GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_6)
void KEY_Init(void);
void The_KEY_Init(void);
#endif
以上是关于STM32白话文教程内置按键模块外接按键检测 三句话让你玩明白按键 水银倾斜模块的主要内容,如果未能解决你的问题,请参考以下文章