由于最近时间比较匆忙 已经有很久的时间没有写博客了 这次和大家分享的是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. js prototype 和constructor

    1.function 和object 都有 constructor 和prototype 2. var a=new Animal() (animal 是function或Object) a 有 con ...

  2. 怎样编制excel序列目录

    怎样编制序列目录 原帖内容:http://www.excelpx.com/forum.php?mod=viewthread&tid=164190&extra=%26page%3D1&a ...

  3. UVa 908 - Re-connecting Computer Sites

    题目大意:有n个网站,由m条线路相连,每条线路都有一定的花费,找出连接所有线路的最小花费. 最小生成树问题(Minimal Spanning Tree, MST),使用Kruskal算法解决. #in ...

  4. bzoj2120: 数颜色 &&bzoj2453: 维护队列

    题目大意: 你小时候玩过弹珠吗? 小朋友A有一些弹珠,A喜欢把它们排成队列,从左到右编号为1到N.为了整个队列鲜艳美观,小朋友想知道某一段连续弹珠中,不同颜色的弹珠有多少.当然,A有时候会依据个人喜好 ...

  5. Python装饰器学习(九步入门)

    这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 ? 1 2 3 4 5 6 7 8 # -*- coding:gbk -*- '''示 ...

  6. 线程(thread)

    线程(thread): 现代操作系统引入进程概念,为了并发(行)任务 1.进程之间的这种切换代价很高 2.通信方式的代价也很大基本概念: 1.线程是比进程更小的资源单位,它是进程中的一个执行路线(分支 ...

  7. 安装 mrtg

    http://blog.csdn.net/cnbird2008/article/details/2072627

  8. EF Code First:实体映射

    二.实体映射 实体与数据库的映射可以通过DataAnnotation与FluentAPI两种方式来进行映射: (一) DataAnnotation DataAnnotation 特性由.NET 3.5 ...

  9. 随机矩阵(stochastic matrix)

          最近一个月来一直在看Google排序的核心算法---PageRank排序算法[1][2],在多篇论文中涉及到图论.马尔可夫链的相关性质说明与应用[3][4][5],而最为关键,一直让我迷惑 ...

  10. JAVA中StringBuffer类常用方法

    String是不变类,用String修改字符串会新建一个String对象,如果频繁的修改,将会产生很多的String对象,开销很大.因此java提供了一个StringBuffer类,这个类在修改字符串 ...