;В нулевом сообщении живет команда начальной инициализации ; с очисткой экрана и прочим. Msg0 db 0,LCD_First_Init,0xC,0x6,0x1,0 ; последовательность инициализации из описания. ; Работа с курсором : ; Если Позиция_Курсора=0 - берём Курсор из Начала Строки. ; Если Позиция_Курсора=1 - НЕ Присваиваем Курсору НИКАКОЕ значение - Куда Выйдет, туда выйдет. ; Иначе - засылаем Позиция_Курсора-2 в Курсор и выводим строку. ; Номера позиции начала строки в LCD 20х4 ; 00=1 строка 20=3 строка 64=2 строка 84=4 строка ; Для работы с 40х4 дисплеем (фактически второй дисплей, второй вывод "енабле") ; придётся задействовать старший бит позиции курсора - если 0 то вывод в дисплей-0, если 1 то вывод в дисплей-1 ; Формат строки: ; Текстовые сообщения - позиция по умолчанию, сообщение, конец=0. ; Управление из текстовой строки - символы 0х10-0x1F использованы, Шестнадцать команд ; После управляющего кода форматирования вывода - полный 16 бит адрес переменной в RAM, ; вносится "DW" вместо "DB". ; Задействованы коды управления (отсутствующие символы в HD44780): ; 0x10=DW ; шестнадцатеричный вывод байта - 2 симв - работает ; 0x11=DW ; шестнадцатеричный вывод слова - 4 симв - работает ; 0x12=DW ; без знаковый десятичный вывод байта - 2 симв (часики) - ; 0x13=DW ; без знаковый десятичный вывод слова - 5 симв - работает ; 0x14=DW ; Знаковый десятичный вывод байта - работает ; 0x15=DW ; Знаковый десятичный вывод слова - 6 симв ; 0x16 ; Следующий байт - зашлем в РЕГИСТР КОМАНД - работает ; - чутка глючит иногда (если строка УЖЕ переполнилась и курсор УЖЕ куда-то переместился ; 0x17=DW ; Признак регулировки параметра - работает: ; следующие пара байт - границы, следующий адрес - запоминаем для регулировки ; В зависимости от границ - могут быть варианты реализации ограничения границ: ; Если Обе границы равны - кольцевой счётчик. Иначе работает ограничение инкремента/декремента. ; если второй меньше первого, то кольцо идёт по большому пути ; если первый меньше второго - то по малому пути. ; обнаружился глюк с обработкой знаковых чисел - кольцо по большому кругу не работает. ; 0x18=DW ; шестнадцатеричный вывод байта - 1 симв младший смещение влево - работает ; 0x19=DW ; знаковый десятичный вывод слова температуры в шесть символов вида -127.7 - работает ; 0x1A=DW ; Вывод ПОД стоки с указанным ПОЛНЫМ адресом номера - работает ; 0x1B=DW ; Запас ; 0x1C=DW ; Запас ; 0x1D=DW ; Запас ; 0x1E=DW ; Запас ; 0x1F=DW ; Запас ;Msg1 db d'00',0x10,Flag1,",",0x10,PortbIntCount,",",0x10,Encoder_Count,".",0,0x15,EXAMPLE,0 ; В данный момент общение буратины с внешним миром происходит посредством 3 синхронных строк ; 6 или 7 выводятся 10 раз в сек (альтернативные экраны), 3 выводится 1 раз в сек, строки энкодера асинхронны ; системному времени. Этого оказалось достаточно для вывода отладочной инфы и регулировки параметров. ; Для гибкости и удобства реализована возможность вставки подстроки по номеру в регистре. ; Глубина "стека возвратов из подстрок"=1 (подстроку из подстроки вызывть нельзя). Msg1 db d'20',"Start TEST Right Key",0 ; Остатки прежнего прожекта Msg2 db d'20',"Continue-Middle Key ",0 ; сейчас не используются. Msg3 db d'31'; ;db 0x10 ;; шестнадцатеричный вывод байта - 2 симв - работает ;dw LcdWorkTime ; Отладочный вывод тайм-аута db 0x12 ; 0x12 ; без знаковый десятичный вывод байта - 2 симв (часики) dw hours ; db ":",0x12 ; 0x12 ; без знаковый десятичный вывод байта - 2 симв (часики) dw mins ; db ":",0x12 ; 0x12 ; без знаковый десятичный вывод байта - 2 симв (часики) dw secs ; ; #ifdef PCPWM_Present ; Счётчик ; db 0x16,d'70',0x13 ; оборотов ; dw PCPWM_SpdPrint ; в минуту ; #endif db 0 ;конец строки Msg4 db d'00',0x16,d'00',0xFF,0x16,d'19',0xFF,0 ; Строка признака редактирования параметра Msg5 db d'00',0x16,d'00'," ",0x16,d'19'," ",0 ; строка затирания признака редактирования