总结写的stm32的KEY控制LED

stm32的学习就是弄懂是怎么进行软件配置,先明白硬件连接,再结合起来;


#include "stm32f4xx.h"

#include "led.h"


#define KEY0  GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)   // 这里读取IO的状态,将stm32的IO口作为输入使用
#define KEY1  GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)
#define KEY2  GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)


#define LED0 PFout(9)                                  //DSO  LED的端口定义,可以有位带操作实现某个IO口的一个位;这个是正点原子中的,标准库中没有
#define LED1 PFout(10)
#define LED2 PFout(9)&&PFout(10)




void KEY_init(void);                 // 
u8 KEY_scan( u8 );
void delay(void)                       // 使用最简单的方式实现延迟,这种方式仅仅用于测试
{
int i,j;
for(i=0;i<100;i++)
for(j=0;j<100;j++);
}




int main()
{
u8 k;


LED_init();   //
KEY_init();
GPIO_SetBits(GPIOF,GPIO_Pin_9);      // 使用固件库操作来实现IO口操作
delay();


while(1)
{

k=KEY_scan(0);                                               //  读取IO口状态


if(k){
switch(k){
case 1: 
GPIO_SetBits(GPIOF,GPIO_Pin_9);
 GPIO_SetBits(GPIOF,GPIO_Pin_10);
break;
case 2:
GPIO_ResetBits(GPIOF,GPIO_Pin_9);
 GPIO_ResetBits(GPIOF,GPIO_Pin_10);
break;
case 3:
GPIO_SetBits(GPIOF,GPIO_Pin_9|GPIO_Pin_9);
break;

}
}
delay();



//delay();
// GPIO_ResetBits(GPIOF,GPIO_Pin_9);
// GPIO_SetBits(GPIOF,GPIO_Pin_10);
//
// GPIO_ResetBits(GPIOF,GPIO_Pin_9);
// GPIO_SetBits(GPIOF,GPIO_Pin_10);
}

return 0;
}
void KEY_init(void){
GPIO_InitTypeDef GPIO_InitStruct;

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);

GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN;  // ÕâÀïµÄIO¿Ú×÷ΪÊä³ö£¬Êä³öµÍµçƽ µÆÁÁ
GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;
GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_UP; 
GPIO_InitStruct.GPIO_Speed=GPIO_Fast_Speed;

GPIO_Init(GPIOE,  &GPIO_InitStruct);


}
u8 KEY_scan( u8 mode){
// mode ÊÇ·ñÖ§³ÖÁ¬Ðø°´
static u8 key=1;
if(mode) key=1;
if(key&&(KEY0==0|KEY1==0||KEY2==0)){
delay();
key=0;
 if(KEY0==0)
return 1;
else if(KEY1==0)
return 2;
else if(KEY2==0)
return 3;


}else if(KEY0==1&&KEY1==1&&KEY2==1) key=1;


return 0;

}


void LED_init(void )
{

GPIO_InitTypeDef GPIO_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//ʹÄÜGPIOFʱÖÓ

GPIO_InitStruct.GPIO_Pin  = GPIO_Pin_9|GPIO_Pin_10;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_Speed=GPIO_Medium_Speed;
GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
GPIO_InitStruct.GPIO_PuPd= GPIO_PuPd_NOPULL;

GPIO_Init(GPIOF, &GPIO_InitStruct);


GPIO_ResetBits(GPIOF,GPIO_Pin_9|GPIO_Pin_10);

}

你可能感兴趣的:(总结写的stm32的KEY控制LED)