Софтверная часть работы с дисплеем в статье тут.
PS В процессе отработки технологии было убито два дисплея :(. Один раскололся, когда надевал контакты, второй, когда прижимал дисплей к плате проволокой. Ещё два прекрасно работают.
PPS Ещё один момент, про питание. Немного поэксперементировал с ним и вот что выяснил. Дисплей может питаться и от 3,3 и от 5 вольт. При этом, видимо, автоматически меняется контрастность.
Если ею управлять программно, то при питании 3,3 вольта максимум контрастности приходится на значение 96 и на выходе Vout диплея будет напряжение 8,6 вольт. Увеличение напряжения до 5 вольт к увеличению контрастности не приводит. Если подать 5 вольт, то максимум контрастности при значении 127, и на выходе Vout диплея будет напряжение 9,6 вольт. Уменьшение напряжения напрямую влияет на контрастность и на напряжение на выходе Vout.
we.easyelectronics.ru
Модуль я хотел сделать удобным сразу для нескольких задач. Это и эксперименты с самим дисплеем, и удобный способ проверить дисплей без пайки, и в качестве отладочного устройства отображения. Конечно, в комплекте с PBII уже идёт 16х2 символьный дисплей, вполне удобный для отладки. Но мне он не нравится. Ассоциируется с таксофонами времён моего детства, когда они стали цифровыми, с картами. Графический дисплей симпатичнее. При этом дисплей от 3310 ничуть не сложнее в использовании, не считая разве что необходимости в таблице символов.
Модуль, в зависимости от задачи, можно использовать в разных вариантах подключения.
Вариант 1.
Цепляемся на разъём краевого модуля правой стороной. Штатный дисплей, разумеется, придётся снять. Модуль питается от CPU PWR2, задавая уровень в 3.3В. Также задействуются линии MOSI, MISO, SCK, SS2. С дисплеем можно работать сразу после подключения, больше никаких перемычек не требуется. Левой стороной модуль опирается на 7-сегментик, но для надежности можно привинтить стойку, на пинбоарде там свободное место.
Вариант 2.
Цепляемся на разъём краевого модуля левой стороной. Аналогично первому варианту, только модуль висит справа, делая доступным 7-сегментник, шкалу светодиодов. По подключаемым линиям всё абсолютно одинаково. Для прочности модуль можно привинтить слева к штатной стойке и/или приделать ножки справа.
Вариант 3.
Вариант 4.
Ну и конечно, модуль можно использовать отдельно от pinboard’а, подключив его проводками. При желании, один разъём можно напаять на верхнюю сторону, для удобства. Или можно разъём для третьего варианта продублировать вверх.
Если какой-либо из вариантов использования не требуется, плату можно укоротить ножницами. Например, отрезав левую часть платы, станет невозможен третий вариант подключения, зато во втором можно будет использовать совместно со штатным дисплеем.
Сброс дисплея.
Для упрощения подключения к краевому разъёму (варианты 1 и 2), чтобы не тянуть отдельный проводок для линии Reset дисплея, начальный импульс сброса производится конденсатором при включении питания. В дальнейшем она подтягивается к питанию. Но, при необходимости, линией Reset дисплея можно управлять через штырёк слева от дисплея. В третьем варианте можно подключить RS к пину контроллера вместе с остальными линиями.
Подсветка.
Дисплей подсвечивается четырьмя smd-светодиодами, впаиваемыми на нижнюю сторону платы вверх ногами в отверстия. Диоды желательно взять поярче и на небольшое прямое напряжение. Питаются они от 3.3В. Включается подсветка джампером справа от дисплея. Вместо джампера на нижний пин можно посадить прямое управление подсветкой и/или запитать её от другого источника. Например, для плавного управления подсветкой ШИМом. На нижнюю часть подложки желательно наклеить кусочек фольги, чтобы свет от диодов отражался в сторону дисплея и не светил в глаза.
Управление.
Для работы с модулем можно использовать любую библиотеку для n3310. Например, библиотеку от XANDER’а. Есть только один нюанс. При работе аппаратного SPI в меге 16, невозможно использовать MISO/PB6 на выход. А линия MISO используется для пина D/C дисплея, выбирающего режим команды/данные. Так что на процессорном модуле нужно соединить выход MISO с любой свободной ножкой микроконтроллера. При программном SPI, как и при подключении через дисплейный разъём, проблем нет. Линию E-SS2-SCE можно вешать хоть на SS процессора, хоть на любой другой пин.
Плата.
Плата получилась двусторонней, но достаточно простой в приготовлении. Дорожки широкие, переходных отверстий не так много. Главное при сборке не забыть все штыри припаять с обеих сторон! Если конечно не заказывать плату с металлизацией. Дисплей крепится вместе с подложкой, лишнюю её часть, клавиатуру, можно отпилить, хотя модуль встаёт и с ней в любом варианте включения. Закрепляется проволокой в отверстия платы, которая припаивается или приматывается с обратной стороны платы. Если нужно по быстрому проверить дисплей, его можно и не крепить, просто слегка прижать. За счёт центрирующего отверстия под штырёк на подложке и подпружиненных контактов дисплея, это не составляет трудностей.
Схемы нет, плата слишком простая, рисовалась прямо в Sprint Layout’е. Разводка в аттаче.
we.easyelectronics.ru
Доработка контактов китайского дисплея Nokia 3310
Сидя на работе и размышляя о надежности узлов самодельных электронных устройств, решил проверить широко распространенный дисплей Nokia 3310, а точнее, его китайский клон. Уже давно не давала покоя его колодка контактов, хлипкая и не внушающая доверия. В оригинальном дисплее она приклеена к стеклу и достаточно надежна. Другое дело, что оригиналов сейчас не найдешь, либо цены на них сравнительно высоки.
Крутим колодку в руках, переворачиваем её и ставим обратно в подложку. В иных экземплярах она с некоторым усилием встает в отверстие.
Устанавливаем дисплей:
Теперь, поставив на место металлическую рамку, можно припаивать провода к колодке.
При отсутствии печатной платы или зазоре, сила прижатия колодки к дисплею не изменяется.
Колодка надежно «сидит» в отверстии и не смещается.
Сила прижатия немного увеличивается при установке подложки на печатную плату.
Таким образом получается избежать возможных неполадок, связанных с плохим контактом.
Файлы:
Китайский дисплей Nokia 3310
Все вопросы в Форум.
Как вам эта статья? | Заработало ли это устройство у вас? |
www.radiokot.ru
Стабилизатор напряжения на 5в- 7805 или 78L05 или же аналогичный КРЕН Два электролитических конденсатора 47 mF на 16В Три резистора номиналом 4,7 кОм Три стабилитрона на напряжение 5,1 вольт, импорт или советские — не имеет значения Два транзистора кт 315 Один транзистор кт 361 Пять резисторов номиналом 1 кОм И два светодиода (какого цвета, значения не имеет: один служит для индикации питания, второй горит только в режиме программирования)
Данный программатор является почти универсальным. С его помощью можно программировать почти все известные кристаллы семейства PIC. Есть его много разновидностей и более простых и более навороченных. Итак, собрав его один раз, можно им пользоваться всегда.
Для облегчения изготовления была нарисована печатная плата для программатора, которая показана на рисунке 2:
Также выложена сама печатная плата в формате *.lay. Скачать файл program.lay
Файлы в этом формате открываются программой Sprint Layout 4.
+5v MCLR PGD PGC GNDЭто выводы для подключение к контроллеру.
В нашем случае
+5v — 1 ножка микроконтроллера
MCLR — 4 ножка микроконтроллера
PGD — 7 ножка микроконтроллера
PGC — 6 ножка микроконтроллера
GND — 8 ножка микроконтроллера
Ну, вроде, разобрались. Программатор должен работать сразу после сборки, и никакой дополнительной настройки и отладки не потребуется.
Программировать можно двумя способами:
1. Записать программу до впаивания контроллера в плату, то есть к панельке для контроллера припаять проводки.
2. Запрограммировать контроллер уже в самой плате (так называемое внутрисхемное программирование).
Как по мне, проще 1-й вариант.
Далее приступим к плате самого термометра
Основная проблема — это точно припаять проводки к дисплею, чтоб ничего не закоротить и не перегреть контакты. Если вам попадется дисплей с пружинными контактами, предпочтительней выбрать именно его, но также не стоит отказываться от чистых дисплеев без рамки, главное, чтобы они работали. После уже я увидел еще один тип дисплеев, которые идут с напылением на стекле и соединяются с платой при помощи резинки — про них ничего сказать не могу, так как не пробовал…
Распайка контактов дисплея есть на рисунке «Распайка дисплея»:
Распайка дисплея
Для быстрой и качественной распайки выводов дисплея я сначала чистил выводы обычным ластиком до того момента, пока позолота не слазила, далее немного флюса или канифоли и спокойно, но быстро и качественно припаивал шлейф.
Принципиальная схема термометра
Для того чтобы собрать термометр, необходимо сделать печатную плату, на которую запаяем все необходимые элементы.
Монтажная схема термометра
Есть печатная плата в формате .Lay. Скачать termopic.lay
После того как плата готова, можно приступить к программированию контроллера.
Программирование контроллера
В этом тоже ничего сложного нет.
Нам понадобится только программа WinPic800. Скачать WinPic800 с нашего сайта.
В настройках программы нужно указать несколько параметров:
Указать, что мы используем JDM-Programmer Указать COM порт, к которому подключен Ваш программатор Снять флаг с пункта «Blocade configuration» Далее напротив пункта DATA поставить флаг в поле -INV-Нагляднее можно посмотреть на рисунке «Настройка программатора».
Настройка программатора
В программе необходимо выбрать тип кристалла, который программируем, в нашем случае это 12F629, и после загрузить файл прошивки. Скачать файл прошивки.
Из настроек изменить только то, что показано на рисунке — установка фьюзов.
Установка фьюзов
И далее нажать на кнопку «Program All»
Затем подождать, пока не появится сообщение о том, что прошито успешно…
Настоятельно рекомендую контроллер в плату не впаивать, на то есть различные причины. Самая простая — это перепрошивка пика.
Осталось только подпаять дисплей.
Если все собрано правильно, то после подачи напряжения на экране появится изображение.
Джампер на плате предназначен для изменения режима отображения информации, в вернем положении джампера выводится инверсия изображения, а в нижнем положении — не инвертированное.
Минимальное напряжение, при котором у меня запустился термометр, это 2,2 вольта. Меньше пик работать не будет. Потребление данного термометра составляет максимум 0.6, максимум — 0.8 мА без подсветки. Таким образом, в качестве источника питания можно подключить литиевую батарею типа той, что стоит в биосе вашей материнской платы. Также возможно подключить в качестве источника питания два NI-MH аккумулятора емкостью 800 мА, тогда время автономной круглосуточной работы будет полтора месяца, или же использовать аккумулятор от той же Nokia 3310, как поступил я…
ВНИМАНИЕ !!! +5 вольт, которые есть на молексе компьютера, ИСПОЛЬЗОВАТЬ НЕЛЬЗЯ !!!! Этого не выдержит дисплей термометра. НЕОБХОДИМО ЗАПИТЫВАТЬ УСТРОЙСТВО НАПРЯЖЕНИЕМ МАКСИМУМ 3,7- 3,8 ВОЛЬТ !!!! Для получения необходимого напряжения идеально подходит стабилизатор LD1117. Он не является дефицитом, и я встречал его на платах винчестеров фирмы Samsung (кажется, на 40 GB моделях).
Ради интереса я зажал термодатчик между двумя пальцами, результат оправдал все мои надежды: показания термометра составили 35,6 °C, если учесть тот факт, что температура кожи рук не есть 36,6, то ему можно вполне доверять… Кстати, по поводу скорости обновления. На глаз изменения показаний происходят где-то раз в секунду. Несомненно, это медленнее, чем у терморезисторов, но зато данное устройство не нужно долго и уморительно калибровать…
Надеюсь, после такого подробного инструктажа все желающие смогут повторить данную конструкцию.
Подключение других LCD дисплеев, не Nokia 3310
Вопрос автору: Вот, например, тебе бы сказали, сделай точно такой же термометр, но задействуй при этом телефон Самсунг или Мотороллу и т.д. Что бы ты делал?
Ответ: Я бы заплатил программисту за то, чтобы он мне написал прошивку, далее я бы подогнал это под схему и выложил бы прошивку и схему. Цены на написание прошивок у нас от 10$ up to 50$.
Вопрос автору: А можно подключить не Nokia 3310, а например Nokia 8310 ?
Ответ: К приведенной в статье схеме и прошивке — нет! ТОЛЬКО 3310! Другие не подойдут, так как у них другой контроллер дисплея. Даже от 3410 не подходит.
Вопрос автору: На каком языке программирования пишется прошивка?
Ответ: На ассемблере или на С.
Обсудить статью на форуме
Рейтинг (голосов):8.72(95)
www.modding.ru
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
#include <P16F628A.INC>
LIST p=16F628A
__CONFIG H’3F18′ ;Конфигурация микроконтроллера
errorlevel -302 ;не выводить сообщения с ошибкой 302 в листинге
Sec equ 0020h ;вспомогательные регистры счета
Sec1 equ 0021h ;
Sec2 equ 0022h ;
nomer equ 0023h ;регистр хранения кода ascii символа
scetbit equ 0024h ;регистр счета кол-ва бит
perem equ 0025h ;вспомогательный регистр передачи байта по spi
temp equ 0026h ;вспомогательный регистр счета
tmp_tab equ 0027h ;регистр хранения номера таблицы
#DEFINE res_lcd PORTB,0 ;присвоение названий линиям ввода-вывода
#DEFINE cs PORTB,1 ;для работы с LCD дисплеем Nоkiа 5110
#DEFINE dat_com PORTB,2 ;
#DEFINE sdata PORTB,3 ;
#DEFINE sclk PORTB,4 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
org 0000h ;начать выполнение программы с адреса 0000h
goto Start ;переход на метку Start
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Основная программа
Start movlw b’00010011′ ;установка значений выходных защелок порта B
movwf PORTB ;
movlw b’00000111′ ;выключение компараторов
movwf CMCON ;
bsf STATUS,RP0 ;выбрать 1-й банк
movlw b’11100000′ ;настройка линий ввода\вывода порта B
movwf TRISB ;RB0,RB1 — на вход, остальные на выход
bcf STATUS,RP0 ;выбрать 0-й банк
call init_lcd ;вызов подпрограммы инициализации дисплея
call clear_lcd ;вызов подпрограммы очистки дисплея
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
movlw ‘»‘ ;вывод текста («RadioLaba.ru»)
call viv_symb ;
movlw ‘R’ ;
call viv_symb ;
movlw ‘a’ ;
call viv_symb ;
movlw ‘d’ ;
call viv_symb ;
movlw ‘i’ ;
call viv_symb ;
movlw ‘o’ ;
call viv_symb ;
movlw ‘L’ ;
call viv_symb ;
movlw ‘a’ ;
call viv_symb ;
movlw ‘b’ ;
call viv_symb ;
movlw ‘a’ ;
call viv_symb ;
movlw ‘.’ ;
call viv_symb ;
movlw ‘r’ ;
call viv_symb ;
movlw ‘u’ ;
call viv_symb ;
movlw ‘»‘ ;
call viv_symb ;
call paus1s ;пауза 1 сек
call ust_cur_2 ;установка курсора на начало 2-ой строки
movlw ‘ ‘ ;вывод текста ( Тестовый код)
call viv_symb ;
movlw ‘Т’ ;
call viv_symb ;
movlw ‘е’ ;
call viv_symb ;
movlw ‘с’ ;
call viv_symb ;
movlw ‘т’ ;
call viv_symb ;
movlw ‘о’ ;
call viv_symb ;
movlw ‘в’ ;
call viv_symb ;
movlw ‘ы’ ;
call viv_symb ;
movlw ‘й’ ;
call viv_symb ;
movlw ‘ ‘ ;
call viv_symb ;
movlw ‘К’ ;
call viv_symb ;
movlw ‘о’ ;
call viv_symb ;
movlw ‘д’ ;
call viv_symb ;
call paus1s ;пауза 1 сек
call ust_cur_3 ;установка курсора на начало 3-й строки
movlw ‘ ‘ ;вывод текста ( *Дисплей*)
call viv_symb ;
movlw ‘ ‘ ;
call viv_symb ;
movlw ‘*’ ;
call viv_symb ;
movlw ‘Д’ ;
call viv_symb ;
movlw ‘и’ ;
call viv_symb ;
movlw ‘с’ ;
call viv_symb ;
movlw ‘п’ ;
call viv_symb ;
movlw ‘л’ ;
call viv_symb ;
movlw ‘е’ ;
call viv_symb ;
movlw ‘й’ ;
call viv_symb ;
movlw ‘*’ ;
call viv_symb ;
call paus1s ;пауза 1 сек
call ust_cur_4 ;установка курсора на начало 4-й строки
movlw ‘ ‘ ;вывод текста ( Nоkiа 5110)
call viv_symb ;
movlw ‘ ‘ ;
call viv_symb ;
movlw ‘N’ ;
call viv_symb ;
movlw ‘o’ ;
call viv_symb ;
movlw ‘k’ ;
call viv_symb ;
movlw ‘i’ ;
call viv_symb ;
movlw ‘a’ ;
call viv_symb ;
movlw ‘ ‘ ;
call viv_symb ;
movlw ‘5’ ;
call viv_symb ;
movlw ‘1’ ;
call viv_symb ;
movlw ‘1’ ;
call viv_symb ;
movlw ‘0’ ;
call viv_symb ;
call paus1s ;пауза 1 сек
call ust_cur_5 ;установка курсора на начало 5-й строки
movlw ‘ ‘ ;вывод текста ( Контроллер)
call viv_symb ;
movlw ‘ ‘ ;
call viv_symb ;
movlw ‘К’ ;
call viv_symb ;
movlw ‘о’ ;
call viv_symb ;
movlw ‘н’ ;
call viv_symb ;
movlw ‘т’ ;
call viv_symb ;
movlw ‘р’ ;
call viv_symb ;
movlw ‘о’ ;
call viv_symb ;
movlw ‘л’ ;
call viv_symb ;
movlw ‘л’ ;
call viv_symb ;
movlw ‘е’ ;
call viv_symb ;
movlw ‘р’ ;
call viv_symb ;
call paus1s ;пауза 1 сек
call ust_cur_6 ;установка курсора на начало 6-й строки
movlw ‘ ‘ ;вывод текста ( РIС16F628А)
call viv_symb ;
movlw ‘ ‘ ;
call viv_symb ;
movlw ‘P’ ;
call viv_symb ;
movlw ‘I’ ;
call viv_symb ;
movlw ‘C’ ;
call viv_symb ;
movlw ‘1’ ;
call viv_symb ;
movlw ‘6’ ;
call viv_symb ;
movlw ‘F’ ;
call viv_symb ;
movlw ‘6’ ;
call viv_symb ;
movlw ‘2’ ;
call viv_symb ;
movlw ‘8’ ;
call viv_symb ;
movlw ‘A’ ;
call viv_symb ;
met_1 nop ;зацикливание программы
goto met_1 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
init_lcd bcf res_lcd ;подпрограмма инициализации дисплея
movlw .200 ;выдача лог.0 на линию RST: сброс дисплея
movwf scetbit ;пауза 0,6 мс
in_1 decfsz scetbit,F ;
goto in_1 ;
bsf res_lcd ;
movlw 0x21 ;включить контроллер дисплея, горизонт.адресация, расширенный набор команд
call sendispcom ;
movlw 0x13 ;установка смещения напряжения Bias 1:48
call sendispcom ;
movlw 0x04 ;установка температурного коэффициента 0
call sendispcom ;
movlw 0xC1 ;установка контрастности (значение 0x65)
call sendispcom ;
movlw 0x20 ;стандартный набор команд
call sendispcom ;
movlw 0x0C ;установка — нормальный режим работы
call sendispcom ;
return ;выход
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ust_cur_1 movlw 0x40 ;установка курсор в позицию Y0
call sendispcom
goto ust
ust_cur_2 movlw 0x41 ;установка курсор в позицию Y1
call sendispcom
goto ust
ust_cur_3 movlw 0x42 ;установка курсор в позицию Y2
call sendispcom
goto ust
ust_cur_4 movlw 0x43 ;установка курсор в позицию Y3
call sendispcom
goto ust
ust_cur_5 movlw 0x44 ;установка курсор в позицию Y4
call sendispcom
goto ust
ust_cur_6 movlw 0x45 ;установка курсор в позицию Y5
call sendispcom
ust movlw 0x80 ;установка курсор в позицию X0
call sendispcom
return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
clear_lcd movlw 0x40 ;подпрограмма очистки дисплея
call sendispcom ;установка курсор в позицию Y0
movlw 0x80
call sendispcom ;установка курсор в позицию X0
movlw .6 ;запись счетчика, значение 504
movwf Sec1
povt4 movlw .84
movwf Sec
povt3 movlw .0
call sendispdat ;отправка значения 0x00 на дисплея
decfsz Sec,F ;значение отправляется 504 раза
goto povt3 ;для очистки дисплея
decfsz Sec1,F
goto povt4
return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
sendispcom movwf perem ;подпрограмма отправки команды/данных на дисплей
bcf dat_com
goto povt1
sendispdat movwf perem
bsf dat_com
povt1 movlw .8
movwf scetbit
bcf cs
povt2 bcf sclk
btfsc perem,7
bsf sdata
btfss perem,7
bcf sdata
bsf sclk
rlf perem,F
decfsz scetbit,F
goto povt2
bsf cs
return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
viv_symb movwf nomer ;подпрограмма вывода символа на дисплей
movlw .32 ;
subwf nomer,W ;
btfss STATUS,C ;
return ;значение символа менее 32: выход из подпрограммы
movf nomer,W
sublw .82
btfss STATUS,C
goto viv_symb_1 ;значение символа более 82: переход на метку viv_symb_1
movlw .32 ;значение символа более 31 и менее 83: символ в таблице tab_symb_1
subwf nomer,F ;вычитание числа 32 из ASCII кода символа, получаем
movlw .1 ;преобразованное значение символа
movwf tmp_tab ;запись номера таблицы (1) в регистр tmp_tab
goto symb_lcd
viv_symb_1 movf nomer,W
sublw .126
btfss STATUS,C
goto viv_symb_2 ;значение символа более 126: переход на метку viv_symb_2
movlw .83 ;значение символа более 82 и менее 128: символ в таблице tab_symb_2
subwf nomer,F ;вычитание числа 83 из ASCII кода символа, получаем
movlw .2 ;преобразованное значение символа
movwf tmp_tab ;запись номера таблицы (2) в регистр tmp_tab
goto symb_lcd
viv_symb_2 movf nomer,W
sublw .191
btfss STATUS,C
goto viv_symb_3 ;значение символа более 191: переход на метку viv_symb_3
movlw .176 ;проверка регистра nomer на совпадение с числом 176
xorwf nomer,W ;176 — ascii код символа размерности температры, угла
btfss STATUS,Z
return ;значение не совпадает: выход из подпрограммы
movlw .13 ;значение символа равно 176, символ размерности температуры, угла
movwf nomer ;устанавливаем вручную преобраз. значение символа
movlw .4
movwf tmp_tab ;запись номера таблицы (4) в регистр tmp_tab
goto symb_lcd
viv_symb_3 movf nomer,W
sublw .242
btfss STATUS,C
goto viv_symb_4 ;значение символа более 242: переход на метку viv_symb_4
movlw .192 ;значение символа более 191 и менее 243: символ в таблице tab_symb_3
subwf nomer,F ;вычитание числа 192 из ASCII кода символа, получаем
movlw .3 ;преобразованное значение символа
movwf tmp_tab ;запись номера таблицы (3) в регистр tmp_tab
goto symb_lcd
viv_symb_4 movlw .243 ;значение символа более 242: символ в таблице tab_symb_4
subwf nomer,F
movlw .4
movwf tmp_tab ;запись номера таблицы (4) в регистр tmp_tab
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
symb_lcd movf nomer,W ;умножение преобразованного значения символа на 5
addwf nomer,F
addwf nomer,F
addwf nomer,F
addwf nomer,F
movlw .5
movwf temp ;запись счетчика для вывода 5 байт символа
symb_1 movlw .1 ;определение ранее записанного номера талицы
xorwf tmp_tab,W ;для вызова соответствующей таблицы
btfss STATUS,Z
goto symb_m1
call tab_symb_1
goto symb_2
symb_m1 movlw .2
xorwf tmp_tab,W
btfss STATUS,Z
goto symb_m2
call tab_symb_2
goto symb_2
symb_m2 movlw .3
xorwf tmp_tab,W
btfss STATUS,Z
goto symb_m3
call tab_symb_3
goto symb_2
symb_m3 call tab_symb_4
symb_2 call sendispdat ;вывод байта символа на дисплей
incf nomer,F
decfsz temp,F
goto symb_1
movlw .0
call sendispdat ;вывод пустого столбца (0x00) разделителя символов
return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
tab_symb_1 movlw high tab1 ;таблица данных содержащая байты символов
movwf PCLATH ;спецзнаки, цифры 0-9, латинские символы A-R
movf nomer,W ;
addlw low tab1 ;
btfsc STATUS,C ;
incf PCLATH,F ;
movf nomer,W ;
addwf PCL,F
tab1 dt 0x00, 0x00, 0x00, 0x00, 0x00; (пробел) значение ASCII кода 32
dt 0x00, 0x00, 0x5F, 0x00, 0x00; !
dt 0x00, 0x07, 0x00, 0x07, 0x00; «
dt 0x14, 0x7F, 0x14, 0x7F, 0x14; #
dt 0x24, 0x2A, 0x7F, 0x2A, 0x12; $
dt 0x23, 0x13, 0x08, 0x64, 0x62; %
dt 0x36, 0x49, 0x55, 0x22, 0x50; &
dt 0x00, 0x05, 0x03, 0x00, 0x00; ‘
dt 0x00, 0x1C, 0x22, 0x41, 0x00; (
dt 0x00, 0x41, 0x22, 0x1C, 0x00; )
dt 0x08, 0x2A, 0x1C, 0x2A, 0x08; *
dt 0x08, 0x08, 0x3E, 0x08, 0x08; +
dt 0x00, 0x50, 0x30, 0x00, 0x00; ,
dt 0x08, 0x08, 0x08, 0x08, 0x08; —
dt 0x00, 0x60, 0x60, 0x00, 0x00; .
dt 0x20, 0x10, 0x08, 0x04, 0x02; /
dt 0x3E, 0x51, 0x49, 0x45, 0x3E; 0
dt 0x00, 0x42, 0x7F, 0x40, 0x00; 1
dt 0x42, 0x61, 0x51, 0x49, 0x46; 2
……………………..
……………………..
……………………..
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
radiolaba.ru