STM32按键控制程序
由于最近时间比较匆忙 已经有很久的时间没有写博客了 这次和大家分享的是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按键控制程序的更多相关文章
- 【技能大赛笔记01】Zigbee点对点按键控制程序开发
[技能大赛笔记01]Zigbee点对点按键控制程序开发 --2017年"物联网物联网技术应用与维护"任务五题1(中职组) 1.题目要求 2.工程文件 在比赛中,提供了一个基于Bas ...
- stm32按键识别
刚写了一个关于stm32单片机的按键识别的程序.目的,同时识别多个按键,并且不浪费cpu的时间. 关于去抖动,以前以为是在按键的时候,手会抖动.通过程序验证,这个确实是误解.这个应该是防止意外干扰.以 ...
- stm32按键FIFO的实现
学习目标: 1.理解FIFO的基本概念和设计按键FIFO的意义 2.写出实现按键FIFO的代码 1.设计按键FIFO的优点 要介绍实现按键FIFO的优点,首先要了解FIFO的一些基本概念.FIFO ...
- STM32 按键输入
#include "stm32f10x.h"#include "key.h" //按键初始化函数void KEY_Init(void) { GPIO_InitT ...
- stm32按键配置
前言:我们都知道开发板上除了有经典的流水灯之外,还有一个必备的练习硬件--按键(key),下面继续来完成按键的配置. 1.通过查看原理图,找出按键(key)的管脚名字和对应芯片上的I/O口,四个I/O ...
- stm32 按键操作
抖动时间的长短由按键的机械特性决定,一般为5ms-10ms void key() { static u8 flag = 1; if(flag == 1 && KEY_UP == 1) ...
- stm32 按键
//°´¼ü³õʼ»¯º¯Êý void KEY_Init(void) //IO³õʼ»¯ { GPIO_InitTypeDef GPIO_InitStructure; //³õʼ»¯KEY0- ...
- STM32按键输入
下面3个接上拉电阻 WK_UP接上拉电阻 因为用到了PA,PC,PH所以要使能3个模块 STATIC静态变量只会初始化一次 每次调用flag++,不会再初始化为0:起记忆作用. 最关键的是头 件不要忘 ...
- [Beautifulzzzz的博客目录] 快速索引点这儿O(∩_∩)O~~,红色标记的是不错的(⊙o⊙)哦~
3D相关开发 [direct-X] 1.direct-X最小框架 [OpenGL] 1.环境搭建及最小系统 [OpenGL] 2.企业版VC6.0自带的Win32-OpenGL工程浅析 51单片机 [ ...
随机推荐
- cocos2d-x---开篇介绍
关于cocos2d-x这一游戏引擎,现在受到了手机游戏开发者的青睐.其实cocos2d一开始是由于cocos2d-iphone的成功,然后带动各类开源项目越来越火.由苹果独家的Objective-C到 ...
- HDU 1813 Escape from Tetris
TMDTMD IDA*没跑了.什么是IDA*? 就是迭代深搜+A*估个价. 然而为什么调了一天? n<=2的时候我输出了东西.... 看了一天. #include<iostream> ...
- CodeForces 755C PolandBall and Forest (并查集)
题意:给定每一点离他最远的点,问是这个森林里有多少棵树. 析:并查集,最后统计不同根结点的数目即可. 代码如下: #pragma comment(linker, "/STACK:102400 ...
- Android中服务的生命周期回调方法
- PHP新手之学习类与对象(4)
五.范围解析操作符(::) 范围解析操作符(也可称作 Paamayim Nekudotayim)或者更简单地说是一对冒号,可以用于访问静态成员.方法和常量,还可以用于覆盖类中的成员和方法. 当在类的外 ...
- Cassandra 单机入门例子——有索引
入门例子: http://wiki.apache.org/cassandra/GettingStarted 添加环境变量并source生效,使得可以在任意位置执行cassandra/bin安装目录下的 ...
- MySQL5.6多实例部署
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://suifu.blog.51cto.com/9167728/1850560 无论是迫 ...
- SQLite存储区的日志模式
目录内包含了三个文件xxx.sqlite.xxx.sqlite-shm.xxx.sqlite-wal 默认的日志模式为Write-Ahead Logging(WAL): 支持多个并发读取和一个并发写入 ...
- Repeated Substring Pattern Leetcode
Given a non-empty string check if it can be constructed by taking a substring of it and appending mu ...
- MySQL删除单列重复或多列同时重复值并保留一条
在生产环境中,我们有的列是不允许出现重复值的,亦或是某两列不允许同时重复,但由于前端未做限制,或者没限制住,出现了单列重复值,或者两列本应组成唯一组合却也出现重复,这两种情况都是不允许的.现在由于前端 ...