stm32寄存器——按鍵輸入:


void KEY_Init(void)

{
  RCC->APB2ENR|=1<<0;
  RCC->APB2ENR|=1<<6;
  GPIOA->CRL&=0XFFFFFFF0;
  GPIOA->CRL|=0X00000008;

  GPIOE->CRL&=0XFFF000FF;
  GPIOE->CRL&=0X00088800;
  GPIOE->ODR|=7<<2;
}

 

 KEY_Init,設置GPIO口的狀態

#ifndef __KEY__H
#define __KEY__H
#include "sys.h"
#define KEY0  PE4(in)         //輸入模式
#define KEY1  PE3(in)
#define KEY2  PE2(in)
#define WK_UP PA0(in) 




#define KEY0_PRES    1       //利用case switch 語句來進行按鍵控制
#define KEY1_PRES    2
#define KEY2_PRES    3
#define KEY3_PRES    4





void KEY_Init();
u8 KEY_Scan(u8);

    


#endif

 

 





u8 KEY_Scan(u8 mode) {
static u8 key_up=1; // if(mode)key_up=1; // if(key_up&&(KEY0==0||KEY1==0||KEY2==0||WK_UP==1)) //有即可以檢測,無需全都 { delay_ms(10); //去抖:按下后會有一定的抖動,會出現返回高電平的情況 key_up=0; if(KEY0==0) return 1; else if(KEY1==0) return 2; else if(KEY2==0) return 3; else if(WK_UP==1)return 4; } else if(KEY0==0&&KEY1==0&&KEY2==0&&WK_UP==1) key_up=1; return 0; }

(1)static :1靜態局部變量2全局變量:本實驗中只是有記憶功能,即上次返回的功能

(2)mode作用:插入調控連續按鍵(電視快進鍵)和獨立按鍵(電源)

 

 

 

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "beep.h"



 int main(void)
 {
     u8 key=0;    
    delay_init();             //延時函數初始化      
     LED_Init();                 //LED端口初始化
    KEY_Init();          //初始化與按鍵連接的硬件接口
    BEEP_Init();             //初始化蜂鳴器端口
    LED0=0;                    //先點亮紅燈
    while(1)
    {
         key=KEY_Scan(0);    //得到鍵值
           if(key)
        {                           
            switch(key)
            {                 
                case WKUP_PRES:    //控制蜂鳴器
                    BEEP=!BEEP;
                    break;
                case KEY2_PRES:    //控制LED0翻轉
                    LED0=!LED0;
                    break;
                case KEY1_PRES:    //控制LED1翻轉     
                    LED1=!LED1;
                    break;
                case KEY0_PRES:    //同時控制LED0,LED1翻轉 
                    LED0=!LED0;
                    LED1=!LED1;
                    break;
            }
        }else delay_ms(10); 
    }     
}

 


免責聲明!

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



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