Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
сука лаби.docx
Скачиваний:
17
Добавлен:
12.05.2015
Размер:
848.39 Кб
Скачать

Порядок виконання роботи

А. При підготовці:

1.Ознайомитися із додатком А, де наведені основні функції бібліотеки dos.h та приклади реалізації цих функцій ,опис регістрів керування паралельним портом комп’ютера та принциповою схемою запропонованого зовнішнього пристрою .

2.Ознайомитися з програмою (додаток В) із прикладами роботи з паралельним портом комп’ютера та зовнішнім пристроєм.

3.Розробити алгоритми та написати програму для виконання наступного завдання .У програмі повинно бути меню, за яким можна :

визначити стан порту та погасити випадково засвічені світлодіоди ;

засвітити будь-який світлодіод ,

організувати режим біжучих вогнів на світлодіодах ( таблиця № 21.1) ,

примусити блимати задані світлодіоди із заданою частотою (таблиця № 21.2 ) .

4.Підготувати шаблон звіту.

В. У лабораторii:

1.Виконати підготовлену програму .

2.Оцінити результати виконання програми та зробити висновки.

3.Заповнити звіт.

Змiст звiту:

1.Алгоритм розрахунків та програма.

2.Оцінка результатів та відповідні висновки.

3.Пропозиції по роботі.

Таблиця №21.1

Варіант

Кількість біжучих світлодіодів і напрямок руху

1

2 сусідніх , праворуч

11

2

3 сусідніх, праворуч

111

3

4 сусідніх, праворуч

1111

4

2 сусідніх, ліворуч

11

5

3 сусідніх, ліворуч

111

6

4 сусідніх, ліворуч

1111

7

2 з інтервалом у один світлодіод , праворуч

101

8

2 з інтервалом у два світлодіоди , праворуч

1001

9

2 з інтервалом у три світлодіоди , праворуч

10001

10

2 з інтервалом у один світлодіод , ліворуч

101

11

2 з інтервалом у два світлодіоди , ліворуч

1001

12

2 з інтервалом у три світлодіоди , ліворуч

10001

13

3 з інтервалом у один світлодіод , праворуч

1011

14

4 з інтервалом у один світлодіод , праворуч

10111

15

3 з інтервалом у один світлодіод , праворуч

1101

16

4 з інтервалом у один світлодіод , праворуч

11101

17

3 з інтервалом у один світлодіод , ліворуч

1011

18

4 з інтервалом у один світлодіод, ліворуч

10111

19

3 з інтервалом у один світлодіод, ліворуч

1101

20

4 з інтервалом у один світлодіод , ліворуч

11101

21

3 з інтервалом у два світлодіоди , праворуч

11001

22

3 з інтервалом у два світлодіоди , праворуч

10011

23

3 з інтервалом у два світлодіоди , ліворуч

11001

24

3 з інтервалом у два світлодіоди , ліворуч

10011

25

4 з інтервалом у один світлодіод , праворуч

11011

26

4 з інтервалом у один світлодіод , ліворуч

11011

27

4 з інтервалом у два світлодіоди , ліворуч

110011

28

3 з інтервалом у два світлодіоди , ліворуч

10101

29

4 з інтервалом у два світлодіоди , праворуч

110011

30

3 з інтервалом у два світлодіоди , праворуч

10101

Таблиця №21.2

Варіант

Кількість

Схема розташування

Частота ,Гц

1

4

1 0 1 0 1 0 1 0

10

2

5

1 1 0 1 0 1 0 1

12

3

5

1 1 1 0 1 0 1 0

14

4

6

1 1 1 1 0 1 0 1

16

5

4

1 0 0 1 0 1 0 1

18

6

4

1 1 0 0 1 0 1 0

20

7

5

1 1 1 0 0 1 0 1

11

8

5

1 1 1 1 0 0 1 0

13

9

6

1 1 0 1 1 0 1 1

15

10

5

1 1 0 0 1 1 0 1

17

11

5

1 1 0 0 0 1 1 1

19

12

3

1 0 0 1 0 0 1 0

2

13

3

1 0 0 0 1 0 1 0

2.5

14

3

1 0 0 0 0 1 1 0

3

15

3

1 0 1 0 0 1 0 0

3.5

16

3

1 1 0 0 0 1 0 0

4

17

3

1 0 0 1 1 0 0 0

4.5

18

3

1 0 0 0 0 1 1 0

5

19

4

1 1 0 0 0 0 1 1

5.5

20

4

1 1 0 0 1 1 0 0

6

21

4

1 1 0 1 1 0 0 0

6.5

22

4

0 0 1 1 0 0 1 1

7

23

4

0 0 0 1 1 0 1 1

7.5

24

4

0 0 0 0 1 1 1 1

8

25

4

1 1 1 1 0 0 0 0

8.5

26

5

1 1 0 0 1 1 0 0

9

27

5

1 1 1 0 0 0 1 1

9.5

28

5

0 0 1 1 1 0 1 1

10.5

29

4

0 0 1 1 0 0 1 1

11.5

30

3

0 0 0 1 1 0 0 1

12.5

Додаток А

Функції із бібліотеки dos.h

1. Виведення байта даних у порт за адресою

void outportb ( int portid , unsigned char value );

portid – адреса порту .

2. Виведення слова ( два байти ) даних у порт за адресою

void outport ( int portid , int value );

3. Введення байта даних із порту за адресою

unsigned char inportb ( int portid );

4. Введення слова даних із порту за адресою

int inport ( int portid );

5. Звук із заданою частотою :

запустити void sound ( unsigned frequency );

зупинити void nosound ( void );

6. Затримка виконання операторів

void delay ( unsigned milliseconds );

void sleep (unsigned seconds );

Паралельний порт LPT

Паралельний 8-розрядний порт комп’ютера в системах MS DOS та Windows 9x обслуговують три регістри : регістр для виведення даних за адресою 0х378 , регістр стану порту за адресою 0х379 (рис. 21.1) та регістр керування за адресою 0х37А (рис.21.2).

Регістр станів 379h

Біт

/BUSY

ACK

PE

SELIN

ERR

Номер

7

6

5

4

3

Рис.21.1.

Регістр керування 37Ah

Біт

Data i/o

IRQ En

/SEL

INIT

/AFEED

/STR

Номер

5

4

3

2

1

0

Рис.21.2.

У регістр даних записуються дані , що виводяться .Записане у регістр значення зберігається незмінним до наступного запису.

Читання регістру стану дозволяє виявити реакцію зовнішнього пристрою на виведені дані та скоригувати інформаційний обмін .

За допомогою регістру керування встановлюється заданий режим обміну . Слід зауважити , що цей порт призначений для принтера , тому більшість розрядів регістрів стану та керування має специфічне призначення :

BUSY - зовнішній пристрій зайнятий , /ACK – підтвердження обміну ,

PE – нема паперу ( Paper End ) , SEL - вхідний сигнал вибору , /SELIN – вихідний сигнал вибору , /ERROR – помилка , /INIT – ініціалізація , /AUTOFD – автоматична подача паперу (autofeed) .

Вихід розрядів регістрів на роз’єм порту показаний на рис.21.3.

PC

PC

[1] [3] [2] [3]

Рис.21.3.

Лабораторну роботу можна виконати на пристрою , зібраного за схемою, показаною на рис.21.4, 8 світлодіодів через опори у 470 Ом підключаються до виводів порту , стан яких визначається регістром даних. Дев’ятий світлодіод служить індикатором подачі напруги на світлодіоди . Щоб засвітити світлодіод , треба у відповідний розряд регістру даних

записати логічну одиницю „1” і вивести у високий рівень напруги на його вивід порту .Для гасіння треба подати низький рівень напруги , тобто записати у регістр даних логічний нуль „0” .

Наприклад , перший світлодіод

OutPortB ( 0x378h , 1) ; // засвічується

sleep ( 180 ) ; // горить 3 хвилини

OutPortB ( 0x378h , 0) ; //гасне

Додаток В

У даній демонстраційній програмі поєднано виконання одночасного виведення інформації на пристрій з світлодіодами та на екран компютера .

#include <iostream.h>

#include <conio.h>

#include <stdlib.h>

#include <dos.h>

const unsigned int lpt = 0x378; //адреса порту для даних

/* функція виведення на екран кольорового віконця , еквівалентного світлодіоду з номером number , який засвічується */

void show_led ( int number , int color )

{

window (28 + number*4 , 5 , 30 + number*4 , 6 );

textbackground ( color );

clrscr ();

}

/* функція виведення на екран кольорового віконця , еквівалентного світлодіоду з номером number , який загасається */

void clear_led ( int number )

{

window (28 + number*4 , 5 , 30 + number*4 , 6 );

textbackground ( LIGHTBLUE);

clrscr ();

}

Рис.17.4.

Рис.21.4.

/* функція обчислення 2К */

int pow2k ( int k )

{

int a = 1 , i = 1;

while( i < k )

{

i ++ ; a = a *2 ;

}

return a;

}

void main()

{

textbackground ( LIGHTGREEN );

clrscr();

gotoxy ( 28 , 4 );

cprintf ( " LIGHT EMITTING DIODES " );

int i, j ,k , a , a1 , b , m;

/* виведення на екран 8 яскраво-синіх забарвлених прямокутників , еквівалентних світлодіодам пристрою , у яскраво-зелене вікно */

for ( i = 0; i < 8; i ++ )

show_led ( i , LIGHTBLUE );

/* виведення на екран меню */

next: window ( 30 , 10 , 60 , 15 );

gotoxy ( 1 , 1 ); cprintf ("1. EMIT ONE LED -- 1 ");

gotoxy ( 1 , 2 ); cprintf ("2. RUN LED -- 2 ");

gotoxy ( 1 , 3 ); cprintf ("3. RUN LEDS -- 3 ");

gotoxy ( 1 , 4 ); cprintf ("4. END.EXIT -- 4 ");

gotoxy ( 1 , 5 ); cprintf (" CHOOSE MODE = ");

cin >> m;

switch ( m )

{

/* засвічування світлодіода із заданим з клавіатури номером */

case 1 :

gotoxy ( 1 , 6); cprintf ("\ show led , number = ");

cin >> k ;

show_led ( k-1 ,RED );

b = pow2k(k);

outportb ( lpt, b);

sound (50 * k); delay (10000);

clear_led ( k-1 );outportb ( lpt, 0);

nosound(); break;

/* біжучий світлодіод */

case 2 :

k=0; j = 0;

while (j < 24)

{

k = k % 8;

show_led ( k ,RED );

outportb ( lpt, pow2k( k ) );

delay (1000);sound (100 * (k+1));

clear_led ( k );

k++;

j++;

}

outportb ( lpt , 0 );nosound();

break;

/* поступове загоряння усіх світлодіодів */

case 3 :

a = 1, a1 = 1, j = 1;

while (j < 4 )

{

for (i = 0; i < 8; i++)

{

show_led ( i ,RED );

outportb (lpt, a1);

a = a*2; a1 = a - 1;

delay (1000);

sound (100*(i+1));

}

a = 1;j ++;

for (i = 0; i < 8; i++)

{

clear_led ( i );

}

outportb( lpt , 0 );

}

nosound(); break;

case 4 :

nosound();exit (1);

} goto next;

}

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

1. С.Д.Кузнецов. Турбо Си - М.Малип.1992.

2. Ян Белецкий. Энциклопедия СИ –М .Мир.1992.

3. Д.Мак-Кракен,У.Дорн . Численніе методы и програмирование на Фортране.М.Мир.1977.

4. Демидович В.П., Марон И.А. Основы вычислительной математики. - М.: Физматгиз, 1970.

5. Крилов В.И. Приближенное вычисление определенных интегралов . – М.Наука ,1967.

6. Зельдович Я.Б., Мышкис А.Д., Элементы прикладной математики. - М.Наука,1972г.

7. Копченова Н.В., Марон И.А. Вычислительная математика в примерах и задачах. - М.: Наука, 1972.

8. Справочник по функциям Borland C++ 3.1/4.0 .Под ред.И.И.Дериева . – Киев. Диалектика, 1994.

9. А.П.Побегайло.С/С++ для студента .- Санкт-Петербург , 2006.

10. С.В.Глушаков и др. Язык програмирования С++ .Учебный куррс.- Фолио- Аст ,2001.

11. Н.Культин .С/С++ в задачах и примерах . - Санкт-Петербург , 2001.

12. В.Дьяконов .Matlab 6 .Учебный курс. – Питер ,2001.

13. В.Дьяконов . Mathcad 2001 . Учебный курс. – Питер ,2001.

14. Глушаков С.В. и др.Персональный компьютер.Учебный курс.

-Харьков:Фолио.2001.

15.Шпак З.Я. Програмування мовою С.-Львів.-2006.

16. Джамса К. Учимся программировать на С++

17. Подбельский Язык С++.

18. Нейбауэр А. Моя первая программа на С/С++.-Питер.-1995.

19. Голуб А.И. Правила программирования С/С++.-М.:Бином,1996.

20 Коцержинський Б.О. Обчислювальна техніка та програмування . Навчально-методичний посібник для студентів радіотехнічних спеціальностей .-Київ ,2009.( електронний засіб навчального призначення)

21. Коцержинський Б.О. Обчислювальна техніка та програмування . Методичні вказівки до практичних занять з дисципліни. .-Київ ,2008.

22. Коцержинський Б.О. Обчислювальна техніка та програмування . Методичні вказівки до виконання лабораторних робіт з дисципліни. .-Київ , 2008.

23. Боглаев Ю.П. Вычислительная математика и программирование.-М:Высшая школа.1990.-544 с.

24. Киреев В.И., Пантелеев А.В.Численные методы в примерах и задачах.

25. Шмидт Справочник програмиста-С/С++ - Вільямс,Киев,2000

187