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.設(shè)置LED的幾種狀態(tài)(亮,滅,和利用按鍵反轉(zhuǎn)電平)
//為LED8的亮狀態(tài)
void LED8_GPIOA_ON(void)
{
GPIO_ResetBits(GPIOA, GPIO_Pin_8);
}
//為LED8的滅狀態(tài)
void LED2_GPIOA_OFF(void)
{
GPIO_SetBits(GPIOA, GPIO_Pin_8);
}
//利用按鍵進行電平反轉(zhuǎn)控制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的亮狀態(tài)
void LED2_GPIOD_ON(void)
{
GPIO_ResetBits(GPIOD, GPIO_Pin_2);
}
//為LED8的滅狀態(tài)
void LED2_GPIOD_OFF(void)
{
GPIO_SetBits(GPIOD, GPIO_Pin_2);
}
//利用按鍵進行電平反轉(zhuǎn)控制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)文章來源:http://www.zghlxwxcb.cn/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,主函數(shù)文章來源地址http://www.zghlxwxcb.cn/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);
}
}
}
}
到了這里,關(guān)于STM32按鍵控制LED的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!