Выбор регистров осуществляется путем подачи сигнала управления от микроконтроллера на вывод RS: если RS = 0, то будет подключен регистр команд, а если RS = 1, то регистр данных. Вывод R/W – чтение - 1/запись - 0, а вывод Е (Enable) – для строб-сигнала положительной полярности (+5В) длительностью не менее 450 нс, в течение которого записываются передаваемые биты.
Рисунок 3.1 – Схема подключения ЖКИ к микроконтроллеру
Как правило, в микроконтроллерных системах управления для задания режимов функционирования ЖКИ используется порт Е (Е0, Е1 и Е2), питание и подсветка подключаются напрямую - +5В, а данные или команды подаются от любого свободного порта.
Регистр команд IR выполняет следующие функции: смещение курсора, гашение табло или установку адреса индикатора. Регистр данных DR служит для промежуточного хранения данных, которые затем с помощью внутренних операций автоматически передаются впамять отображаемых данных (DD — DisplayData) или в память знакогенератора (CG — CharacterGenerator).
В начале каждого сброса данных на ЖКИ необходимо убедится в его свободности по флагу занятости (разряд 7). Установленный флаг занятости (лог. 1) означает, что модуль HD44780 занят выполнением внутренней операции и в данный момент к приему не готов.
Считывание данных из памяти DD или CG выполняется через регистр данных DR. После того как микроконтроллер записывает некоторый адрес в регистр IR, байт данных, расположенный в памяти по этому адресу, с помощью внутренней операции переписывается в регистр DR. Процесс чтения завершается считыванием байта данных из этого регистра. Когда текущая операция чтения завершена, с помощью функции автоинкремента в регистр данных DR записывается байт данных, извлеченный из памяти по следующему адресу, который будет использован при очередном считывании.
Счетчик адреса, по сути, состоит из двух частей и содержит текущий адрес как в памяти DD-RAM, так и в памяти CG-RAM. После того как в регистр IR записана команда установки адреса DD-RAM или CG-RAM, этот адрес с помощью внутренней операции автоматически переносится в соответствующий счетчик. Когда запись в память DD/CG (или чтения из нее) завершена, соответствующий счетчик автомата инкрементируется.
В модуле HD44780 используется две разные памяти:
- DD-RAM- для хранения отображаемых данных;
- CG-RAM- для хранения битовых комбинаций, которые соответствуют матрице размером 5x8 или 5x10 (определяет форму символа).
Доступ как к одной, так и к другой памяти осуществляется по текущему адресу, хранимому в счетчике адреса.
Емкость памяти DD-RAM составляет 80 знаков, представленных в 8-разрядной ASCII-кодировке. Из них на двухстрочном табло могут быть одновременно отображены 16 символов в каждой строке, однако с помощью операции сдвига последующие символы также могут оказаться в отображаемой области (выделено жирным).
Таблица 3.2 – Двухстрочное табло ЖКИ
Позиция | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 39 | 40 | |
Адрес DD-RAM | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 0A | 0B | 0C | 0D | 0E | 0F | 10 | .. | 26 | 27 |
Адрес DD-RAM | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 4A | 4B | 4C | 4D | 4E | 4F | 50 | .. | 66 | 67 |
Первая строка начинается с адреса 00Н, а вторая — с адреса 40Н. Память разбита на две половины по 40 байт каждая, причем между последним адресом первой строки и первым адресом второй строки есть разрыв в 24d байта.
После сдвига влево первая строка начинается с адреса $01, а вторая строка — с адреса $41, а после сдвига вправо первая строка начинается с адреса $27, а вторая строка — с адреса $67.
Знакогенератор — это память типа ROM, предназначенная для хранения битовых комбинаций, соответствующих матрице размерами 5x8 или 5x10. В этой памяти можно хранить информацию о 208 символах (матрица 5x8).
В модуле HD44780 реализуются следующие функции:
- начальная инициализация: DL = 1 - 8-разрядный интерфейс, N = 1 -
двухстрочное табло, F = 0 - матрица 5x8;
- управление табло: D = 0 - табло отключено, С = 0 — курсор отключен,
В = 0 - мерцание отключено;
- очистка табло;
- режим ввода данных: I/D = 1 — инкремент на 1; S = 0 — нет сдвига тa6ло.
Блок – схема программы инициализации ЖКИ имеет вид, представленный на рисунке 3.2.
Рисунок 3.2 – Блок-схема инициализации ЖКИ
Прежде чем разрабатывать программу инициализации необходимо привести полный перечень команд/инструкций для ЖКИ, которые приведены в таблице 3.3.
Таблица 3.3 - Система команд HD44780
Команда | Код | Описание | Время выполнения |
Очистка индикатораВозврат курсораУстановка режима вводаВкл/выкл индикатораСдвиг курсора илипозиции знакоместаФункциональная настройка Установка адреса CGRAMУстановка адреса DRAMСчитывание флагазанятости Запись данныхСчитывание данных | 0000 0001 0000 0010 0000 0AS0 0000 1DCB 0001 SR00 001L NF00 01ХХХХХХ 10ХХ ХХХХ В000 0000 Данные Данные | Очищает индикатор и возвращает курсор в исходное положениеВозвращает курсор в исходное положениеУстанавливает направление перемещения (А = 1 приращение) и сдвига (S = 1 сдвиг) курсораВключает/выключает индикатор (D = 1 вкл) (С = 1 курсор включен) (В = 1 курсор мигает)Устанавливает перемещение курсора и сдвиг позиции знакоместа (S =1 сдвиг позиции) (S = 0 R= 1 перемещения курсора вправоПрограммирование знакоместа (L = 1 восемь разрядов, L = 0 четыре), (N - 1 две строки) (F = 1 матрица 5x10 точек, F = 0 матрица 5x7 точек)Устанавливает адрес ОЗУ генератора символов (CG)Устанавливает адрес ОЗУ LCDСчитывает флаг занятости (В = 1 занят)Записывает данные на LCD или в ОЗУ генератора символовСчитывает данные с LCD илиОЗУ генератора символов | 1,64 мс 1,б4 мс 40 мкс 40 мкс 40 мкс 40 мкс 40 мкс 40 мкс 0 40 мкс40 мкс |
Ниже приводится программа управления ЖКИ: инициализация, затем опрос занятости и сброс на первую строку дисплея слова «PRIVET.», пользуясь DD-RAM и слова «Привет!» с помощью символов CG-RAM.
include <p!6f377.h>
include <lmO321.h>
; ===================================
; Переменные управления индикатором
; ===================================
;
LCD_DATAEQUPORTB
LCD_ DATA TRIS EQU TRISB
LCD_CNTL EQU PORTЕ
E EQU 1
RRW EQU 0
RS EQU 2
TEMPI1 EQU 0x0 30
; =========================================
; Начало кода
; =========================================
ORG RESET_V
nор
RESET GOTO START
; =========================================
; Начало исполняемого кода с адреса 100h
; =========================================
ORG 100h
START
CLRF STATUS
CLRF PORTB
CLRF FORTE
BSF STATUS, RPO
CLRF TRISB
CLRF TRISE
BCF STATUS, RPO
; ==========================================
; Инициализацияиндикатора
; ==========================================
CLRF LCD_CNTL
DISPLAY_INIT
MOVLW 0x038 ; Выбираем 8-ми битный интерфейс
MOVWF LCD_DATA
BSF LCD_CNTL, E
BCF LCD_CNTL, E
LCD_DELAY
MOVLW LCD_INIT_DELAY
MOVWF MSD
CLRF LSD
CLRF LSD
LOOP 2
DECFSZ LSD, F ; Delay time = MSD * ((3 * 256) + 3) * Тсу
GOTO LOOP2
DECFSZ MSD,F
END_LCD_DELAY
GOTO LOOP2
CMD_SEQ
MOVLW 0x38
MOVWF LCD_DATA
BSF LCD_CNTL, E
BCF LCD_CNTL, E
MOVLW DISP_ON
CALL SEND_CMD
MOVLW CLR_DISP
CALL SEND_CMD
MOVLW ENTRY_INC
CALL SEND_CMD
MOVLW DD_RAM_ADDR
CALL SEND_CMD
; ====================================
; Начало работы
; ====================================
CALL FUNCTION
GOTO START
FUNCTION
MOVLW 'P'
CALL SEND_CHAR
MOVLW 'R’
CALL SEND_CHAR
MOVLW 'I'
CALL SEND_CHAR
MOVLW 'V'
CALL SEND_CHAR
MOVLW 'E’
CALL SEND_CHAR
MOVLW 'T’
CALL SEND_CHAR
MOVLW '.’
CALL SEND_CHAR
MOVLW B'11000000'
CALL SEND_CMD
MOVLW h'A8'
CALL SEND_CHAR
MOVLW h'50’
CALL SEND_CHAR
MOVLW h'A5’
CALL SEND_CHAR
MOVLW h'4 2'
CALL SEND_CHAR
MOVLW h'45'
CALL SEND_CHAR
MOVLW h'54 '
CALL SEND_CHAR
MOVLW h'21'
RETURN
; =====================================
; Подпрограмма вывода символа на экран ЖКИ
; =====================================
SEND_CHAR
MOVWF CHAR
CALL BUSY_CHECK
MOVF CHAR, W
MOVWF LCD_DATA
BCF LCD_CNTL, RRW
BSF LCD_CNTL, RS
BSF LCD_CNTL, E
BCF LCD_CNTL, E
RETURN
; ===================================
; Подпрограмма передачи команды на ЖКИ
; ===================================
SEND_CMD
MOVWF CHAR
CALL BUSY_CHECK
MOVF CHAR, W
MOVWF LCD_DATA
BCF LCD_CNTL, RRW
BCF LCD_CNTL, RS
BSF LCD_CNTL, E
BCF LCD_CNTL,E
RETURN
; ===================================================
; Подпрограмма ожидания разрешения от ЖКИ на передачу
; символа или команды
; ==================================================
BUSY_CHECK
BSFSTATUS,RPO
MOYLW 0xFF
MOVWF LCD_DATA_TRIS
BCF STATUS, RPO
BCF LCD_CNTL, RS
BSF LCD_CNTL, RRW
BSF LCD_CNTL, E
BCF LCD_CNTL, E
MOVF LCD_DATA, W
MOVWF TEMPI
BCF TEMPI, 7
BTFSC TEMPI, 7
GOTO BUSY_CHECK
BCF LCD_CNTL, RRW
BSF STATUS, RPO
MOVLW 0x00
MOVWF LCD_DATA_TRIS
BCF STATUS, RPO
RETURN
end
3.2 Программа управления термодатчиком и двигателем
Согласно заданным условиям эксплуатации проектируемой системы температура в теплице должна поддерживаться пределах 20 - 30 градусов. Алгоритм программы управляющего микроконтроллера, реализующий контроль температуры в заданных пределах путем естественной вентиляции и нагрева: открытие окон происходит при превышении температуры и закрытие при понижении температуры, показан на рисунке 3.3.
Рисунок 3.3 – Блок-схема алгоритма работы управляющего контроллера
Блок-схема алгоритма управления термодатчиком DS 1820, описанного в параграфе 2.3. имеет вид, показанный на рисунке 3.4.