Рис.1 ЖКИ MT-10T8
Индикатор MT-10T8 (внешний вид приведен на рис.1) является очень популярным изделием российской фирмы “МЭЛТ”. Он содержит собственный встроенный контроллер, отвечающий за работу внутренней логики устройства и управление сегментами на жидких кристаллах. Его работоспособность сохраняется при напряжении питания 3…5 В; максимальный ток потребления составляет 30 мкА (без подсветки). Подобно ЖКИ на базе HT1611 от также содержит 10 знакомест, но обладает намного большей функциональностью. Во-первых, протокол обмена предусматривает адресацию любой позиции на экране. Это означает, что для изменения одного или нескольких символов не придется перезаписывать все остальные. Во-вторых, MT-10T8 допускает независимое управление каждым из 8 сегментов (присутствует десятичная точка), что дает возможность отображать такое же количество символов, как и на светодиодном индикаторе.
Назначение выводов модуля приведено в табл.1. Помимо выводов питания модуля +E и GND и питания подсветки +L, -L, имеется также выводы управления контрастностью V0. Напряжение на нем имеет положительную полярность и может быть подано с любого резистивного делителя включенного между шиной питания и общим проводом.
Табл.1. Функциональное назначение выводов ЖКИ МТ-10Т8:
Номер вывода |
Название выводов |
Функциональное назначение |
1 |
A0 |
Выбор записи данные/адрес |
2 |
_WR2 |
Инверсный вход тактовых импульсов |
3 |
WR1 |
Прямой вход тактовых импульсов |
4-7 |
BD3-DB0 |
Шина данных/адреса |
8 |
GND |
Общий вывод |
9 |
V0 |
Напряжение управления контрастностью |
10 |
+E |
Напряжение питания |
11 |
+L |
Анод светодиодной подсветки |
12 |
-L |
Катод светодиодной подсветки |
Рис.2 Схема подключения ЖКИ MT-10T8 к микроконтроллеру
Схема подключения MT-10T8 к микроконтроллеру показана на рис.2. В целом для управления индикатором требуется как минимум 6 линий. Информация передается посредством 4-разрядной шины BD3:DB0 и записывается по фронту синхроимпульса на входе WR1. Помимо этого существует еще инверсный синхронизирующий вход _WR2, объединенный с WR1 по схеме WR1 AND _WR2. Если в его использовании нет необходимости, то он должен быть соединен с землей. Уровень напряжения на выводе A0 определяет будет ли производится запись адреса (A0=0) или данных (A0=1).
Рис.3 Последовательность передачи данных в MT-10T8
Временная диаграмма сигналов приведена на рис.3. В самом начале записи на линиях BD3…DB0 выставляется адреса знакоместа в диапазоне 0x00…0x09(нумерация ведется слева на право). После чего A0 переводится в состояние лог.0 и на WR1 формируется импульс подтверждения. Далее следуют, непосредственно, данные. Так как для кодирования каждого символа требуется 8 бит, то запись каждого из них происходит за 2 такта: сначала младшая тетрада, затем старшая. При передачи данных, как уже говорилось выше перед синхроимпульсом на линии WR1, на входе выбора данных/адреса A0 должен присутствовать высокий логический уровень. Внутри схемы управления MT-10T8 имеется счетчик текущего адреса, который автоматически инкрементируется после каждого принятого символа. Благодаря этому существует возможность произвести запись сразу в несколько ячеек подряд. Необходимо передать только начальный адрес, а за ним последовательность символов. Кроме 10-ти ячеек видеопамяти ЖКИ имеет еще один управляющий регистр по адресу 0x0F, отвечающий за блокировку работы модуля. В отличии от всех остальных этот регистр 4-битный. Запись в него значения BD3:DB0 = 0b0000 делает невозможным доступ к индикатору в течении последующих 30 циклов обращения. Принудительное снятие блокировки осуществляется записью в регистр значения BD3:DB0 = 0b0001. Активизировать MT-10T8 необходимо в самом начале программы поскольку сразу после подачи напряжения питания режим блокировки включается автоматически.
Рис.4 Коды наиболее распространенных символов MT-10T8
Коды наиболее распространенных символов приведены на рис.4. Расположение сегментов A…H для каждой позиции совпадает с их расположением у светодиодных индикаторов. Младший полубайт кода содержит биты, отвечающие за сегменты A,D,E,G, старший полубайт - за F,C,B,H (отображаемому сегменту соответствует лог.1). Для записи символа “1”, например, необходимо последовательно передать BD3:DB0 = 0b0000 (сегменты A,D,E,G погашены) и BD3:DB0 = 0b0110 (сегменты F,H погашены, сегменты C,B отображаются).
.def data = R16 ;регистр для передачи адреса и данных .def temp = R17 ;регистр для промежуточных операций .def cnt = R18 ;счетчик циклов .equ WR1 = PB4 .equ A0 = PB5 ldi temp,high(RAMEND) ;инициализация стека out SPH,temp ldi temp,low(RAMEND) out SPL,temp . clr temp ;обнуляем регистр PORTB out PORTB,temp ldi temp,0b00111111 ;настраиваем линии PB5…PB0 на вывод out DDRB,temp rcall mt10t8_init ;инициализируем модуль перед началом работы . ldi data,3 ;устанавливаем адрес 3 ячейки видеопамяти, rcall write_adr ;в которую будет выведен следующий символ ldi data,21 ;выводим символ “H” rcall write_dat ldi data,14 ;выводим символ “E” rcall write_dat ldi data,20 ;выводим символ “L” rcall write_dat ldi data,20 ;выводим символ “L” rcall write_dat ldi data,0 ;выводим символ “O” rcall write_dat . ; Набор подпрограмм для работы с MT-10T8 ; R16 – регистр для передачи адреса и данных ; R17 – регистр для промежуточных операций ; R18 – счетчик циклов ; ZH:ZL – указатель для перекодировки символов ; Вспомогательная подпрограмма записи полубайта write_nibl: andi R16,0x0F ;выделяем младший полубайт в регистре in R17,PORTB ;копируем содержимое порта во временный andi R17,0xF0 ;регистр для модификации or R17,R16 ;оставляем неизменным состояние старших 4-х out PORTB,R17 ;линий и выводим новое значение в порт nop ;задержка времени в 3 цикла nop nop sbi PORTB,WR1 ;формируем синхроимпульс на линии WR1 nop ;задержка времени в 3 цикла nop nop cbi PORTB,WR1 ;окончание синхроимпульса на линии WR1 ret ; Подпрограмма записи адреса ячейки памяти ; В R16 передается адреса ячейки памяти (0…9) перед вызовом ; подпрограммы. write_adr: cbi PORTB,A0 ;устанавливаем на линии A0 лог.0 rcall write_nibl ;записываем адрес ret ; Подпрограмма записи символа ; В R16 передается номер символа из таблицы перекодировки ; mt10t8_tabl перед вызовом подпрограммы. В старшем разряде R16 ; в подпрограмму передается десятичная точка (сегмент H). write_dat: bst data,7 ;копируем бит с десятичной точкой во флаг T andi data,0b01111111 ;очищаем старший бит R16 sbi PORTD,A0 ;выставляем на линии A0 лог.1 ldi ZH,high(2*mt10t8_tabl);заносим в указатель Z адрес ldi ZL,low(2*mt10t8_tabl) ;начала таблицы перекодировки add ZL,data ;добавляем к указателю Z смещение, adc ZH,zero ;соответствующее положению символа в таблице lpm data,Z ;извлекаем в R16 из таблицы символ rcall write_nibl ;записываем младший полубайт кода символа lpm data,Z ;снова извлекаем в R16 из таблицы символ swap data ;обмениваем местами полубайты bld data,0 ;копируем флаг T в разряд десятичной точки rcall write_nibl ;записываем старший полубайт кода символа ret ; Подпрограмма инициализации mt10t8_init: ldi R16,0x0F ;устанавливаем адрес 0x0F rcall write_adr ;управляющего регистра ldi R16,1 ;записываем в регистр 4-битное значение sbi PORTB,A0 ;0b0001 для снятия блокировки rcall write_nibl clr R16 ;устанавливаем начальный адрес 0 rcall write_adr ;ячейки видеопамяти clr R16 ldi R18,10 ;инициализируем счетчик байтов sbi PORTB,A0 di1: rcall write_nibl ;очищаем сегменты, всех 10 ячеек rcall write_nibl ;последовательно записывая в каждую dec R18 ;из них 0(space) brne di1 ret mt10t8_tabl: ;таблица символов MT-10T8 ;символы номер в таблице .db 0xEE, 0x60, 0x2F, 0x6D ;0,1,2,3 0, 1, 2, 3 .db 0xE1, 0xCD, 0xCF, 0x68 ;4,5,6,7 4, 5, 6, 7 .db 0xEF, 0xED, 0xEB, 0xC7 ;8,9,A,b 8, 9, 10, 11 .db 0x8E, 0x67, 0x8F, 0x8B ;C,d,E,F 12, 13, 14, 15 .db 0x00, 0xAB, 0x82, 0xF6 ;space,P,I,U 16, 17, 18, 19 .db 0x86, 0xE3, 0x66, 0xE5 ;L,H,J,Y 20, 21, 22, 23 .db 0xCE, 0xFA, 0x46, 0xC3 ;G,П,u,h 24, 25, 26, 27 .db 0x07, 0x43, 0xA9, 0x87 ;c,n,o,t 28, 29, 30, 31 .db 0x03, 0x40, 0xA9, 0x04 ;r,i,grad,_ 32, 33, 34, 35 .db 0x01, 0x08 ;-,~ 36, 37
Набор подпрограмм для управления ЖКИ MT-10T8 приведен выше. Подпрограммы write_adr, write_dat производят запись адреса и данных соответственно. Процедура инициализации mt10t8_init обязательно должна быть вызвана перед началом работы. Она снимает блокировку индикатора и очищает от “мусора” все ячейки видеопамяти, записывая во все сегменты лог.0.
Перейти к следующей части: Символьный ЖКИ на базе контроллера HD44780
Комментарии (0) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация