STM32输入函数

发布者:和谐共融最新更新时间:2025-01-22 来源: jianshu关键字:STM32  输入函数 手机看文章 扫描二维码
随时随地手机看文章

按键输入实验(对于按键函数还是有点迷)

接下来我们看看头文件 key.h 里面的代码

ifndef __KEY_H

define __KEY_H

include 'sys.h'

define KEY0 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)//读取按键 0

define KEY1 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)//读取按键 1

define WK_UP GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)//读取按键 WK_UP)

define KEY0_PRES 1 //KEY0 按下

define KEY1_PRES 2 //KEY1 按下

define WKUP_PRES 3 //WK_UP 按下(

void KEY_Init(void); //IO 初始化
u8 KEY_Scan(u8); //按键扫描函数

endif

key.c文件

include 'key.h'  //调用按键库

include 'sys.h'   //调用stm32f10x.h库

include 'delay.h'  //调用延时库

//按键初始化函数
void KEY_Init(void) //IO 初始化
{
GPIO_InitTypeDef GPIO_InitStructure;    //结构题指针
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE,ENABLE); //使能 PORTA,PORTE 时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4;//GPIOE.3~4
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入
GPIO_Init(GPIOE, &GPIO_InitStructure); //初始化 GPIOE3,4

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //初始化 WK_UP-->GPIOA.0
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0 设置成输入,下拉
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化 GPIOA.0
}
//按键处理函数
//返回按键值
//mode:0,不支持连续按;1,支持连续按;
//0,没有任何按键按下
//1, KEY0 按下
//2, KEY1 按下
//3, KEY3 按下 WK_UP
//注意此函数有响应优先级,KEY0>KEY1>KEY_UP!!
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;// 无按键按下
}

主函数main

include 'led.h'

include 'delay.h'

include 'key.h'

include 'sys.h'

include 'beep.h'

//按键输入实验
int main(void)
{

u8 key;
delay_init(); //延时函数初始化
LED_Init(); //LED 端口初始化
KEY_Init(); //初始化与按键连接的硬件接口
BEEP_Init(); //初始化蜂鸣器端口
LED0=0; //先点亮红灯
while(1)
{
key =KEY_Scan(0); //得到键值
if(key)
{ switch(key)
{ case WKUP_PRES: //控制蜂鸣器
BEEP=!BEEP;break;
case KEY1_PRES: //控制 LED1 翻转
LED1=!LED1;break;
case KEY0_PRES: //同时控制 LED0,LED1 翻转
LED0=!LED0;
LED1=!LED1;break;
}
}else delay_ms(10);
}
}

关键字:STM32  输入函数 引用地址:STM32输入函数

上一篇:STM32开发环境搭建
下一篇:STM32 报错:identifier is undefined

推荐阅读最新更新时间:2026-03-19 11:51

stm32按键(双模式,双函数选择)
不使用CubeMX 一、新建方法不说了,记得将key和led文件封装进去 二、ked.c代码: 1、按键初始化部分 2、第一个按键函数 注意: 这个函数提供两种模式(是否连按) 注意这个函数存在响应优先级 3、第二个按键函数 三、key.h部分: 注意: 有两种方式读取电位,一种用位带操作读取,一种用HAL库读取 声明了.c文件里的三个函数,宏定义了一些特殊常量 四、main.c中: 通过这个KEY_Scan();内的数字来选择扫描模式 0和1 使用CubeMX 一、首先记得先把delay函数和KEY函数封装好 二、端口初始化部分都在gpio.c里面
[单片机]
<font color='red'>stm32</font>—<font color='red'>按键</font>(双模式,双<font color='red'>函数</font>选择)
STM32中对Key_GPIO_Config()函数的理解之轮询控制按键LED
STM32中对Key_GPIO_Config()函数的理解(自定义)
[单片机]
<font color='red'>STM32</font>中对Key_GPIO_Config()<font color='red'>函数</font>的理解之轮询控制<font color='red'>按键</font>LED
STM32函数详解----(通用输入/输出GPIO)
初始化和配置相关函数 1.void GPIO_DeInit (GPIO_TypeDef* GPIOx) 函数解释:gpio的反初始化函数,该函数的作用是把GPIO相关的寄存器配置成上电复位后的默认状态,在第一次初始化前或者不在使用某一接口后,可以调用该函数。 参数:GPIOx,GPIO的分组,如 GPIOA,GPIOB,GPIOC等的宏定义。 2.void GPIO_Init (GPIO_TypeDef* GPIOx,GPIO_InitTypeDef* GPIO_InitStruct) 函数解释:GPIO的初始化函数,该函数的作用是对io进行初始化。 参数:(1)GPIOx,GPIO的分组,如 GPI
[单片机]
stm32函数学习篇通用定时器输入捕获功能
实现功能:PA8随意延时驱动led灯闪烁,并且将PA8用杜邦线连接到PA7口,PA7是通用定时器TIM3的2通道,在TIM3_CH2触发中断程序中取反连接到PD2口的led灯,指示中断程序运行,并且每次进入中断后改变触发捕获的极性。实现两个led灯会交替闪烁。 先有必要了解stm32定时器的输入触发模块,如下图: 需要注意的是,一眼望去一个定时器似乎有8个通道,左边四个,右边四个,但其实左边和右边是共用相同的IO引脚,所以名称标注是一模一样。也就是说,每个通用定时器都只有四个独立通道,当某一通道作为了输入触发功能那就不能再作为输出匹配功能。这一点我们也可以从其他地方找到印证。比如TIM_ITConfig()函数中如下
[单片机]
<font color='red'>stm32</font>库<font color='red'>函数</font>学习篇通用定时器<font color='red'>输入</font>捕获功能
基于STM32F407库函数开发按键控制LED灯
按键控制灯的亮与灭的效果图: 一、寄存器开发与库函数开发的优缺点 1、寄存器开发 缺点: (1)开发难度大,查阅相关手册比较多 (2)开发效率相对低,产品周期长 (3)可维护性较差 (4)可移植性、阅读性差 优点: 运行效率高。 2、库函数开发 优点: (1)开发难度小,有库函数封装,即可实现功能 (2)开发效率高,产品周期短 (3)可维护性高 (4)可移植性、阅读性强 缺点: 运行效率相对寄存器低一些。 STM32库函数实际是ST公司对寄存器开发封装。 二、LED库函数开发 LED库开发要添加库文件:stm32f4xx_gpio.c (1)原理图可参看上篇文章:入门篇 | STM32F407寄存器开发--点灯 (2)
[单片机]
基于STM32F407库<font color='red'>函数</font>开发<font color='red'>按键</font>控制LED灯
武林教你学PIC32(三)教你用库函数写中断按键
我接触的32位单片机:STM32,LM3S都有库函数,利用库函数能够加快项目进度,不需要去底层查看寄存器等等。PIC32的库函数位置在: D:\Program Files\Microchip\MPLAB C32\pic32-libs\peripheral 如果你安装在C盘,改下路径就可以了,我们可以到了各个外设都封装好了。网络上有个库函数说明书,我网络不好下载不了,就把地址发出来吧: http://hades.mech.northwestern.edu/images/5/5e/32-bit-Peripheral-Library-Guide.pdf 下面就教大家使用库函数做中断按键触发LED亮灭 从按键的连接看
[单片机]
武林教你学PIC32(三)教你用库<font color='red'>函数</font>写中断<font color='red'>按键</font>
三种按键处理函数
1 void keyScan(void) 2 { 3 char i; 4 uint8 m; 5 uint8 R0 = 0; 6 TRISB=0x38; //xls 2012-11-26 增加复位键RB5 7 8 R0 = PORTB; //RB3,RB4,RB5按键读取 9 R0 &=0x38; //保留键值 10 R0 = ~R0; //正逻辑 11 /*以下是RC滤波处理,R0,R1對應於KEY1,KEY2的BUF*/ 12 datakey.allkey = (R0 3);//将读到的键值移至最右端 比如当前在RB1 顾右移一位 如果为RB4 R3则右移3位 13 for
[单片机]
单片机按键检测函数
/******************************************************************* 函数功能:判断某一按键的状态; 返回值:0x00-未按键,0x01-短按键,0x02-长按键;(本程序不设连发功能) 注意:本长短按键是在同一按键上实现; 长按键是持续按下2秒后认为是长按键,此时可以执行按键功能程序,必须释放 按键后才可以再次执行按键判断; 短按键是按下时间在2秒以内并释放的为短按键,含20ms的防抖,按键执行是在 按键释放后执行的; 为了定时方便,本函数是每10ms执行一次的,如果执行周期有变,注意更改相 关变量。 (可以将此函数以结构体形式扩展为多个通道检
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved