想什么
想想我们每天经过的路口,等红灯的情景…
特别是偶尔遇到交通混乱,各路人马急匆匆不遵守交通秩序的浪漫情景,当然也会看到井然有序的标准交通状况。你是否曾经这样想过:“要是我来设计一个信号灯控制系统,会不会让交通更有序,通行指挥更科学?”
不管你有没有想过,今天,我来带你这样做!
其实,从一开始,让我们做一款很科学,很先进的控制系统,那存粹是理想,现实是,作为一个刚入门或者还没入门的爱好者,要做的是先简单,后改进,这样的步骤比较合理。
开始吧
首先,我们不是设计师,我们是初学者,我们不是做工程,我们是学习单片机设计。因此,我们接下来做的是从学习角度出发的。
确定功能 ——设计思路的第一步:
下面我先绘制一个基本功能和设计思路的图表:
我们已经在上面的图表里进行了描述;
器件选型 ——下面我们继续第二步
同样看图表:
为什么选择STC89C52RC?
首先我自己不希望用这么古老的东东来玩,只因为这个东东是起步阶段的首选,尽管它不是我想要的,但它是最合适的。如果你的教科书够古老的话,可能有 人想要AT89C51这样的,准确的说是曾经真有很多人说必须用它。请相信我它是早已停产的型号,你能买到的也是陈旧的,而且你用STC89C52RC来 代替它完全正确。
我们需要了解的是51的程序空间是4K,52的是8K,选52的原因是二者价格相同。后面的RC表示内部RAM是512字节,如果是RD+那就是1280字节了。其实古老的128字节RAM对我们这款设计来说都够用了。程序空间估计也就用个1、2k而已。
接下来看数码管,什么是共阳极?那我先说说什么是数码管。
数码管顾名思义,它是用来显示数字的,当然也可以显示部分字母和符号。数码管也叫做七段数码管,是因为它由A、B、C、D、E、F、G,7个发光二极管组成(不包括还有一个小数点),如下图:
假如我们点亮B和C那就是“1”;点亮A、B、G、E、D那就是“2”…
它内部其实就是普通LED,由于阳极和阴极的接法不同,又分为共阳极和共阴极。如下面两个图所示:
共阳极数码管内原理部图
共阴极数码管内部图
一位数码管的控制比较简单,超过一位的话就需要分时控制。也就是先给7个LED分配电压,这决定了显示内容;然后打开第一位数码管的公共极,这时其 它数码管不显示,等待一个小的延时,再关闭第一位数码管的公共极,给“字段”重新分配显示内容,继而打开第二位数码管的公共极…
这是利用人眼的视觉暂留特性,看起来是持续点亮的效果。一般控制8个以内都没问题,太多的话就会出现亮度暗,再多就会闪烁。
我们这里需要点亮的是8位数码管,但是由于东西和南北各自一组的显示内容一致,我们会把它并联使用,从而只控制相当于4位数码管。
按照芯片数据手册介绍,单片机I/O口下拉电流是6mA,P0口是12mA,直接驱动LED是没问题。但是数码管公共极的电流就比较大了,简单估算 一下:红色LED的压降是1.8v,5V供电,落在限流电阻的电压就是 5 – 1.8 = 3.2V,电阻取值1K,电流就是3.2mA。7个同时点亮就是22.4mA。这超出了单片机单个管脚的输出能力,因此必须用三极管或者接口芯片来控制数 码管的公共极。
我在这里先择了74HC245N,I/O口输出电流为上拉60mA、下拉80mA。
特点:
三态,就是输出使能脚OE高电平时,输出跟没连接一样,高阻;
输出使能脚OE低电平时,输出跟输入电平一样。
八线双向,DIR脚高电平,A输入,B输出;
DIR低电平,B输入,A输出。
宽电压,3~5V供电。
由于输入和输出电平一致,所以在OE和DIR管脚设置好后,对于编程来说可以忽视它的存在。
这里为什么选择共阳极数码管?
原因是这样的,假如选择共阴极,段码需要接高电平才能点亮,单片机端口下拉能力强,上拉弱,必须加电流驱动芯片;而采用共阳极时,段码只需要下拉即可。
信号灯,用LED发光二极管代替。
最后,所有的元器件清单参考前面的器件选型 图表。
这里有一个重要的问题,就是要提前想到后面代码如何下载?
对于STC单片机,需要准备一个USB转串口小板,例如PL2303HX,CH340等都都可以。(提示,目前PL2303选购时应先了解是否支持你的电脑系统?)。
现在到了备料的时间,后面的文章,我会介绍原理图,c51源程序编写等内容…