【STM32 基础实验按键控制LED】

一、元器件介绍

本次实验应用的是 3**6*5mm轻触开关2脚微动两脚的按键,可直插面包板孔,使用方便。
轻触开关

二、基于stm32f10c8t6 基础实验按键控制LED

(1)按键输入原理

首先知道LED是通过stm32芯片配置GPIO驱动点亮或熄灭,那么通过配置按键的I/O状态输入给我们的stm32转而控制LED对应的I/O口状态,达到按键控制点亮LED或熄灭的效果。简单的理解就是通过按键输入一个信号给stm32,再由stm32传递这个信号,给配置LED的寄存器响应这个信号,改变电平的转换,实现点亮或熄灭。

(2)代码部分

key.c

#include "stm32f10x.h"
#include "key.h"
#include "delay.h"

void KEY_Init(void)
 {
	GPIO_InitTypeDef  GPIO_InitStructure;//声明结构体——GPIO
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//时钟使能GPIOB
	 //RCC APB2PeriphClockcmd(RCC APB2Periph GPIOB | RCC APB2Periph AFIO,ENABLE); 
	 //GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_4|GPIO_Pin_6;//定义引脚GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_4|GPIO_Pin_6
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;    //上拉输入模式   Out_PP;//推挽输出模式
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//频率50Mhz
	GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化GPIOA
 }
  u8 KEY_Scan(void) //键值反馈
 {
		static u8 key_up=1;  //按键松开状态
	 if(key_up&&(KEY1==0||KEY2==0||KEY3==0||KEY4==0))
	 {
		 delay_ms(20);   //按键去抖
		 key_up=0;        //说明有闭合
		 if(KEY1==0)
		 {
			 return 1;
		 }
		 else if(KEY2==0)
		 {
		 return 2;
		 }
		  //else if(KEY3==0&&KEY4==0) 同时按响应功能
		 else if(KEY3==0)
		 {
		 return 3;
		 }
		 else if(KEY4==0)
		 {
		 return 4;
		 }
	 }
	 else if(KEY1==1&&KEY2==1&&KEY3==1&&KEY4==1)
		 key_up=1;
	 return 0;
}
 

key.h

#include "stm32f10x.h"
#ifndef __KEY_H
#define __KEY_H
//#define KEY  GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0)
#define KEY1 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)
#define KEY2 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)
#define KEY3 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_4)
#define KEY4 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_6)

void KEY_Init(void);
u8 KEY_Scan(void);

#endif

main.c

#include "stm32f10x.h"
#include "sys.h"
#include "led.h"
#include  "key.h"
#include "delay.h"



u8 t;
u8 k1=0,k2=0,k3=0,k4=0;


int main()
{
	LED_Init();
	KEY_Init();
	delay_init();
	while(1)
	{
		t=KEY_Scan();   //获得键值
		if(t)
		{
			switch(t)
			{
				case 1:
					if(k1==0)
						GPIO_ResetBits(GPIOB,GPIO_Pin_15);
					else
						GPIO_SetBits(GPIOB,GPIO_Pin_15);
					k1=!k1;     
					break;
					case 2:
					if(k2==0)
						GPIO_ResetBits(GPIOB,GPIO_Pin_14);
					else
						GPIO_SetBits(GPIOB,GPIO_Pin_14);
					k2=!k2;
					break;
					case 3:
					if(k3==0)
						GPIO_ResetBits(GPIOB,GPIO_Pin_13);
					else
						GPIO_SetBits(GPIOB,GPIO_Pin_13);
					k3=!k3;
					break;
					case 4:
					if(k4==0)
						GPIO_ResetBits(GPIOB,GPIO_Pin_12);
					else
						GPIO_SetBits(GPIOB,GPIO_Pin_12);
					k4=!k4;
					break;
			}
		}
		else delay_ms(100);
	} 
	
	
}



(3)效果展示

按键控制LED实验现象:

按键控制LED

三、总结与扩展

总结:
根据以上内容,学习按键应用还是容易理解的,输入一个信号给stm32,再由stm32传递这个信号,给配置LED的寄存器响应这个信号,改变电平的转换,实现点亮或熄灭。
按键主要是应用输入信号作为开关的作用。
所以要有信心一步步积累理论和实践经验,一起学习加油!
扩展:可通过按键可以开关灯、抢答器、中断等实验。那么就分享到这,大胆尝试实践探索吧,欢迎讨论。

附上参考文献链接与视频链接出处

链接: 按键分享视频
链接: 源码例程
提取码:3232

  • 7
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值