stm32按鍵反轉led的亮滅


這個小實驗主要還是利用到GPIO:

下面這個bsp_led.h文件使用寄存器版本寫的

#ifndef __LED_H
#define __LED_H
#include"stm32f10x.h"
//定義端口,時鍾,引腳
#define red_PORT  GPIOB
#define red_PIN   GPIO_Pin_5
#define red_LCK   RCC_APB2Periph_GPIOB

#define green_PORT  GPIOB
#define green_PIN   GPIO_Pin_0
#define green_LCK   RCC_APB2Periph_GPIOB

#define blue_PORT  GPIOB
#define blue_PIN   GPIO_Pin_1
#define blue_LCK   RCC_APB2Periph_GPIOB

#define ON 0
#define OFF 1
            
#define    digitalHi(p,i)         {p->BSRR=i;}     //引腳輸出高電平       
#define digitalLo(p,i)         {p->BRR=i;}     //引腳輸出低電平
#define digitalToggle(p,i) {p->ODR ^=i;} //反轉

#define red_TOGGLE         digitalToggle(red_PORT,red_PIN)
#define red_OFF           digitalHi(red_PORT,red_PIN)
#define red_ON               digitalLo(red_PORT,red_PIN)

#define green_TOGGLE         digitalToggle(green_PORT,green_PIN)
#define green_OFF           digitalHi(green_PORT,green_PIN)
#define green_ON               digitalLo(green_PORT,green_PIN)

#define blue_TOGGLE         digitalToggle(blue_PORT,blue_PIN)
#define blue_OFF           digitalHi(blue_PORT,blue_PIN)
#define blue_ON               digitalLo(blue_PORT,blue_PIN)

void LED_GPIO_Config(void);
                
#endif
                

下面是bsp_key.h文件:
#ifndef __KEY_H
#define __KEY_H
#include"stm32f10x.h"

#define key_1_PORT  GPIOA
#define key_1_PIN   GPIO_Pin_0
#define key_1_CLK   RCC_APB2Periph_GPIOA

#define key_2_PORT  GPIOC
#define key_2_PIN   GPIO_Pin_13
#define key_2_CLK   RCC_APB2Periph_GPIOC

#define KEY_ON      1
#define KEY_OFF     0

void Key_GPIO_Config(void);
uint8_t KEY_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin);

#endif

下面是bsp_key.c文件:

#include"bsp_key.h"
void Key_GPIO_Config(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(key_1_CLK|key_2_CLK,ENABLE);
    GPIO_InitStructure.GPIO_Pin=key_1_PIN;
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
    GPIO_Init(key_1_PORT,&GPIO_InitStructure);
    
    GPIO_InitStructure.GPIO_Pin=key_2_PIN;
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
    GPIO_Init(key_2_PORT,&GPIO_InitStructure);
}
uint8_t KEY_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin)
{
        if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON )  //檢測按鍵是否按下
    {     
        while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON);   //直到按鍵被釋放
        return     KEY_ON;     //才返回一個KEY_ON
    }
    else
        return KEY_OFF;
}

下面是main.c文件

#include"stm32f10x.h"
#include"bsp_led.h"
#include"bsp_key.h"
int main(void)
{
    LED_GPIO_Config();
    red_ON;
    Key_GPIO_Config();
    while(1)
    {
        if(KEY_Scan(key_1_PORT,key_1_PIN) == KEY_ON  )//
        {
            red_TOGGLE;
            //red(OFF);
        } 

        if( KEY_Scan(key_2_PORT,key_2_PIN) == KEY_ON  )
        {
            green_TOGGLE;
            //green(ON);
        }    
    }
}

以上就是一個簡單的通過按鍵反轉LED的亮滅的代碼文件,如有不妥,望請指正。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM