51单片机——第三节:独立按键

一、独立按键控制LED亮灭

1.直接操作一位寄存器:

  P2_0=0/1;(P2_0-7)

头文件要改成:<REGX52.H> 

点亮是0,熄灭是1

2.独立按键:

按键:P3_1(按下:0,弹起:1)

3.位运算:

<<:按位左移      >>:按位右移        &:按位与

|:按位或            ^:按位异或           ~:按位取反

(按位左移一位:高位移出去,低位补0,2-8向左移一位,1位挪到8位)

(按位左移x位:<<x)

(0011 1101&1010 1001=0010 1001)(只有两个1是1,其他都是0)(可理解为对应位做乘法)

(0011 1101|1010 1001=1011 1111)(有1则1)

(0011 1101^1010 1001=1001 0100)(不同为1 相同为0)

4.按键对应:

 K1-P3_1
 K2-P3_0
 K3-P3_2
 K4-P3_3

二、独立按键控制LED状态

1.改延时代码参数:

       看自己板子晶振上标的频率决定选什么

2.按键消抖,检测松手:

LED灯连接的是P2口,独立按键连接的是P3口

void main()
{
    while(1)
    {if(p3_1==0)
        {Delay(20);
        while(P3_1==1);
        P2_0=~P2_0;
        }
    }
}

while(P3_1==0);→空循环

三、独立按键控制LED显示二进制

1.P2++:

对八位进行操作

2.代码:

void main()
{
    unsigned char LEDNum=0;
    while(1)
    {
        if(P3_1==0)
        {
            Delay(20);
            while(P3_1==0);
            Delay(20);

            LEDNum++;
            P2=~LEDNum;
        }
    }
}

四、独立按键控制LED移位

1.代码:左移

while(1)
{
    if(P3_1=0)
    {Delay(20);
    while(P3_1==0);
    Delay(20);

    LEDNum++;
    if(LEDNUM>=8)
        {LEDNum=0;}
    P2=~(0x01<<LEDNum);

}
}

2.代码:右移

while(1)
{
    if(P3_1=0)
    {Delay(20);
    while(P3_1==0);
    Delay(20);

    if(LEDNUM==0)
        {
        LEDNum=7;
         }
    else
        LEDNum--;
    
    P2=~(0x01<<LEDNum);

}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值