Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Буклет Лабораторні роботи МСТЗІ

.pdf
Скачиваний:
69
Добавлен:
12.02.2016
Размер:
6.09 Mб
Скачать

Рис. 7. Відображення текстової області VRAM на дисплей

GH

GH+1

GH+CL-1

GH+CL

GH+GA

GH+GA+1

GH+GA+CL-1

GH+GA+CL

 

 

 

n рядків

 

 

 

точок

GH+(n-2)GA

GH+(n-2)GA+1

GH+(n-2)GA+CL-1 GH+(n-2)GA+CL

GH+(n-1)GA

GH+(n-1)GA+1

GH+(n-1)GA+CL-1 GH+(n-1)GA+CL

 

Y точок у рядку

 

Рис. 8. Відображення графічної області VRAM на дисплей

де TH – задає початкову адресу для текстових даних вVRAM; GH – задає початкову адресу для графічних даних в VRAM; TA – задає кількість стовпців тексту на РКД; GA – задає кількість байт в рядку, які відображаються на РКД.

Формат

Розмір

 

 

Текстова область

 

 

Графічна область

 

CL+1

дисплею

шрифту

 

Х

 

m

 

TA

Y

 

n

 

GA

 

 

 

 

 

 

 

 

64x120

6х8

 

20

 

8

 

0х14

120

 

64

 

0х14

 

0х14

8х8

 

15

 

8

 

0х0F

120

 

64

 

0х0F

 

0х0F

 

 

 

 

 

 

 

128x128

6х8

 

21

 

16

 

0х16

128

 

128

 

0х16

 

0х16

8х8

 

16

 

16

 

0х10

128

 

128

 

0х10

 

0х10

 

 

 

 

 

 

 

64x240

6х8

 

40

 

8

 

0х28

240

 

64

 

0х28

 

0х28

8х8

 

30

 

8

 

0х1E

240

 

64

 

0х1E

 

0х1E

 

 

 

 

 

 

 

128x240

6х8

 

40

 

16

 

0х28

240

 

128

 

0х28

 

0х28

8х8

 

30

 

16

 

0х1E

240

 

128

 

0х1E

 

0х1E

 

 

 

 

 

 

 

Розглянемо

дисплей 64х128 пікселів

з розміром шрифту6х8 та

об’ємом

відео ОЗП8

Кбайт. Для графічної області потрібно виділити мінімум64*20 = 1280 байт і стільки ж для текстової. 1024 байт можна виділити для області користувацького символьного знакогенератора в режимі CG-ROM (128 символів по 8 байт). Карта пам’яті ОЗП представлена на Рис. 9.

Рис. 9. Приклад розбиття відео ОЗП розміром 8 Кбайт

Оскільки оперативної пам’яті достатньо для відображення 4 екранів (4*1280=5120 байт) є можливість організувати скролінг, шляхом зміни значень ТH та GH.

Переважно РКД з контролером T6963C містять від 4 до 8 Кбайт ОЗП.

110

Ініціалізація дисплею з контролером Т6963С

Розглянемо типову послідовність ініціалізації дисплею з розміром 128х128 та зі шрифтом 8х8 пікселів.

Команда

 

 

 

 

 

D7

D6

D5

D4

D3

D2

D1

D0

Hex

 

Опис

 

 

 

C/D

 

 

 

 

Power On

Включення живлення.

 

 

 

 

 

 

 

 

 

 

 

Hardware Reset

 

 

 

 

=0 (1 мілісекунда мін. після VDD > 4.5 B)

 

 

 

 

 

 

 

 

 

RES

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Mode Set

1

 

 

1

0

0

0

0

0

0

0

80Н

Режим"OR",

CG-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ROM.

 

 

 

Control Word Set

0

 

 

0

0

0

0

0

0

0

0

00Н

Початкова

 

адреса

 

0

 

 

0

0

0

0

0

0

0

0

00Н

для

графіки GH =

Graphic Home Address Set

1

 

 

0

1

0

0

0

0

1

0

42Н

0000H.

 

 

 

Control Word Set

0

 

 

0

0

0

1

0

0

0

0

10H

GA = 16. 16 байт в

 

Graphic Area Set

0

 

 

0

0

0

0

0

0

0

0

00Н

рядку для графіки.

1

 

 

0

1

0

0

0

0

1

1

43Н

 

 

 

 

 

Control Word Set

0

 

 

0

0

0

0

0

0

0

0

00Н

Початкова

 

адреса

 

0

 

 

0

0

0

0

1

0

0

0

08Н

для

тексту TH =

Text Home Address Set

1

 

 

0

1

0

0

0

0

0

0

40Н

0800H.

 

 

 

Control Word Set

0

 

 

0

0

0

1

0

0

0

0

10H

TA

=

16.

16

 

 

0

 

 

0

0

0

0

0

0

0

0

00Н

символів 8х8 в

Text Area Set

1

 

 

0

1

0

0

0

0

0

1

41Н

рядку.

 

 

 

Address Pointer Set

0

 

 

0

0

0

0

0

0

0

0

00Н

Встановити

 

 

 

0

 

 

0

0

0

0

0

0

0

0

00Н

вказівник

адреси на

 

1

 

 

0

0

1

0

0

1

0

0

24H

00Н.

 

 

 

 

Dispay Mode Set

1

 

 

1

0

0

1

1

1

0

0

9CH

Text/Graphic = On.

 

Initialisation Ends

*********************************************************

Кінець ініціалізації.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Для програмування РКД з контролером 6963Т С зручно розробити бібліотеку функцій нижнього рівня, які б здійснювали елементарні операції типу запису команд або даних різної розрядності в контролер, читання даних з дисплею та його ініціалізацію. На підставі них можна розробляти функції вищого рівня, типу побудови різних графічних примітивів(прямокутників, трикутників, кіл, індикаторів заряду батареї, рівня сигналу і т. п.), виводу тексту та меню. Далі наведено приклад таких функцій нижнього рівня на мові С.

// Підключення виводів шини даних LCD

#define PORT_LCD_DATA

PORTB

#define DDR_LCD_DATA

DDRB

#define PIN_LCD_DATA

PINB

// Підключення виводів управління LCD

#define PORT_LCD_CTRL

PORTD

#define DDR_LCD_CTRL

DDRD

#define PIN_LCD_CTRL

PIND

#define LCD_CE

3

 

#define LCD_CD

4

 

#define LCD_WR

5

 

#define LCD_RD

6

 

// LCD регістри

 

 

#define DATA

0

 

#define CTRL

1

 

// LCD коди команд

 

 

#define LCD_CURSOR

 

0x21

#define LCD_OFFSET

 

0x22

111

#define LCD_ADDRESS

0x24

#define LCD_TEXTHOME

0x40

#define LCD_TEXTAREA

0x41

#define LCD_GFXHOME

0x42

#define LCD_GFXAREA

0x43

#define LCD_ORMODE

0x80

#define LCD_XORMODE

0x81

#define LCD_ANDMODE

0x83

#define LCD_ATTRMODE

0x84

#define LCD_DISPLAY

0x90

#define LCD_CLINES

0xA0

#define LCD_AUTOWRITE

0xB0

#define LCD_AUTOREAD

0xB1

#define LCD_AUTORESET

0xB2

#define LCD_WRITEINC

0xC0

#define LCD_READINC

0xC1

#define LCD_WRITEDEC

0xC2

#define LCD_READDEC

0xC3

#define LCD_SCREENPEEK

0xE0

#define LCD_SCREENCOPY

0xE8

#define LCD_BITSET

0xF8

#define LCD_BITRESET

0xF0

//Драйвери нижнього рівня для роботи з LCD

////////////////////////////////////////////////////////////////////////////////////////////////////////

//Читає і повертає 1 байт з LCD регістра

byte LCD_READ(byte ctrl)

{

byte result;

 

 

 

 

 

 

 

 

 

DDR_LCD_DATA = 0;

// Налаштувати порт LCD_DATA на ввід

PORT_LCD_DATA = 0;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

PORT_LCD_CTRL.LCD_WR = 1;

// Операція читання: WR = 1

PORT_LCD_CTRL.LCD_CD = ctrl;

// Тип операції: команда (ctrl =1) або дані (ctrl = 0)

 

 

 

 

 

 

 

 

PORT_LCD_CTRL.LCD_CE = 0;

// Вибір мікросхеми CE =0

 

 

 

 

 

 

 

PORT_LCD_CTRL.LCD_RD = 0;

// Операція читання: RD =0

#asm("nop");

 

 

 

 

 

 

 

 

 

result = PIN_LCD_DATA;

// Прочитати дані з шини даних дисплею у змінну result

 

 

 

 

 

 

PORT_LCD_CTRL.LCD_RD = 1;

// Завершити читання: RD =1

 

 

 

 

PORT_LCD_CTRL.LCD_CE = 1;

// Завершити операцію: CE =1

DDR_LCD_DATA = 0xFF;

// Перевести порт LCD_DATA на вивід

return result;

}

////////////////////////////////////////////////////////////////////////////////////////////////////////

// Записує байт val в LCD регістр void LCD_WRITE(byte ctrl, byte val)

{

DDR_LCD_DATA = 0xFF;

// Налаштувати порт LCD_DATA на вивід

PORT_LCD_DATA = val;

// Виставити на шину даних значення val

112

PORT_LCD_CTRL.LCD_RD = 1;

// Операція запису: RD =1

PORT_LCD_CTRL.LCD_CD = ctrl;

// Тип операції: команда (ctrl =1) або дані (ctrl = 0)

 

 

 

 

 

 

 

 

PORT_LCD_CTRL.LCD_CE = 0;

// Вибір мікросхеми CE =0

 

 

 

 

 

 

 

PORT_LCD_CTRL.LCD_WR = 0;

// Операція запису: WR = 0

#asm("nop");

 

 

 

 

 

 

 

 

 

 

 

 

PORT_LCD_CTRL.LCD_WR = 1;

// Завершити запис: WR = 1

 

 

 

 

PORT_LCD_CTRL.LCD_CE = 1;

// Завершити операцію: CE =1

};

////////////////////////////////////////////////////////////////////////////////////////////////////////

// Записує 1 байтну команду в LCD void LCD_WRCMD(byte cmd)

{

while((LCD_READ(CTRL) & 3) != 3)

// Чекати поки LCD не буде готовий (STA1= STA0=1)

{};

 

LCD_WRITE(CTRL, cmd);

// Записати команду

}

////////////////////////////////////////////////////////////////////////////////////////////////////////

// Записує 2 байтну команду в LCD void LCD_WRCMD1(byte cmd, byte arg)

{

while((LCD_READ(CTRL) & 3) != 3)

// Чекати поки LCD не буде готовий (STA1= STA0=1)

{};

 

LCD_WRITE(DATA, arg);

// Записати перший байт команди

while((LCD_READ(CTRL) & 3) != 3)

// Чекати поки LCD не буде готовий (STA1= STA0=1)

{};

 

LCD_WRITE(CTRL, cmd);

// Записати команду

}

////////////////////////////////////////////////////////////////////////////////////////////////////////

// Записує 3 байтну команду в LCD void LCD_WRCMD2(byte cmd, int arg)

{

while((LCD_READ(CTRL) & 3) != 3)

// Чекати поки LCD не буде готовий (STA1= STA0=1)

{};

 

LCD_WRITE(DATA, arg & 0x00FF);

// Записати перший байт команди

while((LCD_READ(CTRL) & 3) != 3)

// Чекати поки LCD не буде готовий (STA1= STA0=1)

{};

 

LCD_WRITE(DATA, arg>>8);

// Записати другий байт команди зсунувши arg на 8 біт

вправо

 

while((LCD_READ(CTRL) & 3) != 3)

// Чекати поки LCD не буде готовий (STA1= STA0=1)

{};

 

LCD_WRITE(CTRL, cmd);

// Записати команду

}

 

////////////////////////////////////////////////////////////////////////////////////////////////////////

// Ініціалізація контролера Т6963С void LCD_Init(void)

113

{

PORT_LCD_DATA = 0;

// Налаштувати порт LCD_DATA на вивід

DDR_LCD_DATA = 0xFF;

// та встановити на шині даних значення 0х00

PORT_LCD_CTRL.LCD_CE = 1; PORT_LCD_CTRL.LCD_CD = 1; PORT_LCD_CTRL.LCD_WR = 1; PORT_LCD_CTRL.LCD_RD = 1;

DDR_LCD_CTRL.LCD_CE = 1; DDR_LCD_CTRL.LCD_CD = 1; DDR_LCD_CTRL.LCD_WR = 1; DDR_LCD_CTRL.LCD_RD = 1;

//Налаштувати лінії управління порта LCD_CTRL на вивід

//та встановити їх у неактивний стан

LCD_WRCMD(LCD_ORMODE);

// Режим накладання OR графіки та тексту

LCD_WRCMD2(LCD_GFXHOME, 0x0000);

// Початкова адреса для графіки GH = 0000H.

LCD_WRCMD2(LCD_GFXAREA, 0x0010);

// GA = 16. 16 байт в рядку для графіки.

LCD_WRCMD2(LCD_TEXTHOME, 0x0800);

// Початкова адреса для тексту TH = 0800H.

LCD_WRCMD2(LCD_TEXTAREA, 0x0010);

// TA = 16. 16 символів 8х8 в рядку.

LCD_WRCMD2(LCD_ADDRESS, 0);

// Встановити вказівник адреси на 0000Н.

LCD_WRCMD(LCD_DISPLAY + 0x0C);

// Включити відображення тексту і графіки.

};

Тепер якщо, наприклад, потрібно вивести символ N у верхньому правому куті дисплею слід виконати таку послідовність команд:

LCD_WRCMD2(LCD_ADDRESS, 0x0800 + 15);

// Задаємо адресу 16-го символу першого рядка

LCD_WRCMD1(LCD_WRITEINC, 0x2Е);

// Записуємо код символу N

Як було згадано вище, користувач може додавати свої власні символи до таблиці знакогенератора. Розглянемо як це здійснюється для дисплею128х128 з розміром шрифту 8х8 пікселів (1 символ = 8 байт). Для графічної області пам’яті необхідно виділити128 * 128 / 8 =

2048 байт. Стільки ж потрібно виділити і для текстової області. Якщо вибрано режим CG-ROM (команда Mode Set), то перші 128 символів з кодами 0х00-0x7F беруться з таблиці вбудованого знакогенератора (всього 1024 байт), а решта 128 символів з кодами0х80-0xFF можуть задаватися користувачем (Рис. 10, а). Нехай потрібно символу з кодом0х80 поставити у відповідність букву Б (Рис. 10, б) та вивести її у верхньому лівому куті дисплею.

а)

б)

Рис. 10. Карта пам’яті (а) та попіксельне зображення символу Б (б)

Послідовність команд для цього буде такою:

LCD_WRCMD2(LCD_ADDRESS, 0x1000 + 1024);

// Встановити вказівник адреси на початок CG-RAM

114

LCD_WRCMD2(LCD_OFFSET, 0x0002);

// Занести 5 старших біт адреси в регістр зміщення

LCD_WRCMD1(LCD_WRITEINC, 0xFC);

// Занести образ букви Б в CG-RAM

LCD_WRCMD1(LCD_WRITEINC, 0x66);

 

LCD_WRCMD1(LCD_WRITEINC, 0x60);

 

LCD_WRCMD1(LCD_WRITEINC, 0x7C);

 

LCD_WRCMD1(LCD_WRITEINC, 0x66);

 

LCD_WRCMD1(LCD_WRITEINC, 0x66);

 

LCD_WRCMD1(LCD_WRITEINC, 0xFC);

 

LCD_WRCMD1(LCD_WRITEINC, 0x00);

 

LCD_WRCMD2(LCD_ADDRESS, 0х0800);

// Встановити вказівник адреси на початок Text RAM

LCD_WRCMD1(LCD_WRITEINC, 0x80);

// Вивести букву Б

2. Хід виконання роботи

Напишіть та скомпілюйте програму в середовищіCodeVisionAVR відповідно до завдання. Запустіть програму Proteus та відкрийте файл LR_6.dsn (Рис. 11).

Рис. 11. Схема для симуляції

На схемі розташовані РКД128х128 пікселів PG128128A фірми Powertip (Тайвань) з вбудованим контролером Т6963С та МКAT90S2313. Дисплей містить 8 Кбайт відео ОЗП. Тактова частота мікроконтролера AT90S2313 становить 7.3728 МГц.

На схемі вже задане підключення виводів МК до дисплею, яке при бажанні можна змінити.

Підключіть .hex файл до МК на схемі, як описано в лабораторній роботі № 1.

Перед початком симуляції виберіть пункт менюDebug/Configure Diagnostics…У вікні, що з’явиться при цьому (Рис. 12, а) клікніть напроти пункту PG128128A (LCD) та для кожного з підпунктів виберітьTrace Information Level: Full Trace. Відповідно, в процесі симуляції схеми у вікні Simulation Log буде виводитися інформація про всі внутрішні події дисплею (Рис. 12, б), що значно полегшує процес відладки.

115

а)

б)

Рис. 12. Налаштування виводу інформації у процесі відладки

Запустіть симуляцію схеми і перевірте правильність її функціонування при побудові зображення. При необхідності внесіть зміни у програму та повторіть симуляцію.

3.ЗАВДАННЯ

3.1Домашня підготовка до роботи

1.Вивчити теоретичний матеріал.

2.Вивчити основні властивості, режими роботи та систему команд контролераT6963C необхідні для виконання лабораторної роботи.

3.Підготовити програму побудови зображення згідно індивідуального завдання уТабл. 4. При побудові зображення на вісях повинна бути виведена розмітка. Вісі потрібно підписати. В верхньому правому куті повинна бути виведена Ваша фамілія, під нею функція згідно завдання (див. Рис. 11).

3.2Виконати в лабораторії

1.Створити проект в CodeVisionAVR, ввести свою програму, провести її компіляцію.

2.Відкрити файл LR_6.dsn в програмі Proteus, підключити до МК отриманий в

CodeVisionAVR hex-файл.

3.Запустити режим симуляції схеми та перевірити правильність побудови зображення. При необхідності внести зміни у програму та повторити симуляцію.

4.ЗМІСТ ЗВІТУ

1.Мета роботи.

2.Повний текст завдання.

3.Лістинг програми одержаної в CodeVisionAVR, необхідні розрахунки.

4.Результат симуляції схеми в Proteus (копія екрану з відповідним зображенням).

5.Висновок.

116

5.КОНТРОЛЬНІ ЗАПИТАННЯ

1.Вкажіть склад та призначення блоків з яких складається графічний рідкокристалічний дисплей.

2.Назвіть основні характеристики графічного контролера Т6963С.

3.Опишіть склад та призначення виводів графічного дисплею з контролером Т6963С.

4.Формат та призначення бітів регістру статусу Т6963С ?

5.Наведіть основні команди графічного контролера Т6963С.

6.Наведіть приклад організації відео ОЗП об’ємом 4 Кбайт для дисплею 128х64 пікселів.

7.З яких кроків складається ініціалізація графічного дисплею ?

6.СПИСОК ЛІТЕРАТУРИ

1.Евстифеев А. В. Микроконтроллеры AVR семейства Classic фирмы «ATMEL». – М. Издательский дом “Додэка-ХХI”, 2002. – 288 с.

2.Баранов В. Н. Применение микроконтроллеров AVR: схемы, алгоритмы, программы. – М.: Издательский дом “Додэка-ХХI”, 2004. – 288 с.

3.Голубцов М. С., Кириченкова А. В. Микроконтроллеры AVR: от простого к сложному.

М.: СОЛОН-Пресс, 2006. – 304 с.

4.Трамперт В. Измерение, управление и регулирование с помощью микроконтроллеров.: Пер. с нем. – К.: МК-Пресс, 2006. – 208 с.

5.Белов А. В. Конструирование устройств на микроконтроллерах. – СПб.: Наука и Техника, 2005. – 256 с.: ил.

6.Лебедев М. Б. CodeVisionAVR: пособие для начинающих. – М.: Додэка-ХХI, 2008. – 592 с.:ил.

117

Табл. 4

Функція

Діапазон

1.

Y = 3*x+9

x = [0…20]

2.

Y = 2*x+12

x = [0…25]

3.

Y = 5*x+16

x = [0…50]

4.

Y = 7*x+3

x = [0…10]

5.

Y = 25*x+17

x = [0…5]

6.

Y = 11*x+5

x = [0…45]

7.

Y = 31*x+13

x = [0…15]

8.

Y = 4*x+21

x = [0…35]

9.

Y = 6*x+4

x = [0…40]

10.

Y = 23*x+10

x = [0…30]

11.

Y = 27*x+19

x = [0…25]

12.

Y = 9*x+18

x = [0…30]

13.

Y = 10*x+29

x = [0…40]

14.

Y = 19*x+20

x = [0…5]

15.

Y = 26*x+21

x = [0…35]

16.

Y = 1*x+24

x = [0…45]

17.

Y = 13*x+22

x = [0…50]

18.

Y = 8*x+25

x = [0…45]

19.

Y = 15*x+28

x = [0…15]

20.

Y = 16*x+16

x = [0…20]

21.

Y = 22*x+15

x = [0…10]

22.

Y = 28*x+8

x = [0…40]

23.

Y = 31*x+2

x = [0…25]

24.

Y = 12*x+11

x = [0…35]

25.

Y = 14*x+23

x = [0…50]

26.

Y = 17*x+7

x = [0…45]

27.

Y = 33*x+8

x = [0…30]

28.

Y = 36*x+14

x = [0…20]

29.

Y = 37*x+27

x = [0…5]

30.

Y = 39*x+1

x = [0…10]

31.

Y = 24*x+6

x = [0…15]

118

НАВЧАЛЬНЕ ВИДАННЯ

Побудова зображень на графічних рідкокристалічних дисплеях під управлінням AVR-мікроконтролерів

МЕТОДИЧНІ ВКАЗІВКИ

до лабораторної роботи № 6 з курсу «Мікропроцесори в системах технічного захисту інформації»

для студентів напряму 6.170102 «Системи технічного захисту інформації»

Укладачі: Cовин Ярослав Романович, доц., к.т.н. Стахів Марта Юріївна, асист.

Комп’ютерне складання: Cовин Ярослав Романович, доц., к.т.н.

119