首页 > 其他分享 >03按键控制LED

03按键控制LED

时间:2024-03-01 18:15:55浏览次数:22  
标签:03 LED Pin void InitStruct Key 按键 GPIO

上回讲到点亮一个LED
    这次我们来实现用按键控制led 不带中断的方式 当然实例来源网络 加上自己整合 先熟悉流程

0.添加一个自己写的驱动库文件

    为什么添加 笔者想的是一个项目工程希望能适应很多个应用场景需要什么直接在里面调用分装好的函数就行

1.如何添加文件以及编写驱动后编译

    用上回案例讲到的实例工程添加一个Hardware文件夹 :
img

img
img
img
img

1.封装LED库函数

     Led.C 引脚按需配置

#include "stm32f10x.h"                  // Device header

// LED 初始化 
void LED_Init(void){

	GPIO_InitTypeDef GPIO_InitStruct;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOC,&GPIO_InitStruct);
	// 初始化 置1 
	GPIO_SetBits(GPIOC,GPIO_Pin_13);
}

void LED_ON(void){
	GPIO_ResetBits(GPIOC,GPIO_Pin_13);
}
void LED_OFF(void){
	GPIO_SetBits(GPIOC,GPIO_Pin_13);
}

// 高低电平反转 
void LED_Turn(void)
{
	if(GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_13)==0)
	{
		GPIO_SetBits(GPIOC,GPIO_Pin_13);
	}
	else
	{
		GPIO_ResetBits(GPIOC,GPIO_Pin_13);
	}
}

Led.h

#ifndef __LED_H
#define __LED_H

void LED_Init(void);   // led 引脚初始化
void LED_ON(void);     // led 开
void LED_OFF(void);    // led 关
void LED_Turn(void);   // led 反转

#endif

2.封装Key函数库

    和上步相同
Key.c

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

// 初始化接地按键
void Key_Init(void){
	GPIO_InitTypeDef  GPIO_InitStruct;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
	
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_12;
	
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	
	GPIO_Init(GPIOB,&GPIO_InitStruct);
	
	
}



uint8_t Key_GetNum(void){
	uint8_t Key_Num = 0;
	if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)== 0){
		Delay_ms(20);
		while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)== 0);
		Delay_ms(20);
		Key_Num = 1;	
	}
	if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)== 0){
		Delay_ms(20);
		while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)== 0);
		Delay_ms(20);
		Key_Num = 2;
	}


	return  Key_Num;
}


key.h

#ifndef __KEY_H
#define __KEY_H


void Key_Init(void);

uint8_t Key_GetNum(void);
		
#endif

编写功能需求

main.c


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

uint8_t KeyNum;
uint8_t StaNum=0;
int main(void)
{
	LED_Init();
	Key_Init();
	
	while (1)
	{
		KeyNum = Key_GetNum();
		if (KeyNum == 1)
		{
			LED_Turn();
		}

	}
}


现象就是按一下按键led pc13状态反转一次

img
编译下载看现象
img
img
这里的项目配置不要出错

标签:03,LED,Pin,void,InitStruct,Key,按键,GPIO
From: https://www.cnblogs.com/Yang-blackSun/p/18047656

相关文章

  • 2024-03-01-Linux高级网络编程(6-原始套接字)
    6.原始套接字6.1TCPUDP回顾数据报式套接字(SOCK_DGRAM)无连接的socket,针对无连接的UDP服务可通过邮件模型来进行对比流式套接字(SOCK_STREAM)面向连接的socket,针对面向连接的TCP服务可通过电话模型来进行对比这两类套接字似乎涵盖了TCP/IP应用的全部TCP......
  • $\text{20240301}$ 字符串练习题解
    \(\text{20240301}\)字符串练习题解一定要写冬令营的题吗?遗憾的。P9717给了一个\(n\)个数的首尾相接的字符串,求若干个操作后能形成的不同的字符串大小。一次操作定义为:将字符串内所有的\(\text{01}\)同时改成\(\text{10}\),如图。通过这张图我们似乎发现了一个规律,这......
  • Android 13接大屏时底下显示任务栏以及虚拟按键靠右问题
    Android13大屏显示时,界面底下显示任务栏,返回、home,recent按键显示会靠右。和Android12类似,但跟以往的Android系统不一样。之前Android12上面修改过这个显示:Android12大屏时底下显示任务栏以及虚拟按键靠右问题_androidtaskbar_HH同学的博客-CSDN博客但是,Android13上面又不......
  • 英语背单词 专四词汇 2024年03月 ChatGPT
     2024-03-01indexwordpronunciationpartsofspeechexplanationtranslationinChinese1inert/ɪˈnəːt/adjectiveLackingtheabilitytomoveorreact;inactive.惰性的;不活跃的2anticipation/ænˌtɪsɪˈpeɪʃən/nounTheactoflookingfo......
  • 2024.03 别急记录
    1.IOI2018-狼人/werewolf[省选/NOI-]题意简述:多次询问求是否存在一条\(s\tot\)的路径\(a_1,a_2,...,a_k\)和路径上一个点\(a_i\)使\(a_1,...,a_i\in[L,n]\)且\(a_i,...,a_k\in[1,R]\)。首先求出两棵kruskal重构树:第一棵树边权值设为\(\min(u,v)\),由大到小......
  • 240301C语言笔记
    一、数组数组里面放数据的,数组变量相当于指针int*ptr=&myArray[0];int*ptr=myArray声明数组:typearrayName[arraySize]初始化大括号获取长度sizeofintlength=sizeof(numbers)/sizeof(numbers[0]);二、内存管理:四个区:自上而下栈区先进后出自动变量、函......
  • 2024-03-01-Lniux高级网络编程(5-网络通信过程)
    5.网络通信过程5.1网络通信概述​通过对TCP、UDP的编程学习,能够完成对实际项目需求中网络功能的开发,为了提高程序的稳定性以及效率等等,通常会使用多线程、多进程开发;根据功能需求的不同,可以利用C/S、B/S模式进行开发。作为嵌入式工程师,需要时整个网络通信的过程进......
  • 关于import cvxopt :ImportError: DLL load failed: 找不到指定的模块。
    前提:前天再写python代码时遇到需要使用到cvxopt包求解QP问题,但是之前却没有安装过这个包,所以对其进行安装。报错:在pipinstallcvxopt后直接使用,出现报错。之后在网上查各种解决办法的方案,但在运行后均出现不同报错情况。我所需要解决的问题主要是numpy、scipy和cvxopt之间不兼容......
  • 前端学习-vue视频学习003-setup(重要)
    学习教程-尚硅谷视频将原vue2的格式改为vue3---使用setup要点:this在vue3中被弱化,setup函数中不能使用this定义数据时,如果不是响应式的(暂时还不是很理解响应式),不会触发页面的变化vue3支持一个标签直接写多次,如<template><Person/><Person/><Person/></t......
  • Rainypaster's Daily Notebook
    写在前面记录一天生活,防颓废。因为学校要求,被迫开工,众所周知,一篇文章应该放一个头图吧。有任何问题请联系本人微信公众号:yexc的编程成长日记,大部分时候cnblogs不在线。记录2-29摘要:今天是2.29号的疯狂星期四!下一次要28年后啦~!||英语爆炸啥也不说了,上图。《小蓝本......