51单片机按键控制LED灯(二)

目录

一、独立按键控制LED灯

1、独立按键

(1)按键的介绍

(2)原理

  (3)独立按键模块介绍

(4)51单片机引脚介绍

(5)主要实现的任务

二、独立按键控制LED灯亮灭

1、框架思路

 2、代码的实现

三、按键的抖动

1、按键抖动

 2、抖动原理

3、消抖

4、加入消抖实现松开按键点亮LED灯

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

五、独立按键控制LED移位

1、位移方法

 2、代码的实现


一、独立按键控制LED灯

1、独立按键

(1)按键的介绍

(2)原理

(1)轻触按键:相当于是一种电子开关,按下时开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通和断开

 (3)独立按键模块介绍

由上面两张图可以知道,独立按键是接在MCU的P3.0口到P3.3口的;

可以看到,独立按键的右端是接地的;这里需要注意,独立按键跟LED灯的原理有区别,LED灯是通过高低电平通电,进而使灯亮;而独立按键不一样,独立按键的一端接地,独立按键就是一个开关;以K1为例,K1右端是GND,左端是RXD,我们知道,单片机在刚上电时,所有i/o口默认都是高电平的;所以当K1按键没有按下时,RXD是高电平,但当K1按键按下时,电路进行了连通,RXD接通了GND,所以RXD此时变成了低电平。在寄存器中写入一个值,该值就会同步到对应的i/o口上;其实反之也成立,即通过寄存器可以读到i/o口的状态,是高电平还是低电平。我们通过给寄存器赋值控制我们单片机操作。

当按键没有按下时,寄存器读到的该i/o的状态就是高电平(即1);反之,当按键按下时,寄存器就可以读到该i/o口的状态为低电平(即0)

(4)51单片机引脚介绍

51单片机的引脚图

引脚说明 

1、主电源引脚(2根)

VCC(Pin40):电源输入,接+5V电源
GND(Pin20):接地线

2、外接晶振引脚(2根)
XTAL1(Pin19):片内振荡电路的输入端
XTAL2(Pin20):片内振荡电路的输出端

3、控制引脚(4根)
RST/VPP(Pin9):复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。
ALE/PROG(Pin30):地址锁存允许信号
PSEN(Pin29):外部存储器读选通信号
EA/VPP(Pin31):程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。

4、可编程输入/输出引脚(32根)
51单片机有4组8位的可编程I/O口,分别为P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。
PO口(Pin39~Pin32):8位双向I/O口线,名称为P0.0~P0.7。
P1口(Pin1~Pin8)     :8位准双向I/O口线,名称为P1.0~P1.7。 
P2口(Pin21~Pin28):8位准双向I/O口线,名称为P2.0~P2.7 。
P3口(Pin10~Pin17):8位准双向I/O口线,名称为P3.0~P3.7

所以我们在操作独立按键的时候连接到MC端的接口接在了可编程输入\输出引脚的I/O口上,默认为高电平。  

(5)主要实现的任务

 按下之后。LED灯亮,松开之后灭

 按下之后没反应,松手之后,LED灯亮;再按一下,松手,LED灭。

 按下松开,按下松开,灯不停地左移或者右移。

 按下松开,按下松开,使八个LED实现二进制递增地亮。

二、独立按键控制LED灯亮灭

(按下后LED灯亮,松手后LED灯灭)

1、框架思路

在实现LED灯点亮的实验中,我们通过控制寄存器来实现的,寄存器由8位为一组,我们给一组的数据来操作整个LED灯的亮灭

在使用独立按键的时候我们控制一组的数据会很麻烦, 我们可以通过控制一位LED灯的实现

这个就是我们控制八位为一体的P2口

 sbit,位寄存器,我们操作这些名字就可以单独操作他们每一位

 2、代码的实现

用P2_0=0 代替P2=0xFE,P2_0=0表示最低位为低电平,其余保持不变,同样可以点亮最低位的灯

 第一条语句表示按下点亮,

第二条语句松开时熄灭

 如图所示独立按键的一边接到了我们的MCU上我们可以直接控制这个寄存器

 

 P3_1对应K1按键,按下K1按键,灯亮,松手灯熄灭

在这个程序里面要在while里面进行循环,如果我们写在了外面,就相当于我们进行了一次,不在继续执行 

三、按键的抖动

1、按键抖动

 2、抖动原理

 (1)、没有按键按下的时候,它是高电平(1);

 (2)、按下按键之后,会变成0。因为是机械触点,会上下抖动,抖动时间大概是5~10ms,不同开关抖动的时间是不一样的。

 (3)、当抖动消失,它就会进入一个稳定的低电平状态(0)。

松开手之后,进入后半段,也会产生抖动,不会突然变成1,也会抖动5~10ms。

  (4)、最终稳定地变成1。

抖动会对按键的检测进行一些干扰,所以我们要对进行消抖

3、消抖

通过写程序进行消抖,我们只要在按下按键的时候,我们加入一个延时函数,松开时加入一个延时函数就可以了

4、加入消抖实现松开按键点亮LED灯

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

可以自定义一个变量,对变量进行操作,最后把变量送给P2口。可以定义“unsigned char”---无符号字符型(0~255的八位二进制数据),正好和P2口,和寄存器也保持一致,都是八位

五、独立按键控制LED移位

1、位移方法

运用位移运算符实现位移

 2、代码的实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值