由于最近时间比较匆忙 已经有很久的时间没有写博客了 这次和大家分享的是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. <!DOCTYPE> 声明 引发的错误

    <!DOCTYPE> 声明必须是 HTML 文档的第一行,位于 <html> 标签之前. 在写模板的时候,因为最近开始给每个文件添加注释,无意中将注释写在文件的第一行.导致页面 ...

  2. java系列--批量处理

    批量删除 批量更新 二.分页 1.基于sql语句 1).基于ROWID分页 2).基于RONUM分页 3).基于数据分析分页 2.基于结果集

  3. c++初学(电梯实验加强版)

    Elevator.h class Elevator{public:    Elevator();    ~Elevator();    void getNowNum();        void Se ...

  4. bzoj3052

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3052 题目大意:自己看看,懒得写 题解:带修改的树上莫队,经典爆评测机的题 代码: #inc ...

  5. http://begin.lydsy.com/JudgeOnline/problem.php?id=2774(poi病毒)

    2774: Poi2000 病毒 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 5  Solved: 4[Submit][Status][Web Boa ...

  6. localStorage eval script

    var globalEval =function(data) { (window.execScript || function(data){ window.eval.call(window,data) ...

  7. ajax请求获取到数据,但是仍然不能触发success方法

    这个问题消耗了我的很多时间. 原来是因为.php文件中的 echo echo json_encode($k);  后面少加了个exit; 因为echo echo json_encode($k); 之后 ...

  8. centos 6.5下cmake工具的安装与配置

    一.cmake是什么? CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程).他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C+ ...

  9. js观察者模式与Model

    目的 观察者模式是常见的设计模式,可以被应用到MV*框架的Model上,来实现对数据变化的监听. 基本概念 观察者模式是一种常见的设计模式.被观察者可以被订阅(subscribe),并在状态发生改变时 ...

  10. WCF服务发布到IIS中去 在WCF调试

    第一个WCF程序 1. 新建立空白解决方案,并在解决方案中新建项目,项目类型为:WCF服务应用程序.建立完成后如下图所示: 2.删除系统生成的两个文件IService1.cs与Service1.svc ...