【单片机自用】SPI的前置练手--存储小灯状态,按键改变(自用)

一,原理:

先保存上一个的值
判断读取当前是否是1,是高电平就给current置1,不是就为0
if 当pre!=cur现在不是1了,存储一下后再判断:如果cur=0就无变化,
,如果cur=1就是我们想要的(松开的时候,也即要变化的时候)

(开漏的介绍我主页有记录,简单大白话一看就懂)

代码


以上是对的,但注意我的错误点
:1, pb7的初始电压应该是高---对应的灭灯,而我是默认的低电平,一开始就是亮的(一开始该是灭的对),当pb7一开始是低(亮),那么一开始的ledstate是1,匹配好吗,后面篮筐是不用变 

2,改进的点-极速防止按键都抖动—其实放在第二个delay的地方----前面管你是否变化,最后执行变化灯的时候来判断就行
-
代码:
uint8_t pre =1;
  uint8_t cur =1;
  uint8_t ledstate =0;
 
  while (1)
  {
      pre = cur;
      if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1) == GPIO_PIN_SET)
      {
          HAL_Delay(50);
          if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1) == GPIO_PIN_SET) //默认就是上拉�?
          {
              cur = 1;
          }
      }
      else cur = 0;

      if (pre != cur)
      {
          HAL_Delay(50);
        if (cur == 0){ }
        else {
            if(ledstate ==1)
            {
                HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_SET);
                ledstate =0;
            }

            else
                {HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_RESET);
            ledstate =1;}
        }

      }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值