ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 24.07.2024
Просмотров: 55
Скачиваний: 0
Команды, записываемые в регистр ir Таблица 2
Биты шины данных/адреса контроллера ЖКД |
Значение команды |
|||||||
DB7 |
DB6 |
DB5 |
DB4 |
DB3 |
DB2 |
DB1 |
DB0 |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
Очистка экрана. Счетчик адреса устанавливается на 0 позицию DDRAM |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
- |
Адресация на DDRAM, сброс сдвигов, Счетчик адреса устанавливается на 0 |
0 |
0 |
0 |
0 |
0 |
1 |
I/D |
S |
Настройка сдвига экрана и курсора |
0 |
0 |
0 |
0 |
1 |
D |
C |
B |
Настройка режима отображения |
0 |
0 |
0 |
1 |
S/C |
R/L |
- |
- |
Сдвиг курсора или экрана. |
0 |
0 |
1 |
DL |
N |
F |
- |
- |
Выбор числа строк экрана, разрядности шины и размера символа |
0 |
1 |
AG |
AG |
AG |
AG |
AG |
AG |
Переключение адресации на SGRAM и задание адреса в SGRAM |
1 |
AD |
AD |
AD |
AD |
AD |
AD |
AD |
Переключение адресации на DDRAM и задание адреса в DDRAM |
Значение отдельных битов команд:
I/D- инкремент или декремент счетчика адреса. По умолчанию в него записан «0» - декремент, т.е. каждый следующий байт будет записан в n-1 ячейку. ПриI/D«1» - инкремент счетчика.
S - сдвиг экрана, ПриS равном «1», с каждым новым символом окно экрана будет сдвигаться в направлении, указанном в I/D, пока не достигнет конца (начала) строки в DDRAM, Это удобно при выводе на экран длинной строки на 40 символов (строка не будет уходить за пределы экрана).
D- включение дисплея. «0» - изображение не будет выводиться на экран, чтобы ни было записано в память, «1» изображение появится на экране.
С - «1» курсор включен в виде прочерка, «0»-обычный курсор.
B– «1» курсор имеет вид мигающего черного квадрата, «0»-обычный курсор.
S/Cсдвиг курсора или экрана. Если «0», то сдвигается курсор, если «1», то экран (1 сдвиг за команду).
R/L– бит определяет направление сдвига курсора (экрана). «0» - сдвиг влево, «1» - вправо. Биты S/C и R/L используются совместно.
D/L- бит определяющий ширину шины данных. «1» - 8 бит, «0» - 4 бита.
N- число строк., «0» - одна строка, «1» - две строки.
F – определяет размер символа «0» - 5х8 точек. «1» - 5х10 точек (встречается редко).
Сразу после подачи на жк - модуль напряжения питания управляющие биты устанавливаются в исходное состояние.
I/D = 1: |
режим увеличения счетчика на 1 |
S = 0: |
без сдвига изображения |
D/L = 1: |
8-ми разрядная шина данных |
N = 0: |
режим развертки одной строки |
F = 0: |
символы с матрицей 5 х 8 точек |
D = 0: |
отображение выключено |
С = 0: |
курсор в виде подчерка выключен |
В = 0: |
курсор в виде мерцающего знакоместа выключен |
Их изменение производится специальными командами, записываемыми в регистр IR (см выше).
Контроллер может как записывать, так и читать данные. Чтение регистра DR приводит к загрузке содержимого DDRAM или CGRAM (зависит от текущего режима), при этом курсор смещается на одну позицию, как и при записи. Чтение регистра IR возвращает 8 значащих разрядов, в младших содержится текущее значение счетчика АС (7 бит, если адресуется DDRAM, и 6 - если CGRAM), а в старшем - флаг занятости BF. BF равен «1» если контроллер занят, «0» - если свободен.
!Примечание!Время выполнения контроллером большинства операций занимает около 40 мкс, а некоторых - единицы миллисекунд, поэтому цикл ожидания снятия флага BF должен обязательно присутствовать в программах драйвера ЖКИ - модуля и предшествовать совершению любой операции (кроме операции проверки флага BF).
Вывод на экрансимвола производится записью его кода в регистр DR. При этом, символ размещается в DDRAM по текущему адресу, указываемому АС, а значение АС увеличивается или уменьшается на 1. При последовательной записи символов и заполнении всей строки курсор автоматически переходит на вторую строку, если необходимо принудительно установить курсор на начало второй строки, то нужно присвоить АС значение 0х40 (64). Значения адресов DDRAM в диапазоне 0х28...0х3fF являются неопределенными и результаты работы с ними могут быть непредсказуемыми.
В MicroCдля более удобной работы пользователю предоставлены специальные функции и команды (см. приложение).
Последовательность действий при работе с ЖКД:
1 Подключить ЖК-модуль.
2 Инициализировать ЖКД.
3 Очистить дисплей.
4 Очистить курсор.
5 Вывести текст в нужное место.
6 Сдвинуть текст, если необходимо.
! после каждой команды устанавливать задержку.
Порядок выполнения работы
1 Изучить теоретическое введение, электрическую схему подключения ЖКД к МК да лабораторного стенда. Изучить порядок работы со стендом.
Установить ЖКД в соответствующий однорядный 16-ти контактный слот стенда.
! Второй дисплей должен быть снят со стенда, т.к используются общи линии управления и данных, одновременное включение двух дисплеев может привести к выводу из строя одного из них.
Потенциометром R2 установить нужную яркость (не должно быть видно знакомест).
2 Для каждого из пп 3.1…3.3 составить алгоритм работы программы и изменить в соответствии с ним код исходной программы.
3.1 Работа с памятью DDRAM (программа 1).
3.1.1 Записать в память дисплея (через DDRAM) фразу (на английском языке, не более 40 символов), начальная позиция фразы (знакоместо) указано втаблице 3.
3.1.2 Вывести на первую строку дисплея фразу целиком (сдвигая дисплей на соответствующее число символов вправо или влево).
3.1.3 В бесконечном цикле вывести на вторую строку дисплея «бегущую строку» (вывод начинать с 16 знакоместа строки и сдвигать влево на 15 символов).
3.2 Работа с памятью CGROM(программа 2).
3.2.1 По таблице символов CGROM (таблица 1) найти адреса заданных символов.
3.2.2 Вывести в бесконечном цикле на дисплей в указанную позицию (таблица 3) последовательность символов.
3.3 Работа с памятью CGRAM(программа 3).
3.3.1 Нарисовать на бумаге (лучше использовать листы в клетку) собственный символ. Составить для него массив.
3.3.2 Занести в таблицу CGRAM нарисованный символ и вывести его на дисплей в позицию (колонку) 1 первой строки.
Таблица 3 Задание на лабораторную работу
№ вар-а |
Программа 1 |
Программа 2 |
||||
|
№ строки |
№позиции |
сдвиг |
№ строки |
№позиции |
Последовательность символов |
1 |
1 |
1 |
вправо |
1 |
5 |
* % ( Ф |
2 |
1 |
2 |
вправо |
2 |
5 |
Ч Z + Ё |
3 |
2 |
10 |
влево |
2 |
7 |
< ; & ? |
4 |
2 |
12 |
влево |
1 |
1 |
Ü Ω Ψ 5 |
5 |
1 |
14 |
влево |
1 |
10 |
≥ ↓ № Ж |
6 |
1 |
15 |
влево |
2 |
2 |
↑ { S ) |
7 |
2 |
1 |
вправо |
2 |
6 |
Я Х Ю % |
8 |
2 |
3 |
вправо |
2 |
1 |
= З П Л |
Конфигурация системы:
- МК: AT89S8253 в составе лабораторного стенда Easy8051B,
- внешний модуль: LCD 2x16 – жидкокристаллический матричный графический индикатор (ЖК-дисплей) (2 строки по 16 символов),
- внешний генератор опорного напряжения: 10.0000 МГц
- разрядность шины - 4-х битная
Пример программы №1: инициализация ЖК-дисплея, вывод на экран текста и его сдвиг влево.
sbit LCD_RS at P2.B0; //Подключение ЖК-модуля
sbit LCD_EN at P2.B1;
sbit LCD_D7 at P2.B5;
sbit LCD_D6 at P2.B4;
sbit LCD_D5 at P2.B3;
sbit LCD_D4 at P2.B2;
// конец подключения ЖК - модуля
char text_prim[]= "Primer :programm #1:"; // объявление переменной для записи текста
char text_prim2[]= "Primer :string #2:"; // объявление переменной для записи текста
char i; // объявление переменной для организации цикла
void main()
{ Lcd_Init(); // Инициализация ЖКД
Lcd_Cmd(LCD_CLEAR); // очистка дисплея
Lcd_Cmd(LCD_CURSOR_OFF); // очистка курсора
LCD_Out(1,7, text_prim); // запись (вывод) текста в первую строку
for(i=0; i<14; i++) // сдвиг текста на 4 позиции вправо
{Lcd_Cmd(LCD_SHIFT_LEFT);
Delay_ms(500);
}
Lcd_Cmd(LCD_CLEAR);
Delay_ms(2000);
LCD_Out(2,6, text_prim2); // запись текста во вторe. строку
while(1) // бесконечный цикл (сдвиг текста на 15 позиций влево)
{ for(i=0; i<15; i++) //
{Lcd_Cmd(LCD_SHIFT_LEFT);
Delay_ms(500);
}
}
}
Содержание отчета
1. Схема подключения ЖКД к МК.
2. Алгоритмы программ 1-3.
3. Тексты программ.
4. Результаты работы программы.
Вопросы для защиты
1 Объяснить схему подключения ЖК – модуля к МК.
2 Какие типы памяти есть у ЖК – модуля, в чем их особенности?
3 Какое максимальное число символов может выводиться на дисплей (в одной строке) и находиться в памяти DDRAM?
4 Какие действия можно производить с дисплеем и курсором?
5 Какова роль светодиодной подсветки, где она расположена?