找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 15073|回复: 3
打印 上一主题 下一主题
收起左侧

STM32单片机实现按键功能 源码 原理图 教程等

[复制链接]
跳转到指定楼层
楼主
实验 5  STM32单片机实现按键功能

前面几章,我们介绍了  STM32  的  IO  口作为输出以及系统时钟的使用,这
一章,我们将向大家介绍如何使用  STM32  的  IO  口作为输入用。在本章中,我
们将利用板载的  4  个按键,来控制板子上的 4 个  LED。  通过本章的学习,  你
将了解到  STM32  的  IO  口作为输入口的使用方法。 本章分为以下学习目标:
1、了解按键输入的原理。
2、了解 STM32 的输入模式。

1.1  硬件电路设计
通过前面的学习,我们学会了如何使用 GPIO 输出模式,接下来,我们来学
习怎么使用 GPIO 的输入模式。 首先我们来看在我们开发板上面按键的原理图。  




通过上面的原理图,我可能看到四个按键分别接到单片机的 PA0、 PE2、
PE3、PE4。

1.2  按键消抖
通常的按键所用开关为机械弹性开关,当机械触点断开 、闭合时,电压信号 如
下图:  


由于机械点的弹性作用,一个按键开关在闭合时不会马上稳定的接通,在断
开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动。抖动
时间的长短由按键的机械特性决定的,一般为 5ms 到 10ms。按键稳定闭合时间
的长短则由操作人员的按键动作决定的,一般为零点几秒至数秒。按键抖动会引
起按键被误读多次。为了确保 CPU 对键的一次闭合仅作一次处理,必须去除按
键抖动。一般来说一个简单的按键消抖就是先读取一次按键的状态,如果得到按
键按下之后,延时 10ms,再次读取一次按键的状态,如果按键还是按下状态,
那么说明按键已经按下。

1.3   V3.5 库函数输入函数介绍
在第一章 LED 灯中我们已经介绍了,STM32 的 IO 口配置方式了,那么这

里 我们就不在作介绍了,我们直接介绍库函数中的输入读取函数。 输入读取函
数有多个函数,详细大家可以查看《STM32 固件库使用手册(中 文 翻 译
版 ).pdf 》, 在 这 里 我 们 简 单 介 绍 一 个 要 用 到 的 输 入 函 数
GPIO_ReadInputDataBit()函数:

这个函数是读取一个设置为输出模式时,一个 IO 口的状态值。当读取的 IO 口
为 1 的时候,输出 1,当 IO 口输出为 0 的时候,输出 0。
  1. /*******************************************************************************
  2. *                 
  3. --------------------------------------------------------------------------------
  4. * 实 验 名                 : 按键实验
  5. * 实验说明       : 按键按下点亮D1-D4对应LED灯
  6. * 连接方式       :
  7. * 注    意                 :         所用函数在systick.c和led.c,key.c文件内
  8. *******************************************************************************/

  9. #include "public.h"
  10. #include "led.h"
  11. #include "key.h"
  12. #include "systick.h"


  13. /*******************************************************************************
  14. * 函 数 名         : key_pros
  15. * 函数功能                   : 按键处理函数,判断按键按下控制对应的LED灯
  16. * 输    入         : 无
  17. * 输    出         : 无
  18. *******************************************************************************/
  19. void key_pros()          //按键处理函数
  20. {
  21.         if(k_up==1)          //判断按键k_up是否按下
  22.         {
  23.                 delay_ms(10); //消抖处理
  24.                 if(k_up==1)         //再次判断按键k_up是否按下
  25.                 {
  26.                         GPIO_Write(GPIOC,(u16)0xfe);                        
  27.                 }
  28.                 while(k_up); //等待按键松开
  29.         }
  30.         if(k_down==0)
  31.         {
  32.                 delay_ms(10);
  33.                 if(k_down==0)
  34.                 {
  35.                         GPIO_Write(GPIOC,(u16)(0xfd));               
  36.                 }
  37.                 while(!k_down);
  38.         }
  39.         if(k_left==0)
  40.         {
  41.                 delay_ms(10);
  42.                 if(k_left==0)
  43.                 {
  44.                         GPIO_Write(GPIOC,(u16)(0xfb));               
  45.                 }
  46.                 while(!k_left);
  47.         }
  48.         if(k_right==0)
  49.         {
  50.                 delay_ms(10);
  51.                 if(k_right==0)
  52.                 {
  53.                         GPIO_Write(GPIOC,(u16)(0xf7));               
  54.                 }
  55.                 while(!k_right);
  56.         }        
  57. }

  58. /****************************************************************************
  59. * Function Name  : main
  60. * Description    : Main program.
  61. * Input          : None
  62. * Output         : None
  63. * Return         : None
  64. ****************************************************************************/
  65. int main()
  66. {                  
  67.         LED_Init();        //LED初始化
  68.         key_init();                 //按键端口初始化函数
  69.         GPIO_Write(GPIOC,(u16)(0xff));


  70. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码



下载:
32单片机实现按键功能.zip (2.85 MB, 下载次数: 84)


评分

参与人数 1黑币 +3 收起 理由
lcw880066 + 3 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:310068 发表于 2018-4-17 14:54 | 只看该作者
看起来不错 想学习
回复

使用道具 举报

板凳
ID:477269 发表于 2019-3-2 22:16 | 只看该作者
不错,跟着学习了         
回复

使用道具 举报

地板
ID:880219 发表于 2021-2-22 10:44 | 只看该作者
很好 很奈斯 感谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表