由于最近时间比较匆忙 已经有很久的时间没有写博客了 这次和大家分享的是STM32的一个按键的小程序 他的优点呢也是和上面一个LED一样就是便于移植 更改管脚方便 虽然都是些小程序 但是我觉得他们就像基础一样 基础打好了 你才能建立更高的大楼 学了1年半的电子 我深有体会 其实我们最难学的是基础 可是我们往往忽视了这些方面 只顾一头钻入 这个算法 那个算法  其实说个最简单的给你一份英文资料和一块芯片你能确保能够驱动 如果你连芯片都驱动不了 会再多的算法有什么意义呢??

好了不多说 下面给大家分享下我的程序。大神不要见笑哦!

 /******************************************************************************
* 文件 Key.c
* 作者 Belye
* 版本 ST V3.5.0
* 日期 04-February-2016
* 提要 基于德飞莱开发板的四个按键的底层驱动程序
* 使用方式 函数调用示例
* 注意 记得修改对应的按键初始化管脚
******************************************************************************/ /*************************************** 函数调用示例 ************************************
KEY_Init();
while(1)
{
i=KEY_Scan(0);
switch (i)
{
case S4_PRES:
break;
case S1_PRES:
break;
case S2_PRES:
break;
case S3_PRES:
break;
default:
break;
}
}
**********************************************************************************************/
#include<Key.h>
#include<delay.h> void KEY_Init()
{
S4_Init();
S1_Init();
S2_Init();
S3_Init();
} void S4_Init(void)//PA0
{ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(S4_CLK,ENABLE);//使能PORTA时钟 // GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//关闭jtag,使能SWD,可以用SWD模式调试 GPIO_InitStructure.GPIO_Pin = S4_PIN;//PA8
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //设置成下拉输入
GPIO_Init(S4_PORT, &GPIO_InitStructure);//初始化GPIOA8 } void S1_Init(void)
{ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(S1_CLK,ENABLE);//使能PORTA时钟 // GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//关闭jtag,使能SWD,可以用SWD模式调试 GPIO_InitStructure.GPIO_Pin = S1_PIN;//PA8
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入
GPIO_Init(S1_PORT, &GPIO_InitStructure);//初始化GPIOA8 } void S2_Init(void)
{ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(S2_CLK,ENABLE);//使能PORTD时钟 // GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//关闭jtag,使能SWD,可以用SWD模式调试 GPIO_InitStructure.GPIO_Pin = S2_PIN;//PD3
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入
GPIO_Init(S2_PORT, &GPIO_InitStructure);//初始化GPIOD3 } void S3_Init(void)
{ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(S3_CLK,ENABLE);//使能PORTD时钟 // GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//关闭jtag,使能SWD,可以用SWD模式调试 GPIO_InitStructure.GPIO_Pin = S3_PIN;//PD3
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入
GPIO_Init(S3_PORT, &GPIO_InitStructure);//初始化GPIOD3 } //按键处理函数
//返回按键值
//mode:0,不支持连续按;1,支持连续按;
//返回值:
//0,没有任何按键按下
//KEY0_PRES,KEY0按下
//KEY1_PRES,KEY1按下
//WKUP_PRES,WK_UP按下
//注意此函数有响应优先级,KEY0>KEY1>WK_UP!!
u8 KEY_Scan(u8 mode)
{
static u8 key_up=;//按键按松开标志
if(mode)key_up=; //支持连按
if(key_up&&(S4==||S1==||S2==||S3==))
{
delay_ms();//去抖动
key_up=;
if(S4==) return S4_PRES;
else if(S1==) return S1_PRES;
else if(S2==) return S2_PRES;
else if(S3==) return S3_PRES;
}else if(S4==&&S1==&&S2==&&S3==)key_up=;
return ;// 无按键按下
}
#ifndef __Key_H
#define __Key_H #include<sys.h> #define S1_CLK RCC_APB2Periph_GPIOE
#define S1_PORT GPIOE
#define S1_PIN GPIO_Pin_4 #define S2_CLK RCC_APB2Periph_GPIOE
#define S2_PORT GPIOE
#define S2_PIN GPIO_Pin_3 #define S3_CLK RCC_APB2Periph_GPIOE
#define S3_PORT GPIOE
#define S3_PIN GPIO_Pin_2 #define S4_CLK RCC_APB2Periph_GPIOA
#define S4_PORT GPIOA
#define S4_PIN GPIO_Pin_0 #define S1 GPIO_ReadInputDataBit(S1_PORT,S1_PIN)//读取按键1
#define S2 GPIO_ReadInputDataBit(S2_PORT,S2_PIN)//读取按键2
#define S3 GPIO_ReadInputDataBit(S3_PORT,S3_PIN)//读取按键3
#define S4 GPIO_ReadInputDataBit(S4_PORT,S4_PIN)//读取按键4 #define S1_PRES 2 //KEY1
#define S2_PRES 3 //KEY2
#define S3_PRES 4 //KEY3
#define S4_PRES 1 //KEY0 void KEY_Init(void);
void S1_Init(void);//IO初始化
void S2_Init(void);
void S3_Init(void);
void S4_Init(void); u8 KEY_Scan(u8 mode); //按键扫描函数 #endif

STM32按键控制程序的更多相关文章

  1. 【技能大赛笔记01】Zigbee点对点按键控制程序开发

    [技能大赛笔记01]Zigbee点对点按键控制程序开发 --2017年"物联网物联网技术应用与维护"任务五题1(中职组) 1.题目要求 2.工程文件 在比赛中,提供了一个基于Bas ...

  2. stm32按键识别

    刚写了一个关于stm32单片机的按键识别的程序.目的,同时识别多个按键,并且不浪费cpu的时间. 关于去抖动,以前以为是在按键的时候,手会抖动.通过程序验证,这个确实是误解.这个应该是防止意外干扰.以 ...

  3. stm32按键FIFO的实现

    学习目标: 1.理解FIFO的基本概念和设计按键FIFO的意义   2.写出实现按键FIFO的代码 1.设计按键FIFO的优点 要介绍实现按键FIFO的优点,首先要了解FIFO的一些基本概念.FIFO ...

  4. STM32 按键输入

    #include "stm32f10x.h"#include "key.h" //按键初始化函数void KEY_Init(void) { GPIO_InitT ...

  5. stm32按键配置

    前言:我们都知道开发板上除了有经典的流水灯之外,还有一个必备的练习硬件--按键(key),下面继续来完成按键的配置. 1.通过查看原理图,找出按键(key)的管脚名字和对应芯片上的I/O口,四个I/O ...

  6. stm32 按键操作

    抖动时间的长短由按键的机械特性决定,一般为5ms-10ms void key() { static u8 flag = 1; if(flag == 1 && KEY_UP == 1) ...

  7. stm32 按键

    //°´¼ü³õʼ»¯º¯Êý void KEY_Init(void) //IO³õʼ»¯ { GPIO_InitTypeDef GPIO_InitStructure; //³õʼ»¯KEY0- ...

  8. STM32按键输入

    下面3个接上拉电阻 WK_UP接上拉电阻 因为用到了PA,PC,PH所以要使能3个模块 STATIC静态变量只会初始化一次 每次调用flag++,不会再初始化为0:起记忆作用. 最关键的是头 件不要忘 ...

  9. [Beautifulzzzz的博客目录] 快速索引点这儿O(∩_∩)O~~,红色标记的是不错的(⊙o⊙)哦~

    3D相关开发 [direct-X] 1.direct-X最小框架 [OpenGL] 1.环境搭建及最小系统 [OpenGL] 2.企业版VC6.0自带的Win32-OpenGL工程浅析 51单片机 [ ...

随机推荐

  1. Grunt插件之LiveReload 实现页面自动刷新,所见即所得编辑

    苦B的前端每次在制作和修改页面时,都有一个特定的三部曲:coding-save-F5.很多时候都希望自己一改东西,页面就能立刻显示,而现在LiveReload就能做到这点. LiveReload会监控 ...

  2. Core Data 应用程序实践指南(Core Data 应用程序实践指南)

    译者序 前言 勘误 1. 初次尝试Core Data应用程序 本书的基础,基本概念,能做什么,不能做什么.实现CoreDataHelper类,演示如何将Core Data同既有的应用程序相集成. 2. ...

  3. iOS 程序调试、测试方案

    1. iOS 之 界面调试 2. iOS 之 调试.解决BUG 3. iOS 程序测试.程序优化.提交前检测

  4. 搭建自己的BT下载平台服务器

    [原理基础] BT(Bit Torren比特流)是由国外的一名叫Bram Cohen的程序员开发的下载软件,可以说它是目前网络是非常流行的一个多点下载的P2P软件,它最显著的特点就是:下载的人越多,速 ...

  5. js原生写的微博留言板有angularjs效果

    1.HTML: <!DOCTYPE html><html><head lang="en">    <meta charset=" ...

  6. Selenium IE6 Failed to load the library from temp directory: C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\IED1C1.tmp

    项目中用到了使用Selenium打开IE浏览器.前期都是基于IE8+.Firefox.Chrome.项目后期开始现场测试时发现大部分客户还都是使用的Windows XP + IE6.结果可想而知,直接 ...

  7. C# 从字符串向 datetime 转换时失败

    更改电脑的日期类型即可,把短日期和长日期修改下面的样子即可:

  8. sql server停止和重启命令

    http://www.ynpxrz.com/n822732c2024.aspx 我们知道:sql server重启分分两步走 1.停止 net stop mssqlserver 2.重启 net st ...

  9. cvc-complex-type.2.4.c: The matching wildcard...

    在家里的电脑好好的,在单位的就不行,需要把web app libraties提到 最前面,然后clean一下项目

  10. Js让光标停在输入框input框最后面

    var val = $(this) val();   1.$(this). focus(); 2.$(this).val(""); 3.$(this).val(val);   1. ...