Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ку1.DOC
Скачиваний:
4
Добавлен:
18.09.2019
Размер:
958.98 Кб
Скачать

Список використаної літератури

  1. Сташин В.В. «Проектирование цифровых устройств на однокристальных микроконтроллерах». – М.:Радио и связь, 1991

  2. Фрунзе А.В. «Микроконтроллеры. Это же просто». – Москва. ООО «ИД СКИМЕН», 2002

  3. Варламов Р.Г. «Современные источники питания: Справочник». – М.: ДМК, 1998

  4. Браун М. «Источники питания. Расчет и конструирование».: Пер с англ. – – К.: «МК-Пресс», 2007

  5. Щука А.А. «Электроника. Учебное пособие»/Под. реф. проф. А.С. Сигова. – СПб.: БХВ-Петербург, 2005

  6. Швец В.А., Шестакова В.В. «Одноплатные микроконтроллеры. Проектирование и применение». – К.: «МК-Пресс», 2005

  7. Горячева Г.А. «Конденсаторы: справочник». – М.: Радио и связь, 1984

  8. Закон України “Про охорону праці”.

9 Кіт Ю.В., Пістун І.П. Охорона праці.(психологія безпеки).навч. посібн.-

Л.:2008.

Додаток (Програма роботи пристрою )

#include <8052.h>

unsigned char mode = 1, green_p = 3;

unsigned char sec_gr[4] = { 19, 19, 19, 19 };

char sec_p[4] = { -50, -25, 0, 25 };

unsigned char c[4] = { 0, 0, 0, 0 };

unsigned char ind[16];

t1()interrupt 4 //початок режиму Standart

{

static unsigned char i, t = 10, yb_on = 0, std_on = 0, sec_bgy = 6, green = 0, all_c = 0;

TH1 = 0x3c;

TL1 = 0xb0;

if (!(--t))

{

if (mode == 1)

{

TR0 = 0;

TR2 = 1; //запустити індикацію

if (sec_gr[green] != 0) //вимкнути рахунок машин

{

switch(green) //засвітити зелене світло 19с

{

case 0: P0 = 0x94; P2 = 0x11; break;

case 1: P0 = 0x41; P2 = 0x19; break;

case 2: P0 = 0x11; P2 = 0x94; break;

case 3: P0 = 0x19; P2 = 0x41; break;

}

--sec_gr[green];

t = 10;

}

else if (sec_bgy > 3) //блимати зелене світло 3с

{

if (std_on)

{

switch(green)

{

case 0: P0 = 0x94; P2 = 0x11; break;

case 1: P0 = 0x41; P2 = 0x19; break;

case 2: P0 = 0x11; P2 = 0x94; break;

case 3: P0 = 0x19; P2 = 0x41; break;

}

}

else

{

P0 &= 0x11;

P2 &= 0x11;

}

std_on = ~std_on;

--sec_bgy;

t = 5;

}

else if (sec_bgy) //засвітити жовте світло 3с

{

switch(green)

{

case 0: P0 = 0x32; P2 = 0x11; break;

case 1: P0 = 0x21; P2 = 0x13; break;

case 2: P0 = 0x11; P2 = 0x32; break;

case 3: P0 = 0x13; P2 = 0x21; break;

}

--sec_bgy;

t = 10;

}

else //засвітити наступне зелене світло

{

t = 10;

sec_gr[green] = 19;

sec_bgy = 6;

green = (++green) % 4;

}

for (i = 0; i < 4; ++i) //перерахунок часу для пішоходів

{

--sec_p[i];

if ((75 + sec_p[i]) == 0)

{

green_p = (++green) % 4;

sec_p[i] = 25;

}

}

}

if (mode == 2)

{

TR0 = 1; //запустити рахунок машин

TR2 = 1; //запустити індикацію

if (sec_gr[green] != 0)

{

switch(green) //засвітити зелене світло на потрібний час

{

case 0: P0 = 0x94; P2 = 0x11; break;

case 1: P0 = 0x41; P2 = 0x19; break;

case 2: P0 = 0x11; P2 = 0x94; break;

case 3: P0 = 0x19; P2 = 0x41; break;

}

--sec_gr[green];

t = 10;

}

else if (sec_bgy > 3) //блимати зелене світло 3с

{

if (std_on)

{

switch(green)

{

case 0: P0 = 0x94; P2 = 0x11; break;

case 1: P0 = 0x41; P2 = 0x19; break;

case 2: P0 = 0x11; P2 = 0x94; break;

case 3: P0 = 0x19; P2 = 0x41; break;

}

}

else

P0 &= 0x11; P2 &= 0x11;

std_on = ~std_on;

--sec_bgy;

t = 5;

}

else if (sec_bgy) //засвітити жовте світло 3с

{

switch(green)

{

case 0: P0 = 0x32; P2 = 0x11; break;

case 1: P0 = 0x21; P2 = 0x13; break;

case 2: P0 = 0x11; P2 = 0x32; break;

case 3: P0 = 0x13; P2 = 0x21; break;

}

--sec_bgy;

t = 10;

}

else //засвітити наступний світлофор, визначити потрібний час

{

t = 10;

TR0 = 0;

c[green] = TL0;

TL0 = 0;

all_c = c[0] + c[1] + c[2] + c[3];

sec_gr[0] = (c[0] / all_c) * 76;

sec_gr[1] = (c[1] / all_c) * 76;

sec_gr[2] = (c[2] / all_c) * 76;

sec_gr[3] = (c[3] / all_c) * 76;

sec_bgy = 6;

green = (++green) % 4;

}

for (i = 0; i < 4; ++i) //перерахунок часу для пішоходів

{

--sec_p[i];

if ((75 + sec_p[i]) == 0)

{

green_p = (++green) % 4;

sec_p[i] = 25;

}

}

}

if (mode == 3)

{

TR0 = 0; //вимкнути рахунок машин

TR2 = 0; //вимкнути індикацію

if (yb_on)

{

P0 = 0x22; P2 = 0x22; //блимати жовте світло

}

else P0 = P2 = 0;

t = 5;

yb_on = ~yb_on;

}

}

}

t2()interrupt 6 //Динамічна індикація

{

static unsigned char pos = 0;

TF2 = 0;

P1 = pos << 4 | ind[pos];

++pos;

}

unsigned char readmode() //Режим змінено?

{

if (RI) //Режим змінено

{

switch (SBUF) //Змінити mode

{

case 0x11: mode = 1; break;

case 0x21: mode = 2; break;

case 0x31: mode = 3; break;

case 0x41: mode = 4; break;

case 0x42: mode = 5; break;

case 0x43: mode = 6; break;

case 0x44: mode = 7; break;

}

RI = 0;

}

}

void gw(unsigned char way) //Режим GreenWay

{

TR0 = 0;

TR1 = 0;

TR2 = 0;

switch(way)

{

case 0: P0 = 0x14; P2 = 0x11; break;

case 1: P0 = 0x41; P2 = 0x11; break;

case 2: P0 = 0x11; P2 = 0x14; break;

case 3: P0 = 0x11; P2 = 0x41; break;

}

}

void indication() //Двійково-десяткове перетворення

{

if (sec_p[0] > 0)

{

ind[0] = ind[1] = 0xf;

ind[8] = sec_p[0] / 10;

ind[9] = sec_p[0] % 10;

}

else

{

ind[8] = ind[9] = 0xf;

ind[0] = (75 + sec_p[0]) / 10;

ind[1] = (75 + sec_p[0]) % 10;

}

if (sec_p[1] > 0)

{

ind[2] = ind[3] = 0xf;

ind[10] = sec_p[1] / 10;

ind[11] = sec_p[1] % 10;

}

else

{

ind[10] = ind[11] = 0xf;

ind[2] = (75 + sec_p[1]) / 10;

ind[3] = (75 + sec_p[1]) % 10;

}

if (sec_p[2] > 0)

{

ind[4] = ind[5] = 0xf;

ind[12] = sec_p[2] / 10;

ind[13] = sec_p[2] % 10;

}

else

{

ind[12] = ind[13] = 0xf;

ind[4] = (75 + sec_p[2]) / 10;

ind[5] = (75 + sec_p[2]) % 10;

}

if (sec_p[3] > 0)

{

ind[6] = ind[7] = 0xf;

ind[14] = sec_p[3] / 10;

ind[15] = sec_p[3] % 10;

}

else

{

ind[14] = ind[15] = 0xf;

ind[6] = (75 + sec_p[3]) / 10;

ind[7] = (75 + sec_p[3]) % 10;

}

}

void main()

{

TMOD = 0x15; //Початкові установки

TL0 = 0;

TH1 = 0x3c;

TL1 = 0xb0;

IE = 0xa8;

TR0 = 0;

RCAP2H = 0xfb;

RCAP2L = 0xe6;

while (1)

{

readmode(); //Режим змінено?

switch (mode) //Режим Green Way?

{

case 4: gw(0); break;

case 5: gw(1); break;

case 6: gw(2); break;

case 7: gw(3); break;

default: TR0 = 1; break;

}

indication(); //Двійково-десяткове перетворення

}

}

Арк.

59

ТНКНУЛП ДП 5.05010201.12.41.09 ПЗ

Зм

Арк.

№ докум.

Підпис

Дата

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]