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

Программное управление технологическим оборудованием

.pdf
Скачиваний:
1
Добавлен:
29.11.2025
Размер:
11.79 Mб
Скачать

 

 

 

(RC

TRISCbits.TRISC6 = 0;

// Out

INA

6)

 

 

 

(RC

TRISCbits.TRISC7 = 0;

// Out

INB

7)

 

 

 

(RC

TRISCbits.TRISC8 = 0;

// Out

INC

8)

 

 

 

(RC

TRISCbits.TRISC9 = 1;

// In

D

9)

}

 

 

 

void Kbd_ReadCol(char row)

 

 

 

{

 

 

 

char column;

for (column = 0; column < 3; column++)

{

LATC &= ~(0x07 <<

6); // Выбор входа

LATC |= (column << 6);

__delay32(100L); // Пауза для установки сигнала

// чтение столбца

if (PORTCbits.RC9)

{

_keys[row][column] = 0;

}

else

{

_keys[row][column] = 1;

}

}

}

// Прерывание таймера T1 по совпадению

void __attribute__((interrupt,no_auto_psv)) _T1Interrupt()

{

Ind_Send(OFF);

// Отключение индикатора

LATB &= ~(0x0F <<

 

6);

// Переключение на следующий

LATB |= (_i << 6);

// индикатор

if (_i < 8)

 

{

 

Ind_Send(_ind[_i]

// Отправка кода цифры

511

);

 

}

 

else if (_i < 12)

 

{

 

Kbd_ReadCol(_i -

 

8);

// Сканирование столбца

}

 

// переключение активного вывода _i++; индикатора

if (_i == 12)

{

_i = 0;

}

 

 

 

 

// Сброс флага прерывания

IFS0bits.T1IF = 0;

таймера

TMR1

= 0;

// Перезапуск таймера

}

void main()

 

{

 

Kbd_Init()

 

;

 

Ind_Init();

// Инициализация индикации

Init_Timer1(); // Инициализация таймера while (1)

{

char row, column;

for (row = 0; row < 4; row++)

{

for (column = 0; column < 3; column++)

{

if (_keys[row][column] != 0)

{

Ind_Show(row, column);

}

}

}

}

}

512

4 Варианты индивидуальных заданий к лабораторной работе

Разработать программу для учебного стенда, позволяющую выполнить следующие действия:

1.Ввести последовательно два числа с клавиатуры, отображая вводимое число на LED. Клавишу «#» использовать как окончание ввода числа. После ввода рассчитать сумму введённых чисел и вывести результат на

LED.

2.Ввести последовательно два числа с клавиатуры, отображая вводимое число на LED. Клавишу «#» использовать как окончание ввода числа. После ввода рассчитать разность введённых чисел и вывести результат на

LED.

3.Ввести последовательно два числа с клавиатуры, отображая вводимое число на LED. Клавишу «#» использовать как окончание ввода числа. После ввода рассчитать произведение введённых чисел и вывести результат на LED.

4.Ввести последовательно два числа с клавиатуры, отображая вводимое число на LED. Клавишу «#» использовать как окончание ввода числа. После ввода рассчитать остаток от деления введённых чисел и вывести результат на LED.

5.Ввести последовательно два числа с клавиатуры, отображая вводимое число на LED. Клавишу «#» использовать как окончание ввода числа. После ввода рассчитать наибольший общий делитель введённых чисел и вывести результат на LED.

6.Ввести последовательно два числа с клавиатуры, отображая вводимое число на LED. Клавишу «#» использовать как окончание ввода числа. После ввода рассчитать наименьшее общее кратное введённых чисел и вывести результат на LED.

7.Ввести последовательно два числа с клавиатуры, отображая вводимое число на LED. Клавишу «#» использовать как окончание ввода числа. После ввода вывести максимальное из чисел на VD1..VD10 в двоичном коде.

8.Ввести последовательно два числа с клавиатуры, отображая вводимое число на LED. Клавишу «#» использовать как окончание ввода числа. После ввода вывести минимальное из чисел на VD1..VD10 в двоичном коде.

5 Контрольные вопросы

1.Для чего используется клавиатура в микропроцессорных системах?

2.Какое преимущество даёт использование матричной клавиатуры?

3.Расскажите алгоритм опроса клавиш матричной клавиатуры.

4.Какие недостатки присущи матричной клавиатуре?

513

Лабораторная работа 11

Исследование устройства матричной жидкокристаллической индикации

Цель работы:

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

Порядок выполнения работы:

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

Изучить принципиальную электрическую схему к лабораторной работе.

Разработать программу в соответствии с индивидуальным заданием.

Отладить программу в среде MPLAB IDE.

Загрузить программу в учебный стенд.

Исследовать работу устройства жидкокристаллической индикации.

Оформить отчёт по лабораторной работе.

Ответить на контрольные вопросы.

1. Краткие теоретические сведения

1.1Устройство и принцип работы жидкокристаллического индикатора

Внастоящее время в микропроцессорных системах для отображения широко используют жидкокристаллические индикаторы (ЖКИ). Условно все ЖКИ можно разделить на две категории: символьные, или знакосинтезирующие, и графические. Графические индикаторы представляют собой матрицу из m строк и n столбцов, на пересечении которых находятся пиксели. Пиксель представляет собой неделимый объект прямоугольной или круглой формы, обладающий определённым цветом; пиксель – наименьшая единица растрового изображения. Если на определенный столбец

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

ипяти столбцов. Символьные индикаторы бывают одно-, двух- и четырехстрочными.

Всостав контроллера ЖКИ входят три вида памяти: CGROM, CGRAM, DDRAM. Когда микроконтроллер передает в контроллер ЖКИ коды символов, то они записываются в DDRAM (Display data RAM – ОЗУ кодов отображаемых символов), такую память называют видеопамятью или видеобуфером. Видеобуфер в символьных

514

индикаторах обычно содержит 80 ячеек памяти – больше, чем число знакомест дисплея. У двухстрочных индикаторов ячейки с адресами от 0x00 и до 0x27 отображаются на верхней строке дисплея, а ячейки с адресами 0x40 … 0x67 – на нижней строке.

Матрицы начертания символов хранятся в памяти знакогенератора. Память знакогенератора включает в себя CGROM (Character generator ROM – ПЗУ знакогенератора), в которую на заводе-изготовителе загружены начертания символов таблицы ASCII. Содержимое CGROM изменить нельзя. Для того, чтобы пользователь смог самостоятельно задать начертание нужных ему символов, в знакогенераторе имеется специальное ОЗУ – CGRAM (Character generator RAM). Под ячейки CGRAM

отведены первые (младшие) 16 адресов таблицы кодов.

Для управления индикатором предназначены 11 линий — восемь для передачи данных (D0 - D7) и три линии управления. Линия RS служит для сообщения контроллеру индикатора о том, что именно передается по шине: команда или данные (RS = 1 — данные, RS = 0 — команда). По линии Е передается строб-сигнал, сопровождающий запись или чтение данных: по переходу сигнала на линии E из 1 в 0 осуществляется запись данных во входной буфер микроконтроллера индикатора. Запись информации в ЖКИ происходит по спаду этого сигнала. Потенциал на управляющем выводе R/W (Read/Write) задает направление передачи информации, при R/W = 0 осуществляется запись в память индикатора, при R/W = 1 – чтение из нее. Еще три линии предназначены для подачи питающего напряжения (VDD, GND) и напряжения смещения, которое управляет контрастностью дисплея.

Буфер ввода/вывода индикатора может работать в восьми- и четырёхбитном режиме. В четырёхбитном режиме данные передаются тетрадами.

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

Команды и алгоритмы работы жидкокристаллических индикаторов различных производителей могут иметь существенные различия. Организация работы с индикатором будет рассмотрена на примере используемого в стенде ЖКИ DV16236. Размер индикатора – 2 строки по 16 символов. Используемый драйвер –

HD44780.

1.2Команды контроллера ЖКИ

Втаблице 1.1 приведены основные команды контроллера ЖКИ и время, необходимое для выполнения этих команд. Значения битов используемых при установке режимов работы индикатора приведены в таблице 1.2.

Для того чтобы можно было определить, когда ЖКИ закончит свои внутренние операции, контроллер ЖКИ содержит специальный флаг занятости – BUSY-флаг (BF). Если контроллер занят выполнением внутренних операций, то BF установлен (BF = 1), если же контроллер готов принять следующую команду, то BF сброшен (BF = 0). Более простой способ организации обмена заключается в том, что управляющий микроконтроллер, зная, сколько времени требуется ЖКИ на

515

обработку той или иной команды, после каждой передачи информации ждет соответствующее время.

 

 

 

 

 

 

 

 

 

 

 

Таблица 1.1

 

 

 

 

Коды команд контроллера ЖКИ

 

 

 

 

 

Код инструкции

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Время

Инструк-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Описание

выпол-

ция

 

 

 

 

 

 

 

 

 

 

 

 

 

RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

 

нения

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Очистка дисплея и

 

Очистить

 

 

 

 

 

 

 

 

 

 

 

 

 

0

0

0

0

0

0

0

0

0

1

перевод курсора в

1,52 мс

дисплей

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

начальную позицию

 

Возврат в

 

 

 

 

 

 

 

 

 

 

Перевод курсора в

 

 

0

0

0

0

0

0

0

0

1

-

 

1,52 мс

начало

 

 

 

 

 

 

 

 

 

 

начальную позицию

 

 

 

 

 

 

 

 

 

 

 

 

Установка

 

 

 

 

 

 

 

 

 

 

 

 

направления

 

 

 

 

 

 

 

 

 

 

 

 

перемещения

 

Установка

 

 

 

 

 

 

 

 

 

 

курсора

 

режима

0

0

0

0

0

0

0

1

I/D

SH

и разрешение

37 мс

ввода

 

 

 

 

 

 

 

 

 

 

смещения

 

 

 

 

 

 

 

 

 

 

 

 

отображаемой

 

 

 

 

 

 

 

 

 

 

 

 

области

 

 

 

 

 

 

 

 

 

 

 

 

Установка битов

 

Вкл/выкл

 

 

 

 

 

 

 

 

 

 

вкл/выкл дисплея

 

 

 

 

 

 

 

 

 

 

 

 

(D),

 

индика-

0

0

0

0

0

0

1

D

C

B

 

37 мс

 

 

 

 

 

 

 

 

 

 

 

курсора (C) и

 

тора

 

 

 

 

 

 

 

 

 

 

мерцания курсора

 

 

 

 

 

 

 

 

 

 

 

 

(B)

 

Сдвиг

 

 

 

 

 

 

 

 

 

 

Установка битов

 

 

 

 

 

 

 

 

 

 

 

 

перемещения

 

курсора и

 

 

 

 

 

 

 

 

 

 

курсора

 

 

0

0

0

0

0

1

S/C

R/L

-

-

и сдвига дисплея

37 мс

индика-

 

 

 

 

 

 

 

 

 

 

без

 

тора

 

 

 

 

 

 

 

 

 

 

изменения DDRAM

 

 

 

 

 

 

 

 

 

 

 

 

Установка

 

 

 

 

 

 

 

 

 

 

 

 

интерфейса

 

 

 

 

 

 

 

 

 

 

 

 

 

516

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Окончание таблицы 1.1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Установка

 

 

 

 

 

 

 

 

 

 

 

 

 

(DL: 8/4-битный),

 

 

 

 

 

0

0

 

0

0

1

DL

N

F

-

-

 

37 мс

режимов

 

 

 

 

 

 

 

 

 

 

 

 

 

 

количества строк (N) и

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

шрифта (F)

 

 

Установка

 

 

 

 

 

 

 

 

 

 

 

 

 

Установка интерфейса

 

 

позиции

 

0

 

0

1

 

 

D6

D5

D4

D3

D2

D1

D0

позиции курсора

37 мс

курсора

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(адреса DDRAM)

 

 

 

Запись

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Запись данных в

 

 

данных в

 

1

 

0

D7

 

D6

D5

D4

D3

D2

D1

D0

 

37 мс

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DDRAM

 

 

 

DDRAM

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Таблица 1.2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Значение битов конфигурации

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Значение бита

 

 

 

 

 

 

 

 

Описание

 

 

 

 

 

 

 

 

 

 

Смещение курсора вправо при записи данных в

 

 

 

 

I/D = 0

 

 

 

DDRAM

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Смещение курсора влево при записи данных в

 

 

 

 

I/D = 1

 

 

 

DDRAM

 

 

 

 

 

 

 

 

 

 

SH = 0

 

 

 

Смещение отображаемой области отключено

 

 

 

 

SH = 1

 

 

 

Смещение отображаемой области включено

 

 

 

 

D =

 

 

 

Отключить

 

 

 

 

 

 

 

 

 

0

 

 

 

 

дисплей

 

 

 

 

 

 

 

 

 

D =1

 

 

 

Включить исплей

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Отключить

 

 

 

 

 

 

 

 

С = 0

 

 

 

курсор

 

 

 

 

 

 

 

 

 

С = 1

 

 

 

Включить курсор

 

 

 

 

 

 

 

 

B =

 

 

 

Отключить мерцание

 

 

 

 

0

 

 

 

 

курсора

 

 

 

 

 

 

 

 

 

 

B =

 

 

 

Включить мерцание

 

 

 

 

1

 

 

 

 

курсора

 

 

 

 

 

 

 

 

 

 

N =

 

 

 

1-строчный

 

 

 

 

 

 

 

 

 

0

 

 

 

 

дисплей

 

 

 

 

 

 

 

 

 

 

N =

 

 

 

2-строчный

 

 

 

 

 

 

 

 

 

1

 

 

 

 

дисплей

 

 

 

 

 

 

 

 

 

 

F =

 

 

 

Размер символа

 

 

 

 

 

 

 

 

0

 

 

 

 

5*8

 

 

 

 

 

 

 

 

 

 

 

F =

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

Размер символа 5*10

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

517

1.3 Инициализация ЖКИ

Перед началом работы требуется произвести инициализацию ЖКИ. Алгоритм инициализации индикатора для четырёхбитного режима представлен на рисунке 1.2.

Рис. 1.2. Блок-схема алгоритма инициализации индикатора

518

2 Электрическая принципиальная схема к лабораторной работе

На рис.2.1 приведена электрическая схема подключения матричного жидкокристаллического индикатора к микроконтроллеру.

Рис. 2.1. Электрическая схема подключения матричного жидкокристаллического индикатора

В стенде используется матричный жидкокристаллический индикатор DV-16236 фирмы DataVision. Для согласования уровней напряжений микроконтроллера и жидкокристаллического индикатора, последний подключён к микроконтроллеру через

микросхему буфера. Активация буфера происходит при низком уровне сигнала на входах. .

3 Пример выполнения работы

Задача: Разработать программу для учебного стенда, отображающую на LCD строку с моделью используемого в стенде микроконтроллера.

Анализ задачи:

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

Руководствуясь диаграммой передачи информации из документации на драйвер индикатора, определим последовательность действий при передаче информации в ЖКИ следующим образом: устанавливаем требуемое значение RS, на линию R/W подаем логический ноль, затем на линию E выводим

519

логическую единицу, после чего подаем на шину D значение передаваемого байта. Контроллер ЖКИ считает этот байт и состояние управляющих линий (RS, R/W) только после подачи на линию E логического ноля.

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

Листинг программы:

#include <P33FJ32MC204.h> #define FOSC

7370000 #define FCY (FOSC / 2)

#define Delay_ms(d) (__delay32 (((d)) * ((FCY) / 1000uL))) _FOSCSEL(FNOSC_FRC) // настройка работы микроконтроллера

 

// от внутреннего тактового

 

генератора

#define LCD_EN

LATAbits.LATA10

#define LCD_RW

LATCbits.LATC2

#define LCD_RS

LATAbits.LATA7

#define LCD_DB7

LATBbits.LATB12

#define LCD_DB6

LATBbits.LATB14

#define LCD_DB5

LATBbits.LATB11

#define LCD_DB4

LATBbits.LATB10

// Подпрограмма отправки тетрады данных в драйвер ЖКИ void LCD_set_half_byte(char x)

{

if (x & (0x01 << 3)) LCD_DB7 = 1;

else

LCD_DB7 = 0;

if (x & (0x01 << 2)) LCD_DB6 = 1;

else

LCD_DB6 = 0;

520

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