这是我参与8月更文挑战的第13天,活动详情查看:8月更文挑战
知识介绍
引言
在我们的日常生活中,使用按键控制电器开关的情况还是非常多的,比如说按键控制LED灯的亮灭,按键控制继电器的吸合,按键控制电机的正反转等操作。同样按键在嵌入式开发也非常的重要,比如说按下KEY1,使LED1点亮,再按下KEY1,LED1熄灭。按键的种类有很多,然而今天我们要研究的是贴片按键的使用,我们今天的实例为:通过KEY1的状态来控制LED的点亮与熄灭。
工程文件放置
只有在添加进这一串之后,才能使用头文件集合 stm32f10x_conf.h
选择类型
初始化时钟从哪找
在stm32f10x_rcc.c中。
断言函数
重要程序
LED.c
#include "YANG_LED.h"
void LED_GPIO_Config(void)
{
/*定义3个GPIO_InitTypeDef 类型的结构体*/
GPIO_InitTypeDef GPIO_InitStruct1;
GPIO_InitTypeDef GPIO_InitStruct2;
/*开启 LED 相关的 GPIO 外设时钟*/
RCC_APB2PeriphClockCmd(LED_GPIO_CLK, ENABLE);
GPIO_InitStruct1.GPIO_Pin = LED_B_GPIO_PIN;
GPIO_InitStruct2.GPIO_Pin = LED_R_GPIO_PIN;
GPIO_InitStruct1.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct1.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStruct2.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct2.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct1);
GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct2);
}
复制代码
LED灯的原理图如下,通过对IO口的相关操作,进行对LED灯的相应控制。
KEY.h
#ifndef __KEY_H
#define __KEY_H
#include "stm32f10x.h"
int anjian(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void KeyInit(void);
#endif /* __KEY_H */
复制代码
KEY.c
#include "key"
void KeyInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//设置端口模式为浮空输入
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
int anjian(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
u8 anjianbianliang;
int anjianzhi;
anjianbianliang=GPIO_ReadInputDataBit(GPIOx, GPIO_Pin);
if(anjianbianliang==1)
anjianzhi=1;
else if(anjianbianliang==0)
anjianzhi=0;
return anjianzhi;
}
复制代码
main.c
#include "stm32f10x.h" // 相当于51单片机中的 #include <reg51.h>
#include "LED.h"
#include "KEY.h"
int main(void)
{
LED_GPIO_Config();
Key_Init();
while (1)
{
if(anjian(GPIOC,GPIO_Pin_8)==0)
{
LED_G(ON);
}
if(anjian(GPIOC,GPIO_Pin_9)==0)
{
LED_G(OFF);
}
}
复制代码
仿真图
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END