Предлагаемая схема новогодней гирлянды реализует эффект перебора всех возможных сочетаний из четырех цветов. Кроме того, с помощью переключателя, Вы можете запустить любой из возможных эффектов по кругу.

Например, можно выбрать бегущий огонь из одного из четырех светодиодов, из двух подряд, из двух через один и из трех светодиодов. Также, можно включить всю гирлянду полностью.

В представленной нами компьютерной модели схемы новогодней гирлянды, щелкая мышью по переключателю, Вы можете увидеть все перечисленные выше эффекты.

 
 
 
 
 
 
   
   

 

Компьютерная модель схемы новогодней гирлянды реализована на JavaScript. Упрощенный листинг программы приведен ниже. Вы можете его скопировать в html файл и запустить у себя в браузере.

<html>
<head>
<style>
td {width:100px;height:100px;}
</style>
</head>
<body>

<table align=center><tbody>
<tr><td></td><td id=lamp1 style="background: red;"></td></tr>
<tr><td></td><td id=lamp2 style="background: green;"></td></tr>
<tr><td></td><td id=lamp3 style="background: yellow;"></td></tr>
<tr><td style="background: #eee;" onclick="selector(this);">Select</td>
    <td id=lamp4 style="background: blue;"></td></tr>
</tbody></table>
<br>

<script>
// Конструктор ламп
function lamp(i)
{
this.color = eval("lamp" + i + ".style");
this.lights=this.color.background;
this.color.background="white";
this.onoff=function(voltage)
	{
	if(voltage)
		{this.color.background=this.lights;}
	else
		{this.color.background="white";}
	}
}

// Конструктор триггеров
function trigger(i)
{
this.D=0;
this.Y=0;
this.C=function()
	{
	this.Y=this.D
	}
}

// Создание ламп
lamp[1] = new lamp(1);
lamp[2] = new lamp(2);
lamp[3] = new lamp(3);
lamp[4] = new lamp(4);

// Создание триггеров
trigger[1] = new trigger(1);
trigger[2] = new trigger(2);
trigger[3] = new trigger(3);
trigger[4] = new trigger(4);

// Переключатель
k=1
function selector(obj)
{
k=!k
if (k)
	{obj.style.background="#eee"}
else
	{obj.style.background="#aaa"}	
}

// Схема коммутаций
function concept()
{
lamp[1].onoff(!trigger[1].Y);
lamp[2].onoff(!trigger[2].Y);
lamp[3].onoff(!trigger[3].Y);
lamp[4].onoff(!trigger[4].Y);
trigger[4].D=trigger[3].Y;
trigger[3].D=trigger[2].Y;
trigger[2].D=trigger[1].Y;
if (k)
	{
	A = trigger[3].Y;
	B = trigger[4].Y;
	trigger[1].D = !A && !B || A && B;
	}
	else
	{
	trigger[1].D=trigger[4].Y;
	}
}

// Генератор прямоугольных импульсов
function oscillator()
{
concept();
trigger[1].C();
trigger[2].C();
trigger[3].C();
trigger[4].C();
}

// Запуск генератора прямоугольных импульсов
setInterval("oscillator()", 800);

</script>
</body></html>

Принципиальная схема новогодней гирлянды:

Принципиальная схема новогодней гирлянды

На принципиальной схеме и на компьютерной модели новогодней гирлянды в исходном положении переключателя задействован логический элемент «исключающее ИЛИ-НЕ». Элемент «исключающее ИЛИ-НЕ» подает сигнал высокого уровня на D-вход первого D-триггера только в том случае, если на прямых выходах 3-го и 4-го D-триггеров уровни сигналов совпадают. Благодаря применению элемента «исключающее ИЛИ-НЕ» в схеме новогодней гирлянды удалось добиться получения самого красивого эффекта — перебор всех возможных сочетаний из четырех цветов. Кроме того, использование  логического элемента «исключающее ИЛИ-НЕ» в этой схеме предотвращает зависание бегущих огней.

Выше приведенная схема может быть легко  реализована на логических элементах микросхем различных серий (TM2, ЛП5, ЛА3 или ЛН2 и т.п.). Но программная модель новогодней гирлянды на JavaScript не может быть реализована с помощью логического оператора «исключающее ИЛИ-НЕ» так как его в JavaScript не существует.

В нашей программе, моделирующей логику работы схемы бегущих огней, мы использовали логические операторы ! - НЕ, && - И, || - ИЛИ.

Из таблицы истинности логического элемента «исключающее ИЛИ-НЕ»

ABCМинтермыМакстермы
0 0 1 !A && !B  
0 1 0   A || !B
1 0 0   !A || B
1 1 1 A && B  

Следует, что логическая функция элемента «исключающее ИЛИ-НЕ» может быть описана формулами:

C = !A && !B || A && B;
C = (A || !B) && (!A || B);

Так же, следующий фрагмент кода на JavaScript может быть использован вместо логического оператора «исключающее ИЛИ-НЕ»

C = !(A && !(A && B)) && !(B && !(A && B));

Что соответствует следующей электронной схеме, аналогу элемента «исключающее ИЛИ-НЕ»:

Аналог элемента «исключающее ИЛИ» на элементах И-НЕ

Или же, можно использовать следующий аналог на элементах ИЛИ-НЕ:

C = !(!(A || !(A || B)) || !(B || !(A || B)))

Аналог элемента «исключающее ИЛИ» на элементах ИЛИ-НЕ