【STM32】按键控制LED亮灭实验——GPIO、LED、KEY、SYS

这篇具有很好参考价值的文章主要介绍了【STM32】按键控制LED亮灭实验——GPIO、LED、KEY、SYS。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

按键控制LED亮灭实验

实验目的

无锁存时:当按下独立按钮时LED亮,松开LED灭。
锁存时:当按下独立按钮时LED亮,松开LED仍亮,再按下独立按钮时LED熄灭。

实验过程

硬件部分

stm32一个按键控制led灯亮灭,stm32,单片机,嵌入式硬件

软件部分

1、引入头文件

#include "stm32f10x.h" //STM32头文件
#include "sys.h"
#include "delay.h"
#include "led.h"
#include "key.h" 

2、主函数
首先时钟、led、按键初始化

int main (void)//主程序
{   u8 a; //定义变量
	//初始化程序
	RCC_Configuration(); //时钟设置 修改需要去sys.c内修改
	LED_Init();//LED初始化 LED连接哪个IO口、输入输出等修改需要去led.c内修改

	KEY_Init();//按键初始化 按键连接哪个IO口、输入输出等修改需要去key.c内修

	//主循环
	while(1){

		//示例1:无锁存
		if(GPIO_ReadInputDataBit(KEYPORT,KEY1)){ //读按键接口的电平 KEYPORT定义IO口组GPIOA或GPIOB,KEY1定义IO口如GPIO_Pin_0等,修改在key.h里修改
			GPIO_ResetBits(LEDPORT,LED1); //LED灯都为低电平(0) (LEDPORT定义IO口组GPIOA或GPIOB,LED1定义IO口如GPIO_Pin_0等,修改在led.h里修改
		}else{	
        	GPIO_SetBits(LEDPORT,LED1); //LED灯都为高电平(1) 
		}

		示例2:无锁存
		GPIO_WriteBit(LEDPORT,LED1,(BitAction)(!GPIO_ReadInputDataBit(KEYPORT,KEY1))); //引脚输出状态取反     GPIO_ReadInputDataBit(KEYPORT,KEY1)读key1电平,读出输出状态

		示例3:有锁存
	if(!GPIO_ReadInputDataBit(KEYPORT,KEY1)){ //读按键接口的电平
			delay_ms(20); //延时去抖动
			if(!GPIO_ReadInputDataBit(KEYPORT,KEY1)){ //读按键接口的电平
				GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1-GPIO_ReadOutputDataBit(LEDPORT,LED1))); //LED取反
				while(!GPIO_ReadInputDataBit(KEYPORT,KEY1)); //等待按键松开 
			}
	}

		//示例4:有锁存
//		if(!GPIO_ReadInputDataBit(KEYPORT,KEY1)){ //读按键接口的电平
//			delay_ms(20); //延时20ms去抖动
//			if(!GPIO_ReadInputDataBit(KEYPORT,KEY1)){ //读按键接口的电平
//				//在2个LED上显示二进制加法
//				a++; //变量加1
//				if(a>3){ //当变量大于3时清0
//					a=0; 
//				}
//				GPIO_Write(LEDPORT,a); //直接数值操作将变量值写入LED(LED在GPIOB组的PB0和PB1上)
//				while(!GPIO_ReadInputDataBit(KEYPORT,KEY1)); //等待按键松开 
//			}
//		}


	}
}

锁存时:当按下独立按钮时LED亮,松开LED仍亮,再按下独立按钮时LED熄灭。常用类似电灯开关。
程序:
1、读取IO口的电平
2、延时去抖动
3、读取IO口电平
4、如果为高电平则进入循环,灯常亮,直至按键再次按下转换电平,灯熄灭。

if(!GPIO_ReadInputDataBit(KEYPORT,KEY1)){ //读按键接口的电平
	  	     delay_ms(20); //延时去抖动
			if(!GPIO_ReadInputDataBit(KEYPORT,KEY1)){ //读按键接口的电平
				GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1-GPIO_ReadOutputDataBit(LEDPORT,LED1))); //LED取反
				while(!GPIO_ReadInputDataBit(KEYPORT,KEY1)); //等待按键松开 
			}

GPIO_WriteBit单个IO口置0或1

GPIO_WriteBit(GPIOB,GPIO_Pin_3 , 0);

GPIO_SetBits多个IO口置0或1

GPIO_SetBits(GPIOD,GPIO_Pin_0 | GPIO_Pin_5 | GPIO_Pin_7);

区别
一个只能单个引脚操作
一个可对多个引脚操作
————————————————————————————————————————————————
STM32引脚输出状态取反方法,学习原子板时,原码LED0,LED1,用位带操作取反状态,不习惯,从别的图书中找到用库函数取反方法,摘录如下:
使用的是PB5,PE5,这两个分别连一个LED灯。

GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5)));
GPIO_WriteBit(GPIOE,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOE,GPIO_Pin_5)))

简释:
GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5),是输出状态;
GPIO_WriteBit(),设置引脚值库函数
————————————————————————————————————————————————文章来源地址https://www.toymoban.com/news/detail-713905.html

到了这里,关于【STM32】按键控制LED亮灭实验——GPIO、LED、KEY、SYS的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【stm32----按键中断实验,按键控制LED灯】

    1、按下KEY1,LED1亮,再次按下KEY1,LED1灭; 2、按下KEY2,LED2亮,再次按下KEY2,LED2灭; 3、按下KEY3,LED3亮,再次按下KEY3,LED3灭; 一、头文件 1、gpio.h 2、key.h 二、初始化函数及功能函数 1、gpio.c 2、key.c 三、中断处理函数 do_irq.c 四、主函数 main.c 依次按下key3、key2、key1、key2

    2024年02月04日
    浏览(50)
  • 【stm32】hal库学习笔记-GPIO按键控制LED和蜂鸣器(超详细!)

    注:本学习笔记基于stm32f4系列 使用的开发板为正点原子stmf407ZGT6探索者开发板 GPIO引脚使用时,可输入或输出数字信号 例如: 检测按键输入信号(Read_Pin)输出信号(Write_Pin) 输出信号点亮或熄灭LED GPIO引脚内部结构图 GPIO状态 输入浮空状态 :上拉下拉电阻均不使用(复位时

    2024年01月20日
    浏览(49)
  • 【STM32】控制LED灯和蜂鸣器的按键实验

    🐱作者:一只大喵咪1201 🐱专栏:《STM32学习》 🔥格言: 你只管努力,剩下的交给时间! 本喵这次介绍的实验是按键实验,同样使用STM32F103ZE型号的芯片,在开发板上有4个按键,实验目的是每按一个按键就会让LED灯或者是蜂鸣器的工作状态发生反转,下面本喵来详细介绍。

    2024年02月03日
    浏览(55)
  • arm学习之stm32设备树学习-中断控制led灯亮灭+字符设备指令控制led灯亮灭

    中断控制led灯亮灭 驱动文件源码 led-key.c 字符设备指令控制led灯亮灭 驱动文件 led-cmd.c 应用文件 led.c

    2024年02月14日
    浏览(46)
  • 驱动控制STM32LED灯的两秒,亮灭

    2024年02月12日
    浏览(43)
  • STM32通过串口发送指令控制LED灯亮灭OLED并显示命令

    先来看看程序运行的结果吧: 接下来就不说废话了,自己看源代码吧!每一行我都做了注释: 首先是主函数main.c文件: 接下来是LED.h文件: 接下来是LED.c文件: 记下来是串口相关的Serial.h文件: 接下来就是最后一个serial.c文件了: 所有文件在工程中的目录为: 工程编译后下

    2024年04月16日
    浏览(44)
  • 十、stm32-ESP8266(串口透传、MCU透传、控制LED亮灭)

    见博客:stm32f103c8t6新建固件库模板(可自取) 固件库模板 MDK5开发环境 stm32参考手册 UART串口协议 stm32中断概念 ESP8266模块资料 利用固件库模板点灯工程(下面第三行,手动狗头) CH340 USB→TTL模块 ESP8266模块 手机软件 实验程序已经发布到百度网盘,本文末有链接可以自取

    2023年04月19日
    浏览(45)
  • 51单片机按键控制LED亮灭

    通过单片机按键控制LED亮灭与传统电路的物理逻辑不同,在物理逻辑中开关控制电路的通断来控制LED的亮灭,而通过单片机完成该项目至于要不断地读取按键所连接IO口的电平来判断对LED连接的IO口输出的电平即可。 原理图如下:  根据原理图,我们可以发现按键按下时P2.1口

    2023年04月18日
    浏览(49)
  • 串口通信(stm32F4)——通过串口助手发送led on或者led off控制LED灯的亮灭

    通过串口助手发送led on来点亮LED灯,发送led off来关闭LED灯(这里是LED1,其端口是GPIOF,引脚是PIN10,串口是USART1,其端口是GPIOA,引脚是PIN9、PIN10,一个用来收数据,一个用来发收据) 初始化LED; 初始化串口; 编写接收数据中断函数; 编写空闲中断函数。 2.1 初始化LED 2.2 初

    2024年02月16日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包