IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 蓝桥杯嵌入式_STM32学习_按键_详解 -> 正文阅读

[嵌入式]蓝桥杯嵌入式_STM32学习_按键_详解

代码

来源:蓝桥杯官方;

配置代码

#include "key.h"
// KEY接口初始化
void KEY_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;//设置结构体变量
  // 允许GPIOA和GPIOB时钟
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//开启时钟
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  // PA0和PA8浮空输入(复位状态,可以省略)
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_8;//选择管脚
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//选择模式,key推荐上拉  GPIO_Mode_IPU
  GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化管脚GPIOA
  // PB1和PB2浮空输入(复位状态,可以省略)
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2;//选择管脚
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//选择模式
  GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化管脚GPIOB
}
// KEY扫描
unsigned char KEY_Scan(void)
{
  unsigned char ucKey_Val = 0;
  // 判断B1和B2是否按下   1111 1110 1111 1111
  if(~GPIO_ReadInputData(GPIOA) & 0x101)//先取反后与,0000 0001 0000 0001,只要GPIOA_0和GPIOA_8有一个按下
  {
    Delay_KEY(10); // 延时10ms消抖
    if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0))//判断是哪个按下
      //ucKey_Val = 1;
		return 1;//返回1,并跳出函数
    if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8))
      //ucKey_Val = 2;
		return 2;
	}
  // 判断B3和B4是否按下
  else if(~GPIO_ReadInputData(GPIOB) & 6)
  {//0000 0000 0000 0110
    Delay_KEY(10);		// 延时10ms消抖
    if(!GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1))
      ucKey_Val = 3;
    if(!GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_2))
      ucKey_Val = 4;
  }
  return ucKey_Val;
}

void Delay_KEY(unsigned int ms)//延时消抖
{
  unsigned int i, j;

  for(i=0; i<ms; i++)
    for(j=0; j<7992; j++);			// SYSCLK = 72MHz
//  for(j=0; j<1598; j++);			// SYSCLK = 8MHz
}

应用代码

#include "key.h"
#include "led.h"

unsigned char ucLed = 1;//LED显示参数
unsigned char ucKey_Long;//上次键值
unsigned long ulTick_ms, ulKey_Time;//当前时间,上次时间

void KEY_Proc(void);//声明KEY_Proc函数

int main(void)
{
  SysTick_Config(72000);			// 定时1ms(HCLK = 72MHz)
  KEY_Init();//按键初始化
  LED_Init();//LED初始化
  BUZ_Init();//蜂鸣器初始化

  while(1)
  {
    KEY_Proc();
    LED_Disp(ucLed);
  }
}

void KEY_Proc(void)
{
  unsigned char ucKey_Val;

  ucKey_Val = KEY_Scan();//获取按键键值
  if(ucKey_Val != ucKey_Long)//当当前键值不等于上一次键值
  {
    ucKey_Long = ucKey_Val;//更新键值
    ulKey_Time = ulTick_ms;//更新时间
  }
  else
	  ucKey_Val = 0;//否则当前键值清零

  if(ucKey_Val == 1)				// B1短按
  {
    ucLed <<= 1;//每按下一次,流水点亮下一个灯
    if(ucLed == 0) ucLed = 1;
  }
  if(ucKey_Val == 2)				// B2短按
  {
    ucLed >>= 1;
    if(ucLed == 0) ucLed = 0x80;
  }
  if(ucKey_Long == 1)				// B1长按
  {
    if(ulTick_ms-ulKey_Time > 800)//当当前时间大于上次时间800ms时
    {
      ulKey_Time = ulTick_ms;//更新时间
      ucLed <<= 2;
      if(ucLed == 0) ucLed = 1;
    }
  }
  if(ucKey_Long == 2)				// B2长按
  {
    if(ulTick_ms-ulKey_Time > 800)
    {
//    ulKey_Time = ulTick_ms;
      ucLed >>= 2;
      if(ucLed == 0) ucLed = 0x80;
    }
  }
  if(ucKey_Long == 3)				// B3长按
    GPIO_ResetBits(GPIOB, GPIO_Pin_4);//开启蜂鸣器
  else
    GPIO_SetBits(GPIOB, GPIO_Pin_4);

}
// SysTick中断处理
void SysTick_Handler(void)
{
  ulTick_ms++;//每1ms当前时间加1
}

快速配置

打开库文件里官方外设例程,找到GPIO——
在这里插入图片描述
在IOToggle" 文件夹下,打开 “main.c”——在这里插入图片描述
基础配置直接复制粘贴,然后修改引脚;

剩下的就自己背吧 hhhh.

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-02-14 21:20:17  更:2022-02-14 21:22:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 9:49:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码