Понедельник, 04 июня 2012 04:44

ПП перекодировки шрифта для вывода русских символов на ЖК индикатор.

Written by
Rate this item
(0 votes)

 Вывод русского текста в ЖК индикатор  (контроллера HD44780) имеет ряд особенностей,  в связи с тем, что коды русского шрифта ASCII, не соответствует таблице символов прошитых в ЖК дисплее,  до передачи в ЖКИ  кода символа его необходимо перекодировать.

Здесь показан один из способов  динамического вывода русского текста на ЖК индикатор. Он упрощает написание программы тем, что нет необходимости вбивать коды в текстовые таблицы, а можно сразу печатать текст, заключив его "ХХХХ" .  

 

 

            call           Kod_jki ; Запись таблицы в память данных.
            хххххххххххххххххххххххх
            movf               Kod ; В W записывается код для кодировки
            call             Kod_w ; Вызов ПП кодировки
            movlw             XXXX ; Результат в W.
            хххххххххххххххххххххххх
            
;-----------------------------------
; При выполнении подпрограммы к адресу 0400h
; добавляется значение содержимого W ,
; результат в W (чтение регистра 0500+W (-128127))
;-----------------------------------
Kod_w       lfsr        FSR0,0500h ; Указатель на 0500h
            movf          PLUSW0,0 ; Значение в W
            return                 ; Возврат из ПП
 

           
;------------------------------------------------
; В память данных записывается талица "Koder_jki"
;------------------------------------------------
Kod_jki     clrf              Temp ; Очистка регистра
            clrf           TBLPTRU ; Cбрасываем верхний байт
            movlw  high (Koder_jki); =Задание адреса "TEST"
            movwf          TBLPTRH ;  старшего байта=
            movlw   low (Koder_jki); =Задание адреса "TEST"
            movwf          TBLPTRL ;  младшего байта=
            lfsr        FSR0,0500h ; Указатель на 0500h
Kod_jki1    TBLRD*+                ; Чтение байта +1 адрес
            decf              Temp ; -1
            movlw             .127 ; в W
            CPFSGT            Temp ; Сравниваем W > Temp?
            bra                $+8 ; Да.
            movff  TABLAT,POSTINC0 ; Результат в ОЗУ
            bra           Kod_jki1 ; Читаем следующий байт
            decf             FSR0H ; Коррекция ст.байта
            movff  TABLAT,POSTINC0 ; Результат в ОЗУ
Kod_jki2    TBLRD*+                ; Чтение байта +1 адрес
            dcfsnz            Temp ; Все байты записаны?
            bra               $+.8 ; Да.
            movff  TABLAT,POSTINC0 ; Результат в ОЗУ
            bra           Kod_jki2 ; Читаем следующий байт
            movff     TABLAT,INDF0 ; Результат в ОЗУ
            return                 ; Выход из ПП.



    
;-----------------------------------------------------------------------------------------------------
; таблица данных TEST
;-----------------------------------------------------------------------------------------------------
TEST  
db   "                      Вывод русского текста в ЖК индикатор !                        "

db       0x00, 0x00


;------------------------------------------------------------------------------------------------------
; Кодер для вывода русского щрифта  ЖК индикатора.
;------------------------------------------------------------------------------------------------------
Koder_jki
db       0x01, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
db       0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F
db       0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F
db       0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F
db       0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F
db       0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F
db       0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F
db       0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F
db       0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F
db       0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F
db       0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA2, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF
db       0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB5, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF
db       0x41, 0xA0, 0x42, 0xA1, 0xE0, 0x45, 0xA3, 0xA4, 0xA5, 0xC9, 0x4B, 0xA7, 0x4D, 0x48, 0x4F, 0xA8
db       0x50, 0x43, 0x54, 0xA9, 0xAA, 0x58, 0xE1, 0xAB, 0xAC, 0xE6, 0xAD, 0xAE, 0x62, 0xAF, 0xB0, 0xB1
db       0x61, 0xB2, 0xB3, 0xB4, 0xE3, 0x65, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0x6F, 0xBE
db       0x70, 0x63, 0xBF, 0x79, 0xE4, 0xD5, 0xE5, 0xC0, 0xC1, 0xE6, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7
db       0x00, 0x00

 

 

Скачать проект MPLAB.

 

 

Read 5221 times Last modified on Понедельник, 11 августа 2014 07:29

Все права принадлежат ChipMK.ru. При копировании материала ссылка обязательна. 2011-2017 © ChipMK.ru

ChipMk.ru Яндекс.Метрика
PRCY.ru