吴文兵 脱建智
摘 要:本文基于STC89C52单片机应用为核心,从系统的硬件电路入手,将8位发光二极管通过共阴极接法接到单片机的P0端口,并通过控制P0口的电平高低以达到控制发光二极管,从而实现循环流水灯的设计。
【关键词】发光二极管 单片机 流水灯
在我们的日常生活中,随处可见各种美丽的霓虹灯,这些美丽的霓虹灯将我们的城市装扮的绚丽多彩,霓虹灯广告牌也已经成为各大商家争相竞争的手段。其实这些霓虹灯是由发光二极管组合而成的,而这些发光二极管的组合多数也是基于单片机设计和制作出来的。而这些霓虹灯大多电路结构复杂,不容易实现。我们就以制作一台简易循环流水灯为例来介绍一下它基于51单片机的设计方案。
1 功能需求约定
本次设计主要实现8个发光管间隔200ms由上至下,再由下至上,一个轮回后再重复上个轮回,即用单片机来设计循环流水灯,就是实现这十五种状态的循环切换控制。
2 开发方案的设计
本文分别从硬件设计方案和软件设计方案两个方面进行分析。
2.1 硬件设计方案
根据循环流水灯的十五种运行状态,可以看出,每盏灯的每种状态我们可以做同样的处理,因此在电路设计中,可以在每种状态下,对单片机的对应引脚做同样的输出,这样我们就可以实现基于51单片机最小系统电路(如图1a所示)流水灯模型的硬件设计了,值得说明的是我们这里采用的是共阴极连接方式(如图1b所示),所谓共阴极连接方式即发光二极管的阴极连接在一起形成一个公共端。如图1b中的D0-D7八个发光二极管就为共阴极连接方式。在这里每个发光二极管上还串联了一个限流电阻,那此限流电阻的阻值又该如何选取呢?由于单片机上提供的电压一般为+5V,发光二极管的导通压降一般为1.7V左右,需要的电流一般为3mA,所以限流电阻阻值的计算公式为
2.2 软件设计方案
状态控制码的确定
所谓状态控制码,就是要使流水灯工作在某一种状态,我们应该向单片机的控制口所输出的编码,由前面的硬件设计可知,在某一个状态下,当P0口的某一引脚输出为1时,对应的发光二极管点亮,当P0口某一引脚输出为0时,对应发光二极管熄灭,因此我们前方十五种状态所对应的P0口控制码可以依次写出,以状态1D0灯亮为例,我们可以得到00000001的一个状态码,也就是01(十六进制),因此我们只需要为01通过P0口输出就可以实现状态1的显示了。
在确定了控制码之后就可以进行程序流程的设计了,上电后,取状态1的控制码,并且通过P0口输出实现D0灯亮,延迟一定时间后,取状态2的控制码实现D1灯亮,按照这个流程直到取状态15的控制码,实现对应灯点亮,再从状态一开始执行,实现这十五种状态的循环切换控制。
3 系统模型的实现
3.1 实现方法
对于单片机而言,一般编程完毕后先基于Proteus等平台进行仿真测试,然后再进行电路的实现和产品的形成。
3.1.1 软件实现
本次设计采用了C51语言,并基于keilC51开发环境进行实现,在main主程序当中,完成主循环任务,对于15种状态的控制,其实是一样的,都是将操作码送给P0口,而且延时时间也是相同的,所以可以用一个延时子函数来编写。
3.1.2 硬件实现
本次设计所需要的元器件是8个发光二极管、8只限流电阻、一块STC89C52单片机、一个USB下载装置以及若干个杜邦线。
3.2 实现操作
任务:本次设计主要实现8个发光管间隔200ms由上至下,再由下至上,一个轮回后再重复上个轮回。
我们将程序编写为如图2所示。
程序中用到了intrins.h库函数中的_crol_和_cror_指令,如在main主程序中的大循环内,将i=0x01的值给P0,则D0灯点亮,延时一定时间后,循环左移一位,此时i的值变为0x02,再将i的值给P0,则D1灯亮,延时一定时间,按照这种方式直到i的值变为0x80,将此值再赋给P0,实现D7灯亮。接下来开始循环右移一位,此时i的中变为0x40,再将i的值给P0,则D6灯亮,延时一定时间,由此实现八个发光二极管从上而下,再从下到上依次点亮的任务。
4 结语
经过上面的设计,我们完成了循环流水灯的设计,循环流水灯相对于其他的设计,已经相当简单,即没有中断也没有定时/计数部分。但是这次设计,难点还是有的,比如发光二极管中高低电平的选择,以及保护电阻的选取。总之,通过设计该循环流水灯我们掌握了它基于51单片机的设计方法,同时可以将该方法推广到我们其他基于51单片机的小制作中。
参考文献
[1]张灿.单片机花样流水灯设计.信息通信,2013(6).
[2]王莉莉,宋冬萍.基于单片机的花式流水灯的设计[J],广西轻工业,2011(11).
作者简介
吴文兵(1985-),女,河北省人。现就职于潍坊工程职业学院。主要研究方向是机电一体化、单片机设计方面的研究。
脱建智(1981-),男,回族,山东省人。现就职于潍坊工程职业学院。主要研究方向是单片机设计方面的研究。
作者单位
潍坊工程职业学院山工机电工程学院 山东省潍坊市 262500