02-按键测试

02-按键测试

在这里插入图片描述

  1. 1. 学会的知识:
    1. 通过对按键的识别,收到返回值,确定是哪一个按键发出的操作,进而用if,else 语句,可以得到 相应的灯去亮。

    uint8_t 实际上就是一共char,所以输出uint8_t 类型的变量世界上输出对应的字符

    比如:

    uint8_t num=67;
    cout <<num<< endl; //输出结果为C
    
    1. 相比与普通的点亮LED灯来说,它增加了按键的初始化,读取函数

    Key_Hardware_Init();

    void Key_Hardware_Init(void)
    {
    	GPIO_InitTypeDef  GPIO_InitStructure;
    
    	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF|RCC_AHB1Periph_GPIOG, ENABLE);	//使能GPIO时钟
    
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;			//KEY1 KEY2 KEY3对应引脚
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;	//普通输入模式
    
    	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;	//上拉
    	GPIO_Init(GPIOF, &GPIO_InitStructure);			//初始化GPIOF
    
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; 		//KEY0 对应引脚
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;	//普通输入模式
    
    	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;	//上拉
    	GPIO_Init(GPIOG, &GPIO_InitStructure);			//初始化GPIOG
    
    } 
    

    对于开发板上面任何一共硬件设备,要想调用,首先要做的就是 Hardware_Init ( ) ,对GPIO引脚进行初始化, 设置模式,让他进入准备工作的状态

    1. 对于电路图的解读,如图。我们可以看到GPIOF13 是key1 的引脚,我们设置成input模式,也是就读电压的模式,开关闭合,GPIO 位置为低电压,当开关打开,形成短路,为高电压
    2.代码解读

    主函数:

    int main(void)
    {
    	Key_Hardware_Init(); //初始化 Key
    	LED_Hardware_Init(); //初始化LED
    	Delay_Init(); //延迟的设置
    
    	while(1) //保证一直能够工作
    	{
    		keyvalue = Key_Scan(0); //读取按键的返回值
    
    		if(keyvalue == 1)
    			LED0_TOGGLE(); //LED0 状态取反
    		else if(keyvalue == 2)
    			LED1_TOGGLE();// LED1 状态取反
    		else if(keyvalue == 3)
    			LED2_TOGGLE();
    		else if(keyvalue == 4)
    			LED3_TOGGLE();
    	} 
    }
    

    获取按键函数:

    uint8_t Key_Scan(uint8_t mode)
    {	 
    	static uint8_t key_up=1;		//按键按松开标志
    	if(mode)key_up=1;		//支持连按		  
    	if(key_up&&(KEY0()==0||KEY1()==0||KEY2()==0||KEY3()==0))
    	{
    		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(KEY3()==0)return 4;
    	}else if(KEY0()==1&&KEY1()==1&&KEY2()==1&&KEY3()==1)key_up=1; 	  
     	return 0;				//无按键按下
    }
    
    1. 用一个10ms的延时来消除抖动
    Delay_ms(10);
    
    1. 有一个骚操作来去除按键抖动,那就是用一个while函数来等
    while(HAL_GPIO_ReadPin(LED_RED_GPIO_Port,KEy2_Pin)==GPIO_PIN_RESET){
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值