STM32按键控制LED

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

1.利用模块化编程对LED

#include "stm32f10x.h"
//首先是初始化LED,开始使LED为高电平(即使之全部熄灭),LED为推挽输出
    void LED_Init(void)
    {
        //打开RCC
	    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD,ENABLE);
        //配置GPIO的三种模式
	    GPIO_InitTypeDef GPIO_InitStruct;
	    GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
	    GPIO_InitStruct.GPIO_Pin=GPIO_Pin_8;
	    GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
	    GPIO_Init(GPIOA,&GPIO_InitStruct);
	
	    GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
	    GPIO_InitStruct.GPIO_Pin=GPIO_Pin_2;
	    GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
	    GPIO_Init(GPIOD,&GPIO_InitStruct);

	    开始使LED为高电平(即使之全部熄灭)
	    GPIO_SetBits(GPIOA, GPIO_Pin_8);
	    GPIO_SetBits(GPIOD, GPIO_Pin_2);
	}
    
    

2.设置LED的几种状态(亮,灭,和利用按键反转电平)

//为LED8的亮状态
void LED8_GPIOA_ON(void)
{
	GPIO_ResetBits(GPIOA, GPIO_Pin_8);
}

//为LED8的灭状态
void LED2_GPIOA_OFF(void)
{
	GPIO_SetBits(GPIOA, GPIO_Pin_8);
}

//利用按键进行电平反转控制LED亮灭
void LED8_Turn(void)
{
	//读取外部电平的值
	if(GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_8)==0)
	{
		GPIO_SetBits(GPIOA, GPIO_Pin_8);
	}
	else
	{
		GPIO_ResetBits(GPIOA, GPIO_Pin_8);
	}
	
}

//为LED2的亮状态
void LED2_GPIOD_ON(void)
{
	GPIO_ResetBits(GPIOD, GPIO_Pin_2);
}

//为LED8的灭状态
void LED2_GPIOD_OFF(void)
{
	GPIO_SetBits(GPIOD, GPIO_Pin_2);
}

//利用按键进行电平反转控制LED亮灭
void LED2_Turn(void)
{
	//读取外部电平的值
	if(GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_2)==0)
	{
		GPIO_SetBits(GPIOD, GPIO_Pin_2);
	}
	else
	{
		GPIO_ResetBits(GPIOD, GPIO_Pin_2);
	}
	
}

3.按键

(1)按键初始化

(2)如果按键按下做什么(这里是控制LED)

#include "stm32f10x.h"                  // Device header
#include "Delay.h"  

void Key_Init(void)
{
    //打开RCC
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);
    //配置GPIO三种模式
	GPIO_InitTypeDef GPIO_InitStruct;
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;//注意按键是输入给CPU信号的,所以是使用上拉输入或者是下拉输入,具体看电路情况
	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_15;
	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStruct);//KEY_1  keyNumber=1;
	
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;
	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_5;
	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOC,&GPIO_InitStruct);//KEY_0  keyNumber=3;
	
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPD;
	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0;
	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStruct);//WK_UP  keyNumber=2;
}

uint8_t GetKeynum(void)
{
    uint8_t keyNumber=0; 
    //如果这个输入的信号为0,则代表按下,为低电平
    if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_15)==0)
	{
		Delay_ms(20);
		while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_15)==0)
		{
			Delay_ms(20);
		}
		keyNumber=1;
	}

    if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)==1)
	{
		Delay_ms(20);
		while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)==1)
		{
			Delay_ms(20);
		}
		keyNumber=2;
	}
	
	if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_5)==0)
	{
		Delay_ms(20);
		while(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_5)==0)
		{
			Delay_ms(20);
		}
		keyNumber=3;
	}
	return keyNumber;
}

4,主函数文章来源地址https://www.toymoban.com/news/detail-522717.html

uint8_t Key;
int main(void)
{
	LED_Init();
	Key_Init();
	while(1)
	{
		Key=GetKeynum();
		if(Key==1) //KEY_1  keyNumber=1;
		{
			LED8_Turn();


		}
		if(Key==2)//WK_UP  keyNumber=2;
		{
			LED2_Turn();
		}
		if(Key==3)//KEY_0  keyNumber=3;
		{
			while(1)
			{
				LED8_GPIOA_ON();
				LED2_GPIOD_ON();
				Delay_ms(100);
				LED8_GPIOA_OFF();
				LED2_GPIOD_OFF();
				Delay_ms(100);
			}
		}
	}
}

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

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

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

相关文章

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

    无锁存时:当按下独立按钮时LED亮,松开LED灭。 锁存时:当按下独立按钮时LED亮,松开LED仍亮,再按下独立按钮时LED熄灭。 硬件部分 软件部分 1、引入头文件 2、主函数 首先时钟、led、按键初始化 锁存时:当按下独立按钮时LED亮,松开LED仍亮,再按下独立按钮时LED熄灭。常

    2024年02月08日
    浏览(100)
  • STM32G030C8T6:使用按键控制LED亮灭(外部中断)

    本专栏记录STM32开发各个功能的详细过程,方便自己后续查看,当然也供正在入门STM32单片机的兄弟们参考; 本小节的目标是,系统主频64 MHZ,采用高速外部晶振,通过KEY1 按键的PA0 引脚配置成中断输入引脚,PB9引脚配置成输出,每次按键,PA0 引脚就会进入一次外部中断,每进

    2024年02月05日
    浏览(43)
  • FPGA通过一个按键控制三个LED灯亮灭(状态机法)

    FPGA型号:Cyclone IV EPFCE10F17C8    开发工具:Quartus13.0专业版  Modelsim 10.1d 文章目录 状态机 一、设计思路 二、代码设计 1.顶层代码 2.测试代码 三、仿真 状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作、完成

    2024年02月02日
    浏览(92)
  • 毕业设计 基于51单片机的手机蓝牙控制8位LED灯亮灭设计

    选题之前,同学们要弄明白一件事情,做毕业设计是干什么用的! 这里我告诉大家,毕业设计对于你来说,不是让你去搞研究,掌握运用所学知识的,也不是让你去比谁做的毕业设计多么牛逼,多么厉害。 说白点,它的作用就是一个,让你顺利毕业,能够拿到学位证,毕业

    2024年02月07日
    浏览(68)
  • STM32 按键控制的灯亮或灭

    目录 1.STM32CubeMX的配置 2.轮询模式下的控制(代码) 3.上电烧录摁下复位键,摁下按键1 ,亮红灯,摁下按键2,亮绿灯,摁下按键3,亮蓝灯 1.STM32CubeMX的配置 按原理图去设置引脚状态  GPIO输入模式读取按键状态,输出模式控制灯的状态  右键进行重命名按键分别为,KEY1,KEY

    2024年02月07日
    浏览(38)
  • HC-05蓝牙模块与STM32控制led灯亮详解

    HC-05模块是一种基于蓝牙协议的简单无线通信设备,共有6个引脚,其中两个引脚通过stm32的两个含TX和RX的接口与之进行通信,一般用于无线控制,智能家居等。 VCC:用于供电 GND:用于供电 TX(发送):与单片机某一RX口进行通信 RX(接收):与单片机某一TX口进行通信 一句话

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

    2024年02月12日
    浏览(46)
  • 51单片机按键控制LED亮灭

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

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

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

    2023年04月19日
    浏览(48)
  • STM32按键控制LED

    1.利用模块化编程对LED 2.设置LED的几种状态(亮,灭,和利用按键反转电平) 3.按键 (1)按键初始化 (2)如果按键按下做什么(这里是控制LED) 4,主函数

    2024年02月12日
    浏览(42)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包