看了以上代码后很多初学者都觉得很好理解,LED发光管控制也是很多单片机入门的第一个实例,程序虽然简单但对初学者具有很大意义。很多教材上也提到了流水灯的应用,其实它与我们上面程序大同小异,它的原理是使每个I/O口轮流输出低电平,那么相应端口上的发光管轮流发光,在PCB上把这几个LED按顺序排列的话就可以看到流水灯的效果了。
在使用配套开发板来实现流水灯的原理是:使8个编号为LED1~LED8的LED从LED1开始亮起,每次只点亮一个,并按次序往LED8移动,结束后再次从头开始。参照表10-1,实际上就是在程序开始执行之后,使程序一直在“复位状态”到“状态8”之间按顺序执行。如果把这些文字整理成一个状态表的话更有助于初学者理解,流水灯的状态变化见表10-1。
表10-1 流水灯状态表
从前文中已经知道了控制一个LED的方法,所以要实现这个程序,关键是了解整个过程,先来比较一下“复位状态”和“状态1”的区别,有什么地方不一样呢?就是LED1在这里被点亮了,所以从“复位状态”到“状态1”,需要完成的操作是“点亮LED1”,然后从“状态1”到“状态2”,很容易发现,区别有两个地方,就是LED2亮了,LED1却灭了,所以在这一步,需要做的事情是“点亮LED2”和“熄灭LED1”,按照这样的过程其他步骤需要完成的任务也不难看出来,列出流程图如图10-4所示。
图10-4 流水灯程序流程图
对应流水灯的流程图,则可以得到如下程序代码:
(www.xing528.com)
相信到这里,读者已经看到发光二极管在流动发光了,单单是对这个程序要求的功能来讲,其实也已经没有什么可以挑剔的,而且通过对这个程序实现的分析,相信凭读者自己的能力,也一定可以写出另外花样的流水灯了,但是也许读者也看到过别人用更加简单的代码来实现这个流水灯的功能,那就意味着,这个程序还可以按照另外的思路来做。比如如下的程序代码:
这个程序实现的功能与上文程序实现的功能完全一致,其最大的不同是在思路上,它已经不再单独地来看某个LED了,所以程序中也不再定义LED的连接,可以认为它将8个LED合成一个整体来考虑,也可以说,其实它就只关心PA口,因为LED1~LED8本来就是与PA0~PA7对应的,所以程序的目的是在PA口上实现这样的功能:PA0~PA7按顺序循环使某个口线为低电平,同时其他口线为高电平,再进一步,现在PA口的数据和变量temp是对应起来的,所以最终对8个LED的操作变成了对变量temp操作。用流程来看一下temp的变化,也就明白整个过程了,见表10-2。
表10-2 temp的变化过程
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。