粉丝8121获赞1.5万

我们先来看一下程序的运行效果啊,我们按第二个按键,这个灯就是会向右依次的点亮, 我们如果按第一个按键,他就会依次的向左点亮, 点到第一个,再按到第八个灯,这边也是到第八个,再到第一个, 我们来看一下它的实现原理啊。首先这个 k 一 键,这边是 p 三幺,这个 k 二键,这个是 p 三零,不知道它怎么回事哦,这两个没有按顺序, 这个是三幺,这个三零,然后如果就是这个三幺按下,我们就是让他左移,如果是这个三零按下,也就 k 二按下,就是让他右移, 就是他的灯右移移位,这个按下我们已经知道了,就是等于零,就判断他等于零的时候就是按下。 然后我们来看一下灯, led 模块呢,灯它就是这个 p 二端口有八位,就是这八个 led 灯,我们先让第一个 led 灯亮起来,然后就依次的循环,让这个移位操作就行了。 那么再来看一下源码啊,源码还是上面还是跟之前一样的,都是一些引入的一些库头文件一些,然后就是延时函数, 那这边就是一个慢,然后 p 二的 p 二,它就是它的 led 端口,一共有八位,我们这个是让它等于零 x 零幺,再一个取返 运算符,然后它就是相当于是 fe。 首先呢我们看它零 x 零幺,这就是十六镜子的 零幺,就相当于二镜子的零零零零零零幺,然后这个再把它取反,它就相当于是幺幺幺幺幺幺零,也就相当于十六镜子的 fe 啊,这个零呢就是 led 点亮啊,这个是二零,也就是它的第一个灯, 然后是如果 p 三幺等等于零,他就是呃第一个按键被按下,而这下面就是一个延时防抖动的,然后 v 二循环,就是按住不放的话一直在这里面,然后后面还有一个 这个防抖动的啊,上上一节课那个代码,我们前面加了一个防抖动,他这个后面没有加防抖动,他有可能会出现一些问题啊。这里这块我们把它加上 p 二,就是等于这个右移, 又移一位,哎,就又把 p 二,它现在是取反过后就是幺幺幺幺幺幺幺零,再又移一位,它就是零幺幺幺幺幺幺幺, 这个这个是应该是 p 二八,这个 p 二零,这个是 p 二八,因为我们那个 呃开压板上面的 led 灯啊,和我们这个位置它是反掉的,我们这边是右移,它就是到相当于是嗯第一个 led 灯灭了,第八个 led 灯亮,也就是 看看这个它是反的,它这个是二零,到这边是二七,我们这边的是这边是二零,到这边是二七, 所以这边的我们是右移循环右移,但是对应的实际情况它是这边是左移, 嗯,就是这一块容易搞混啊。然后下面一个就是判断它 p 三零等于零,也就是第二个按键被按下,然后这下面的就是一些防抖动,然后这边的是循环左移移位, 循环左移一位,再赋给这个 p 二循环左移就相当于这个 p 二零, 它这个第一个灯 p 二零被点亮,然后左移,就是 p 二幺被点亮,然后对应的开关上面它是 p 二零,是这个第一个灯,然后 p 二幺是第二个灯,它是向右点亮, 就是这两个会有点绕,可能会搞乱啊。就是这里我们实际代码是让它左移,但是,但是就是它的这个位置和因为位置和那个 呃二进之位它是相反的,所以这边的右移相当于那边的左移,这边的左移相当于那边的右移。 这里我们演示一下,看看如果 while 循环后面不加延时抖动的话是什么样的效果啊? 可以看到刚刚就是第八到第六按了一下,它跳了两个灯,这就是它如果不加延时抖动就会可能会出现这种情况。 嗯,又出现了,它不是百分之百出现的,但是有几率出现啊。


