1.硬件连接
所需硬件如下。
(1)LED灯:6个。
(2)220Ω的电阻:6个。
(3)多彩面包板试验跳线:若干。
图2-22 交通信号灯的3种工作状态
按照上述方法将板子和数据线连好,然后按照二极管的接线方法,将6个LED灯依次接到数字1~6引脚上,如图2-23所示。
图2-23 广告流水灯电路原理图
2.试验原理
生活中经常会看到一些由各种颜色LED灯组成的广告灯,广告灯上各个位置上的LED灯不断的亮灭变化就形成各种不同的效果。本试验就是利用LED灯编程模拟广告灯的效果。
在程序中设置LED灯亮灭的次序和时间,从而就可以组成不同的效果。样式一子程序:LED 首先从左边的绿灯开始间隔200ms 依次点亮6个LED灯,如图2-24所示,接着从右边的绿灯开始间隔200ms依次熄灭6个LED灯。灯闪烁子程序:6个LED灯首先全部点亮,接着延时200ms,最后6个LED灯全部熄灭,这个过程循环两次就实现了闪烁的效果。样式二子程序设置k和j的值让中间的两个黄灯先亮,接着让挨着两个黄灯两边的红灯亮,最后让两边的绿灯亮;执行一遍后改变k和j的值让两边的绿灯先熄灭,接着两边的红灯熄灭,最后中间的两个黄灯熄灭。样式三子程序:设置k和j的值,让两边的绿灯亮400ms后再熄灭,接着让两边的红灯亮400ms 后再熄灭,最后让中间的两个黄灯亮400ms后再熄灭;执行一遍后改变k和j的值让两个红灯亮400ms后熄灭,接着让两边的绿灯亮400ms后熄灭。
图2-24 广告流水灯实际接线图
3.程序代码
下面是本试验的程序代码,程序代码如下:
//设置控制LED的数字I/O脚
int Led1=1;
int Led2=2;
int Led3=3;
int Led4=4;
int Led5151;
int Led6=6;
//LED灯花样显示样式1子程序
void style-1(void)
{
unsigned charj;
for(j=6;j<=6;j++)//每隔200ms依次点亮1~6引脚相连的LED灯
{
digitalwrite(j.HIGH);//点亮j引脚相连的LED灯
dety(200)://延时200ms
}
for(j=6;j>=-;j--)//每隔200ms依次熄灭6~1引脚相连的LED灯
{
digitalwrite(j.LOW);//熄灭j引脚相连的LED灯
delty(200)://延时200ms
}
}
//灯闪烁子程序
void flash(void)
{
unsigned char j.lc
for(k=0;k<=1;k++)//闪烁两次
{
for(j=6;j<=6;j++)//点亮1~6引脚相连的LED灯
digitalwrite(j.HIGH);//点亮j引脚相连的LED灯
delty(200)://延时200ms
for(j=1;j<=6;j++)//熄灭1~6引脚相连的LED灯
digitalwrite(j.LOW);//熄灭与j引脚相连的LED灯
delty(200)://延时200ms
}
}
//LED灯花样显示样式2子程序
Void styte-2(void)
{
unsigned char j,k;
k=1;//设置k的初值为1
for(j=3;j>=1;j--)
{
digitalwrite(j.HIGH);//点亮灯
digitalwrite(j+kHIGH);//点亮灯
detay(400);//延时400ms
K-=2;//k值加2
}
k=5;//设置k值为5
for(j=1;j<=3;j++)
{
digitalwrite(j.HIGH);//点亮灯
digitalwrite(j+kHIGH);//点亮灯
detay(400);延时400ms
digitalwrite(jLOW);//熄灭灯
digitalwrite(j+kLOW)熄灭灯
K-=2;//k值减2
}
//LED灯花样显示样式3子程序
void style-3(void)
{
unsigned charj.k;//LED灯花样显示样式3子程序
k=5;//设置k值为5
for(j=1;j<=3;j++)
{
digitalwrite(j.HIGH);//点亮灯
digitalwrite(j+kHIGH);//点亮灯
detay(400);//延时400ms
digitalwrite(jLOW);//熄灭灯
digitalwrite(j+kLOW)熄灭灯
k-=2;//k值减2
{
k=3;//设置k值为3
for(j=2;j>=1;j--)
{
digitalwrite(j.HIGH);//点亮灯
digitalwrite(j+kHIGH);//点亮灯
detay(400);//延时400ms
digitalwrite(jLOW);//熄灭灯
digitalwrite(j+kLOW);//熄灭灯
k+=2;//k值加2
}
}
void setup()
{
style-1();//样式1
flash();//闪烁
style-1();//样式2
flash();//闪烁
style-1();//样式3
flash();//闪烁
}
4.程序代码中用到的:
For(i=1,i<=6;i++)//依次设置1~6个数字引脚为输出模式
pinMode(i,OUTPUT);//设置第i个引脚为输出模式
这是一个for循环。它的一般形式为:for(<初始化>;<条件表达式>;<增量>)语句;初始化总是一个赋值语句,它用来给循环控制增量赋初值;条件表达式是一个关系表达式,它决定什么时候退出循环;增量定义循环控制增量每循环一次后按什么方式变化。这三个部分之间用“;”分开。例如,for(i=1;i<10;i++)语句;上例中先给“i”赋初值1,判断“i”是否小于等于10,若是则执行语句,之后值增加1再重新判断,直到条件为假,即i>10时,结束循环。
1)下载程序
参照前面所讲的将程序下载到开发板中。
2)试验结果
将程序下载到试验板后可以观察到,6个 LED 不断地循环执行样式一子程序→闪烁子程序→样式二子程序→闪烁子程序→样式三子程序→闪烁子程序。