51单片机流水灯教程。

       大家好,今天我们来制作51单片机流水灯,在我个人认为昂,流水灯的意思就是,让单片机上的LED灯像水一样的流动,也就是挨个点亮。那大家也就可以想到,这里会用到延时函数(**delay**)和循环移位函数【**_crol_(左移),_cror(右移)_**】了。
       延时函数**delay**的用法是![在这里无法用程序的格式写出来,就给大家截图吧![在这里插入图片描述](https://img-blog.csdnimg.cn/20200801212717343.png)

for和while是循环函数,这个高中就会接触到一点,不做过多的解释了,第二行的unsigned int x,y;是给x和y定义的,两个for中,第二个for是第一个for的{语句},意思就是,第一个for中的条件为真即x不大于0,则执行第二个for,我再解释一下,x=z之后,看x是否大于0,若大于,x–也就是(x-1),之后再看x是否大于0若大于,执行x–,若不大于执行第二个for,第二个for和第一个for是一样的,当y不大于0时,回到第一个for。两个for反复循环了114*z之后才进行下一个语句。这里记住出现delay就表示要延时了,延时的时候一般就要用for函数。延时100ms,就把z换成100.delay是毫秒级的延时函数
接下来讲以为函数,大家应该都知道移位有函数和符号之分函数就是**crol_和_cror,符号有<<和>>,函数和符号是有区别的,大家都知道给LED灯疏通低电平就会亮**,输高电平就不会亮高和低用1和0表示,而一个芯片上一般都是8个I/O口为一组,全亮就是0000 0000,全灭就是1111 1111,一亮一灭就是0101 0101。移位符号:比如<<是左移,左移一位a<<1,;就是将0000 0001变成0000 0011.移位函数:比如_crol_是左移,左移一位_corl_(a,1);就是将0000 0001(最后一个不亮)变成0000 0010,倒数第二个不亮。这时大家想想,把这个函数一直循环不就可以做成流水灯了吗?对吧。但是想法是对的,但是我们使用程序来实现的,我们这里用移位函数,因为我们要做到挨个灭,这里不会的朋友可以想一下,在本子上画一下0和1,很简单的
在这里插入图片描述 这个部分是在上面的for这部分后面的,我给大家截下来说吧,main函数自身就会循环,意思就是他这个流程一直进行,abc = 0xfe;abc是在上边定义了,一定要定义,不然计算机不认识abc是啥东西,这里将abc等于0xfe,fe中的f表示16进制的15,转换成2进制就是1111,e是16禁止中的14,转换成2进制就是1110,合起来就是1111 1110。P1表示芯片上P1这8个接口,P1 = abc;就表示P1 = 1111 1110,即P1这8个接口中最后一个灯亮,到while这个循环体中,abc = crol(abc,1);表示abc向前移一位,即1111 1101,然后让P1再等于abc,说明现在是倒数第2个灯亮,delay(100)是延时函数,上面都已经说过了,就不说了。最后按照我上个那样进行编译,通过烧录软件,连接自己的单片机到计算机上,下载编译,就成功了
我把我编写的程序截图发给大家吧。方便大家对照,在这里插入图片描述

    今天这篇博客字数有点多,图片说明有点少,可能有的地方不太清楚,请见谅,实在想弄清楚的话,可以联系我,如果我也不知道,大家可以通过其他资料查询,毕竟我也是新手,不懂地方也有好多,
    
    QQ:2115756263,
©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页