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