2018/4/1

STM32

1.按键操作的原理

1.在stm32f103rc中,存在三个按键(不包括复位),分别为key0(PC5),key1(PA15),wkup(PA0),按下key0和key1时对应的io口输出低电平,按下wkup对应io口输出高电平

2.所以可以采用库函数读取io口的电平,从而用不同的情况来控制灯的开闭

GPIO_ReadInputDataBit(GPIOX,GPIO_PIN_a)读取相应接口电平

#define KEY0 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)
#define KEY1 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15)
#define WK_UP GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)
#define KEY0_PRES 1 //KEY0
#define KEY1_PRES 2 //KEY1
#define WKUP_PRES 3 //wkup

3.实现按键的初始化和扫描功能

     GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//防止串口复用GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//上拉GPIO_InitStructure.GPIO_Pin=GPIO_Pin_15;GPIO_Init(GPIOA,&GPIO_InitStructure);//³õʼ»¯PC5GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;GPIO_Init(GPIOC,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//PA0GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;GPIO_Init(GPIOA, &GPIO_InitStructure);}

4.实现按键扫描

1.建立static变量,从而实现短按按钮功能

2.短按按钮:首先扫描上一次的电平,如果为关闭状态(说明没按),然后再进行下一次操作

3.长按按钮:重新创建一个变量,实现长按按钮功能(函数中途不存在间断)

4.注意消抖

 u8 KEY_Scan(u8 mode)//扫描{static u8 key_up=1;if(mode)key_up=1;if(key_up&&(KEY0==0||KEY1==0||WK_UP==1)){delay_ms(10);key_up=0;if(KEY0==0)return KEY0_PRES;else if(KEY1==0)return KEY1_PRES;else if(WK_UP==1)return WKUP_PRES; }else if(KEY0==1&&KEY1==1&&WK_UP==0)key_up=1;return 0;}

5.主函数部分

//reset , wk_up(PA0),KEY0(PC5),KEY1(PA15)
#include "delay.h"
#include "sys.h"
#include "key.h"
#include "LED.H"
void LED_init(void);
void key_init();
int main(void)
{
u8 t;
delay_init();
LED_Init();
KEY_Init();
GPIO_SetBits(GPIOA,GPIO_Pin_8);//¶ÔÓÚPA8Êä³ö¸ßµçƽ
GPIO_SetBits(GPIOD,GPIO_Pin_2);//¶ÔÓÚPD2Êä³ö¸ßµçƽwhile(1)
{
t=KEY_Scan(0);
switch(t)
{
case KEY0_PRES:
GPIO_ResetBits(GPIOA,GPIO_Pin_8);//low
break;
case KEY1_PRES:
GPIO_ResetBits(GPIOD,GPIO_Pin_2);//low
break;
case WKUP_PRES:
GPIO_ResetBits(GPIOA,GPIO_Pin_8);//low
GPIO_ResetBits(GPIOD,GPIO_Pin_2);//low
break;
default:
delay_ms(10);
}
}
}

STM32按键控制开关灯相关推荐

  1. STM32按键控制led四种方法

    文章目录 回顾按键电路 按照之前文章方法在工程文件下加入Hardware中的key.c和key.h 打开固件库用户手册查询io读取相关的函数 第一种方式实现按键控制 第二种方式实现按键控制led 第三 ...

  2. STM32按键控制LED灯(中断实现)

    文章目录 1- 轮询模式和中断模式 2- 配置管脚为中断模式 3- 添加代码 4- 具体实现原理 5- main()--第一个执行程序? 在一般情况下,我们希望实现按键控制灯的亮和灭,这次学习的是中断 ...

  3. stm32按键控制mg90s数字舵机、pwm调节舵机转动角度

    昨天做了一个简答的小实验,我感觉挺有意思的跟大家分享一下. 我用了按键控制mg90s数字舵机,前不久一直研究模拟舵机,数字舵机与模拟舵机的控制方式是一样的pwm时序. 数字舵机接线方面: 与模拟舵机一 ...

  4. STM32按键控制LED灯亮灭(四)

    编程要点: 1)使能GPIO端口时钟: 2)初始化GPIO目标引脚为输入模式(浮空输入): 3)编写简单测试程序,检测按键的状态,实现按键控制LED灯: bsp_led.h文件 #ifndef T_L ...

  5. STM32学习:按键控制LED

    STM32学习:按键控制LED 文章目录 前言 一.所用知识点复习 1.stm32工作模式(*注意上下拉输入的区别*) 2.按键抖动与常见按键接法 按键抖动: 按键消抖: 常见按键接法: 3.GPIO ...

  6. K_A08_004 基于 STM32等单片机驱动MX1919模块按键控制直流电机正反转加减速启停

    目录 一.资源说明 二.基本参数 1.参数 2.引脚说明 三.驱动说明 1.MX1919模块驱动时序 2.对应程序: 3.PWM信号 四.部分代码说明 接线说明 1.STC89C52RC+MX1919 ...

  7. K_A07_003 基于 STM32等单片机驱动DRV8825模块按键控制步进电机正反转

    目录 一.资源说明 二.基本参数 1.参数 2.引脚说明 三.驱动说明 SETP时序 对应程序: 细分说明 程序 四.部分代码说明 1.接线说明 1.1.STC89C52RC+DRV8825模块 1. ...

  8. 最简单DIY基于STM32的远程控制电脑系统②(无线遥杆+按键控制)

    STM32库函数开发系列文章目录 第一篇:STM32F103ZET6单片机双串口互发程序设计与实现 第二篇:最简单DIY基于STM32单片机的蓝牙智能小车设计方案 第三篇:最简单DIY基于STM32F ...

  9. 最简单DIY基于STM32的远程控制电脑系统①(电容触摸+按键控制)

    STM32库函数开发系列文章目录 第一篇:STM32F103ZET6单片机双串口互发程序设计与实现 第二篇:最简单DIY基于STM32单片机的蓝牙智能小车设计方案 第三篇:最简单DIY基于STM32F ...

最新文章

  1. oracle sql删除job,修改Oracle的Job Scheduler 日志级别及删除运行日志
  2. 对于 APM 用户的一次真实调查分析(下)
  3. A8下超级终端调试问题
  4. 实践总结 - 不可错过的Angular应用技巧
  5. 自定义View/ViewGroup的步骤和实现
  6. [VTK]VTK的三维模型保存、读取之保存为vtk格式
  7. 号角响起!百度AI开发者实战营第二季教你用AI实现商业梦想
  8. 用python生成的猜数字游戏
  9. Java对象使用的重要细节
  10. 数字电视标准大全DVB/ATSC/ISDB/CMMB/DMBTH/DAB
  11. MVX-Net: PointFusion 在mmdetection3d中的实现
  12. android触摸 apk,超级触控(流畅触屏)apk
  13. “打开文件所在位置”提示“找不到应用程序”的解决方案
  14. 每日三思:优化微信小程序中倒计时占内存较大(19-0612-1917)
  15. 二维码 编码原理简介
  16. 算法的时间复杂度取决于:
  17. Samba误删除文件恢复(开启回收站)
  18. java学习视频网课收集
  19. p5.js 编程临摹动态图形(互动媒体技术作业)
  20. 华擎服务器主板 稳定性,【华擎X570 Steel Legend主板使用总结】设置|性能_摘要频道_什么值得买...

热门文章

  1. 读《墨菲定律》笔记—洛克定律:确定目标、专注行动
  2. CAD相切方式绘制图形
  3. 【Vim】查找与替换
  4. (四)docker镜像存出和载入
  5. 最详解——寻找两个有序数组的中位数
  6. Aegisub时间码格式详解
  7. 兰大《企业战略管理》命题作业考核题离线作业
  8. Unity 任务状态的获取 任务完成与游戏结束的判断和提示
  9. Win10系统出现蓝屏笑脸故障问题如何彻底解决
  10. 对于常量池来说, 字符串 *** 的 UTF8 表示过长怎么解决