嵌入式系统学习——STM32之按键输入
来源:互联网 发布:法意软件价格 编辑:程序博客网 时间:2024/04/28 18:36
之前写了两篇关于STM32 GPIO的介绍和运用,跑马灯用到了GPIO的推挽输出,但是对于输入还是没有用到,这次就运用一下GPIO的上拉输入。实验还是和以前51做的实验一样,就是判断按键的输入,然后控制LED灯。这次没有直接配置寄存器,而是调用库函数和位操作结合。
注:每一块开发板对应电路都不相同,编写代码需要对应自己的板子,本人两个LED灯对应的GPIO为:GPIOD13和GPIOD14,并且是共阴极。两个按键对应的GPIO为:GPIOC13和GPIOE0,并且共阴极。
首先,LED初始化和上一篇博客中的跑马灯初始化一样,只需拷贝就可以了。
LED初始化函数:
#include "sys.h"#define LED1 PDout(13)// PB13#define LED2 PDout(14)// PB14void LED_Init(void){GPIO_InitTypeDef GPIOINIT;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);GPIOINIT.GPIO_Mode = GPIO_Mode_Out_PP;GPIOINIT.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14;GPIOINIT.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOD, &GPIOINIT);GPIO_ResetBits(GPIOD, GPIO_Pin_13 | GPIO_Pin_14);}
按键初始化函数:
#include "stm32f10x.h"#define KEY0 GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13)//读取GPIOC13的输入#define KEY1 GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_0)//读取GPIOE0的输入#define KEY0_PRESS1#define KEY1_PRESS 2void KEY_Init(void){GPIO_InitTypeDef GPIOInit;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOE, ENABLE);GPIOInit.GPIO_Mode = GPIO_Mode_IPU;GPIOInit.GPIO_Pin = GPIO_Pin_13;GPIOInit.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC, &GPIOInit);GPIOInit.GPIO_Mode = GPIO_Mode_IPU;//上拉输入GPIOInit.GPIO_Pin = GPIO_Pin_0;GPIOInit.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOE, &GPIOInit);}
对于按键输入来说,怎么判断是连续按,还是不连续按,这是一个重点。以前是将两种情况分开考虑,写成了两个函数,然后判断,其实,这个可以写成一个函数,只需添加一个选择形参,然后对形参进行判断操作即可。
按键输入函数:
//按键处理函数//返回按键值//mode:0不支持连续按;1支持连续按//0,没有按键按下//1,key0按下//2,key1按下unsigned char KEY_Scan(unsigned char mode){static unsigned char key_up = 1; //按键松开标志if(mode){key_up = 1;//支持连续按}if(key_up && (KEY0 == 0 || KEY1 == 0)){delay_ms(10);//去抖key_up = 0;if(KEY0 == 0)return KEY0_PRESS;else if(KEY1 == 0) return KEY1_PRESS;}else if(KEY0 == 1 && KEY1 == 1){key_up = 1;}return 0;//无按键按下}
主函数:
#include "led.h"#include "key.h"#include "stm32f10x.h"#include "delay.h"int main(void){u8 key;LED_Init();delay_init();KEY_Init();LED1=1;while(1){key = KEY_Scan(0);if(key == 1){LED1=!LED1;}else if(key == 2){LED3=!LED3;}delay_ms(10);}}
按键输入keil工程分享
参考:开源电子网
阅读全文
0 0
- 嵌入式系统学习——STM32之按键输入
- STM32学习笔记——按键输入
- STM32——按键输入之static
- 嵌入式系统学习——STM32之GPIO
- 嵌入式系统学习——STM32之跑马灯
- 嵌入式系统学习——STM32之外部中断
- 嵌入式系统学习——STM32之通用定时器
- 嵌入式系统学习——STM32之串口通信UART
- 嵌入式系统学习——STM32之FATFS文件系统
- 嵌入式系统学习——STM32之TFT汉字显示
- 嵌入式系统学习——STM32之电容型触摸屏
- 嵌入式系统学习——STM32之电阻型触摸屏
- STM32:STM32学习记录3:按键输入
- 嵌入式系统学习——STM32之RTOS系统UCOS介绍与移植
- STM32 GPIO之二——按键例程 学习总结
- 嵌入式系统学习——STM32之UCOS-III任务管理
- 嵌入式系统学习——STM32之UCOS-III中断和时间管理及软件定时器
- 嵌入式系统学习——STM32之UCOS-III信号量和互斥信号量
- FileProvider 在 Android N 上的应用
- Server Locations 灰色无法编辑的问题。
- Android studio和Eclipse生成的apk位置
- HTMl5的sessionStorage和localStorage
- 前端动画渲染引擎pixi.js系列(9)如何生成缩略图
- 嵌入式系统学习——STM32之按键输入
- JSP token防止表单重复提交
- SPOJ DQUERY 莫队 做法
- 解读今年的 Google IO 2017
- 建造者模式(Builder)
- [shell]shell脚本-求和&参数处理等
- Python-sklearn机器学习的第一个样例(3)
- 底部导航栏 BottomNavigationBar的使用
- Mvp+RxJava+Retrofit入门教程