Смекни!
smekni.com

Разработка архитектуры, принципиальной схемы и конструкции специализированного микроконтроллера (стр. 3 из 4)

0.0.0.D.D.KK.S.

Здесь DD кодирует режим работы дисплея, КК - режим работы клавиатуры, S - режим сканирования в соответствии со следующими правилами:

DD:00Дисплей на 8 символов с вводом слева

01Дисплей на 16 символов с вводом слева

10Дисплей на 8 символов с вводом справа

11Дисплей на 16 символов с вводом справа

Описание режимов правого и левого вводов приводится ниже. Если сканирование идет в режиме дешифратора, то дисплей не может быть больше, чем на четыре символа (так как линии SL общие).

КК: 00 Клавиатура в режиме одиночного нажатия клавиш

01 Клавиатура в режиме N-клавишного нажатия

10 Сканирование матрицы датчиков

11 Режим стробируемого ввода

S:0Сканирование в режиме 4-битного двоичного счетчика

1Сканирование в режиме инверсного дешифратора на четыре выхода.

После сброса ККД оказывается в режиме, соответствующем УС0-00001000. При сканировании в режиме счетчика цикл опроса клавиатуры укладывается в восемь состояний счетчика от "0000" до "0111" и oт "1000" до "1111". Таким образом, в этом режиме опрос клавиатуры происходит дважды в каждом цикле полного пересчета счетчика SLO—SL3, т.е. для сканирования клавиатуры используются только три младшие линии SLO-SL2.

УС инициализации опорной частоты (УС1): О.О.1.Р.Р.Р.Р.Р. Здесь РРРРР устанавливает коэффициент деления частоты внешнего синхросигнала CLK для получения внутреннего опорного сигнала с частотой не более 100 кГц. После сброса устанавливается максимальный коэффициент РРРРР, равный 11111. При частоте внутреннего опорного сигнала 100 кГц один полный цикл сканирования занимает приблизительно 10,2 мс.

УС чтения памяти клавиатуры/датчиков (УС2): О.1.0.I.Х.А.А.А. УС2 должно предшествовать чтению данных из памяти клавиатуры. Здесь I есть признак автоинкрементной адресации; ААА устанавливает адрес байта памяти, который должен быть считан. Если бит I установлен, то последующие команды чтения данных будут вызывать автоматическое увеличение адреса. Таким образом, если необходимо прочитать всю память клавиатуры, то это можно сделать, загрузив УС2 с битом I = 1 и затем 8 раз считать данные из ККД.

УС чтения памяти дисплея (УСЗ): 0.1.1.I.A.AA.A. УСЗ должно предшествовать чтению данных из памяти дисплея. Здесь I есть признак автоинкрементной адресации: АААА — номер позиции дисплея, которая должна быть считана. Если I = 1, то адрес будет инкрементироваться после каждого чтения.

УС записи в память дисплея (УС4): 1.0.0.1.А.А.А.А. Кодирование аналогично УСЗ. Поле АААА определяет адрес байта в ОЗУ дисплея.

УС запрета записи в память дисплея и бланкирования дисплея (УС5): 1.0.1.X.IWA.IWB.BLA.BLB. Здесь IW - указатель запрета записи (тетрады А и В), BL - указатель бланкирования (очистки) (тетрады А или В). Если дисплей используется как двойной 4-позиционный, то удобно маскировать одну из тетрад, чтобы работа процессора с одной тетрадой не отражалась на другой. Эту возможность дает указатель IW. Указатель BL используется для бланкирования дисплея; если он установлен. То на выходах А и/или В устанавливается специальный бланкирующий код (см. УС6). Содержимое памяти дисплея при этом не изменяется, Если дисплей используется как единый 8-позиционный, то необходимо устанавливать оба указателя.

УС сброса памяти дисплея (УС6): 1.1.0.CD.BC.BC.CF.CA. УС6 служит для: выбора кода бланкирования (ВС), сброса байта состояния (CF) и сброса памяти дисплея (CD). Биты ВС позволяют выбрать один из трех возможных бланкирующих кодов.

После общего сброса контроллера бланкирующий код устанавливается равным ООН.

Процедура сброса памяти дисплея осуществляется путем заполнения кодами бланкирования. Процедура инициируется при установке бита CD и продолжается примерно 160 мкс. В это время память дисплея недоступна, на что указывает старший бит байта состояния контроллера.

Бит CF, будучи установлен, сбрасывает байт состояния, сигнал прерывания и устанавливает указатель памяти матрицы датчиков на строку 0. Управляющий бит СА работает как биты CD и CF в совокупности, а также сбрасывает схему внутренней синхронизации.

УС сброса прерывания/установки режима ошибки (УС7): U.1.E.X.X.XX В состоянии матрицы датчиков УС7 сбрасывает линию прерывания и разрешает дальнейшую запись в память клавиатуры (матрицы датчиков). В режиме N-клавишного нажатия, если установлен бит Е, контроллер переходит в режим ошибки.

Режим одиночного нажатия клавиш. Дисциплина опознания нажатых клавиш в этом режиме такова: если обнаружено нажатие одной клавиши, то в течение следующих двух циклов сканирования клавиатуры будет производиться проверка нажатия других клавиш. Если таких клавиш не будет, то нажатая клавиша признается единственной и код ее записывается в память клавиатуры. Если в течение этих двух циклов будет обнаружено нажатие еще одной клавиши, то в память клавиатуры не заносится код ни одной клавиши до тех пор, пока не будут освобождены все клавиши, кроме одной. После того как все, кроме одной, клавиши будут освобождены и не будут нажаты новые в течение двух циклов, код этой клавиши будет занесен в память клавиатуры. Код клавиши заносится в память клавиатуры только один раз на каждое нажатие.

Режим N-клавишного нажатия. В этом режиме нажатие каждой клавиши фиксируется независимо от состояния остальных клавиш. Когда клавиша нажата, пропускаются два цикла опроса клавиатуры, а затем проверяется, осталась ли данная клавиша нажатой. Если да, то ее код заносится в память. При одновременном нажатии распознавание клавиш производится в порядке их опроса в цикле сканирования клавиатуры. Опознание всех клавиш ведется независимо. На каждое нажатие код клавиши вводится только один раз.

Специальный режим ошибки при сканировании клавиатуры. Для режима сканирования клавиатуры с N-клавишным нажатием с помощью УС7 можно запрограммировать специальный режим ошибки. Если в течение одного цикла сканирования будут нажаты две клавиши, это трактуется как совместное нажатие и устанавливается флаг ошибки в байте состояния. Этот флаг запрещает дальнейшую запись в память клавиатуры и устанавливает линию прерывания (если она не была установлена). Флаг ошибки можно сбросить с помощью УС6, установив в нем CF= 1.

Режим матрицы датчиков. В этом режиме "антидребезговая" логика не работает. Состояние датчиков непосредственно записывается в память матрицы датчиков (память клавиатуры). Хотя антидребезговый контроль и не обеспечивается, МК может иметь информацию о том, как долго датчик находится в единичном или нулевом состоянии (у датчика подразумеваются только два состояния). Линия прерывания устанавливается в единицу, если в конце цикла сканирования матрицы хотя бы один из датчиков изменил свое состояние, и сбрасывается при первой же операции чтения, если не был установлен указатель автоинкрементирования.

Форматы данных. В режиме клавиатуры байт, записываемый в память клавиатуры, отражает положение клавиши на клавиатуре, а также состояние входов CNTL и SHIFT. Формат данных в этом режиме CNTL.SHIFT.SL2.SL1.SL0.R2.R1.RO.

Здесь SL2-SLO - двоичный код строки, в которой находится клавиша, R2-RO - двоичный код колонки, в которой находится клавиша (номер линии RL, на которую поступил нулевой сигнал).

В состоянии матрицы датчиков данные, приходящие на линии RL7—RLO, непосредственно вводятся в память клавиатуры. Таким образом, каждое изменение в датчиках в течение одного цикла будет отражено в памяти. Состояния SHIFT и CNTL игнорируются.

Формат данных в режиме стробируемого ввода; RL7.RL6.RL5.RL4, RL3.RL2.RL1.RLO. В этом режиме данные также вводятся в память по линиям RL7-RL0, но при этом ввод стробируется линией CNTL/STB. Данные заносятся в память по фронту сигнала CNTL/STB.

Следует помнить, что цикл сканирования клавиатуры постоянен, не зависит от размера дисплея и соответствует максимальной конфигурации клавиатуры 8x8 при сканировании в режиме счетчика и 4х8 при сканировании в режиме дешифратора.

Режимы работы дисплея

Ввод слева. Это самый простой формат ввода. При нем каждой позиции на дисплее однозначно соответствует байт в памяти дисплея. Нулевой адрес памяти дисплея соответствует самой левой нулевой позиции дисплея, адрес 15 (7 для 8-позиционного дисплея) соответствует самой правой позиции дисплея. При переходе за 16 (8) позиций следующие символы будут опять вводиться слева с нулевой позиции, т.е. 17-й (9) символ займет крайнюю левую позицию.

Ввод справа. Этот способ ввода используется в калькуляторах. Первый вводимый символ заносится в крайнюю правую позицию. Следующие символы также заносятся в крайнюю правую позицию, но после того, как все символы на дисплее сдвинутся на одну позицию влево. Самый левый символ при этом теряется. Заметим, что здесь номера позиций на дисплее уже не соответствуют адресам памяти дисплея. Адрес памяти дисплея в этом случае соответствует порядковому номеру нажатой клавиши. Указание позиции, в которую должен быть введен символ при автоинкрементируемом вводе (см. далее), может иметь непредсказуемый результат.

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