流水灯可以说是大多初学者都接触的一个必不可少的项目。那今天就让我们学习一下吧。
一、电路设计
可以看到我们单片机的LED模块8个LED都接在VCC上(又称共阳极,这在后面学习数码管会提到),然后他们不同点在与引脚不一样。比如D1接的是P20,D2接的是P21等等。共同接在VCC,意味着他们都始终处于高电平1的位置。如果我们想让它点亮,只需要在程序设计时,给它一个低电平0,便可以实现。
二、程序设计
这里的代码有很多种,我下面会给大家介绍几种常见又容易懂的。
第一种便是我写的一种最麻烦的一种,虽然很麻烦但也是最容易懂的。开头的void Delayms()是一个延时子程序。单位是ms。需要延时多少ms,在下面的函数中就可以对其传参。比如我的程序就是延时100ms。从程序中不难看出。我把8个P2口都挨个打开,给低电平0,然后延时100ms,便可以实现流水灯。
第二种可能对初学者不是很友好,它涉及到了移位操作符。<<为左移操作符。其原理是除符号位不变,其它位上的数字均前进一位。然后空余的位置补0。
如果不理解的可以看一下上图。
开头的延时程序依然不变。主程序先让P2=0x01,这一步有很多人会理解错。这里的0x01,是让一个灯不亮,其他灯全亮,别弄反了。千万别弄反了!千万别弄反了!千万别弄反了!
接着就是给P2移位,最后再取反(让一个灯亮,其余灯灭)。
最后一步用if表判断,如果走到了D8,那就自动复位0,这样便可以一直循环。
三、结尾
这是up更新的第一篇文章,以后每周一更,主要更新51单片机的一些常用程序,以便之后大家学32的时候会更容易一些。
we don't know what is wrong tonight. Everybody's got no place to hide.