按键控制LED灯实现记数和位移功能——51单片机为例

上一篇文章学习了如何进行按键消抖,实现灯的点亮。

本章我们学习如何通过按键实现灯的记数还有左右亮灭按键移动功能。

原理图:

图1:MCU原理图

 

 图2:LED原理图

  图3:按键原理图

预备知识:延时函数,按键消抖,~的含义,<<用法

代码如下:

二进制记数:

//默认配备延时函数 Delay (int xms)
/*方法一:
while(1)
{
    if(P3_1==0)
    {
      Delay(20);
      while(P3_1==0);
      Delay(20);
      P2--;
    }         //初始状态下认为P2==1111 1111,故可通过每一次减少来控制灯的亮灭,实现二进制记数
}
*/


/*方法二:
unsigned char x = 0;//unsigned char范围就是0000 0000-1111 1111符合LED灯的特性
while(1)
{
    if(P3_1==0)
    {
      Delay(20);
      while(P3_1==0);
      Delay(20);
      x++;           //0000 0000→0000 0001
      P2=~x;         //LED末端为0才亮
    }
}
*/

 按键控制灯位移:

“<<”的用法:
    P=1111 1010   则P<<2后P变为1111 0100
//默认配备延时函数 Delay(int xms)

int LEDNum=-1;
while(1)
{
    if(P3_1==0)//左移部分
    {      
      Delay(20);
      while(P3_1==0);
      Delay(20);
      LEDNum++;
      if(LEDNum>=8)      //限制移位的位数,防止意外
      { LEDNum=0;}
      P2=~(0x01<<LEDNum);//0000 0001移位后取反赋值
    }                    //左移完成

    if (P3_0==0)//右移部分,右移可以认为是原来左移减1
    {      
      Delay(20);
      while(P3_1==0);
      Delay(20);
      if(LEDNum<=0)
      { LEDNum=8;}
      LEDNum--;
      P2=~(0x01<<LEDNum);//0000 0001移位后取反赋值
     }                   //右移完成
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值