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)文章来源:https://www.toymoban.com/news/detail-522717.html
#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模板网!