×
单片机 > 单片机程序设计 > 详情

总结写的stm32的KEY控制LED

发布时间:2020-05-29 发布时间:
|

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 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机CO2检测显示程序解析