STM32 ——按键控制LED 为什么按键不按照自己的想法亮和灭

首先需要明白怎么去通过按键去控制led灯的亮灭

通过获取key(按键)返回的高低电平即 0  1 来控制led灯

这个返回值肯定需要调用函数去实现

 u8 scan_key()
{
//怎么实现
	//
//当外界有信号输入 判断下外界那个端口输入,然后返回一个数值;
//读取key的值
	
	//
	static u8 key_up=1;//值得注意的是这个部分
  if(key_up&&(KEY0==0||KEY1==0||WK_UP==1))
	{
	  delay_ms(10);
		key_up=0;//值得注意的是这个部分
		if(KEY0==0)return 1;
		else if(KEY1==0)return 2;
		else if(WK_UP==1)return 3; //值得注意的是这个部分
	}else if(KEY0==1&&KEY1==1&&WK_UP==0)key_up=1;//值得注意的是这个部分
	return 0;//值得注意的是这个部分

}

该函数就是用来获取返回值,上面代码中有几个值得注意的地方,这里设置key_up=1;当程序运行进入

 if(key_up&&(KEY0==0||KEY1==0||WK_UP==1))
    {
      delay_ms(10);
        key_up=0;//值得注意的是这个部分
        if(KEY0==0)return 1;
        else if(KEY1==0)return 2;
        else if(WK_UP==1)return 3; //值得注意的是这个部分
    }

假如没有这key_up=1;--->>key_up=0;这个过程,你会发现你的led不顺从你的操作按键,因为当函数执行时即

没有key_up=1;这个条件

 if(key_up&&(KEY0==0||KEY1==0||WK_UP==1))
    {
      delay_ms(10);
        if(KEY0==0)return 1;
        else if(KEY1==0)return 2;
        else if(WK_UP==1)return 3; //值得注意的是这个部分
    }

单片机处理指令非常的快这时会频繁的调用这个函数,即返回值可能一直是你按键的返回值,想要改变则需要再一次进入这个函数主体的时候,会出现不满足进入if语句的过程即

key_up=1;--->>key_up=0

将该语句添加进去,但是此时还会出现问题,当按一次按键后再次操作时无法操作按键,这时应该注意到一个点static,此时key_up==0的,无法完整的执行完这个函数,此时

else if(KEY0==1&&KEY1==1&&WK_UP==0)key_up=1;//值得注意的是这个部分
    return 0;/

这个就是关键的语句,即什么按键都没有触发的时候,执行该语句,重点什么按键都没有触发的时候,这时key_up==1;

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值