ПП бегущей строки для LCD (ЖК) индикатора.

Автор: Super User Просмотров: 2235

 

 

alt

 

 

 

;-------- Прописка регистров --------
            Cblock
            Temp                    ;
            Temp_1
            Temp_2
            Smech
            Reg_1                   ;
            Reg_2
            Reg_3
            LCD
            endc
;---------------Присвоение------------
            #define        E LATC,7 ;
            #define       RS LATC,6 ;
            #define    _RS Temp_1,6 ;
;-------------------------------------          
            org                   0 ;
            nop                     ;
            goto             START  ;
;---------------Инициализация--------
START      movlw                0h ; =Настройка PORTC
            movwf             TRISC ;  мл.4 бита на выход, остальные на вход.=
            clrf              TRISB ; Настройка PORTB на выход
;-------------------------------------
            call           Init_LCD ; Иницилизация в 4 битном режиме.
PROG        call             Text_R ; Пример вывода текста.
            bra                PROG ; Снова.

;---------------------------------------                   
;  Инициализация LCD в 4-х битный режим
;---------------------------------------      
Init_LCD    call          Delay_400 ; Задержка 40мс.
            movlw                .3 ; Три прохода
            movwf              Temp ;
Impul       movlw        B'00000011'; Запись команды
            movwf             PORTC ;
            bsf                   E ;
            nop                     ;
            bcf                   E ;
            call           Delay_40 ; Задержка 40 мкс
            decfsz             Temp ;
            bra               Impul ;
            movlw       B'00000010' ; 4 битовый режим
            movwf             PORTC ;
            bsf                   E ;
            nop                     ;
            bcf                   E ;
            call           Delay_40 ; Задержка 40 мкс
            movlw       B'00101000' ; 4бит, 2 строки, 0таб       ;
            call            ZAP_Adr ; Вызов ПП записи в LCD
            movlw       B'00001000' ; Выкл. дисплей и выкл курсор
            call            ZAP_Adr ; Вызов ПП записи в LCD
            movlw       B'00000110' ; Запрет сдвига инкримен
            call            ZAP_Adr ; Вызов ПП записи в LCD
            movlw       B'00001100' ; Dкл. дисплей и выкл курсор
            call            ZAP_Adr ; Вызов ПП записи в LCD
            return

;-------------------------------------
; Задержка 40 мс
;-------------------------------------
Delay_400   movlw               .10 ;
            movwf              Temp ;
            call           Delay_40 ;
            decfsz             Temp ;
            bra                $-.6 ;
            return
;-------------------------------------
;Задержка кварц 4 МГц, если в программе
;другой, то соответственно пересчитать.
;-------------------------------------
Delay_40    movlw              .14 ;
            movwf            Reg_1 ;
            decfsz           Reg_1 ;
            bra                $-2 ; 
            return                 ;

 

;-----------------------------------
; пп записи данных.
; один порт , 4 проводный режим.
;-----------------------------------
ZAP_Adr    movwf               LCD ; Запись адреса начала строки
           bcf                  RS ;
           bra                SLCD ;
LCD_D      movwf               LCD ; Запись данных.
           bsf                  RS ;
SLCD       swapf             LCD,0 ; Запись в 4-битном режиме
           andlw               0Fh ;
           movwf            Temp_1 ;
           BTFSC                RS ;
           bsf                 _RS ;
           movff      Temp_1,PORTC ;
           bsf                   E ;
           nop                     ;
           bcf                   E ;
           movf              LCD,0 ;
           andlw               0Fh ;
           movwf            Temp_1 ;
           BTFSC                RS ;
           bsf                 _RS ;
           movff      Temp_1,PORTC ;
           bsf                   E ;
           nop                     ;
           bcf                   E ;
           clrf              PORTC ;
           call           Delay_40 ;
           bcf                  RS ;
           return
;------------------------------------
; ПП бегущей стоки.
;------------------------------------
Text_R      clrf             Smech ; Очистка регистра
            decf             Smech ; Коррекция
Povt_16     clrf           TBLPTRU ; Cбрасываем верхний байт
            movlw       high (TEST); =Задание адреса "TEST"
            movwf          TBLPTRH ;  старшего байта=
            movlw        low (TEST); =Задание адреса "TEST"
            movwf          TBLPTRL ;  младшего байта=
            call          Delay_05 ; Задержка (скорость бегущей строки)
            movlw              .16 ; 16 символов в строке.
            movwf           Temp_2 ;
            incf             Smech ; Увеличение регистра. +1
            movlw                3 ; Курсур на начала вывода 1 строки.
            call           ZAP_Adr ; Вызов ПП записи в LCD
            movf           Smech,0 ; Значение регистра в  W.
            addwf          TBLPTRL ; Коррекция адреса = адрес + W =
            movlw               .0 ; = Коррекция адреса 
            addwfc         TBLPTRH ; старшего байта =
Povt_1      TBLRD*+                ; Чтение байта +1 адрес
            movff    TABLAT,Temp_1 ; Результат в ОЗУ
            tstfsz          Temp_1 ; Последний байт в таблице? (0 ?)
            bra               $+.4 ; Нет. Далее.
            return                 ; Да, возврат из ПП
            movf          Temp_1,0 ; Значение регистра в  W.
            call             LCD_D ; Вызов ПП записи данных.
            dcfsnz          Temp_2 ; Вся строка заполнена. (16байт)
            bra            Povt_16 ; Да.
            bra             Povt_1 ; Нет. Далее.
;-------------------------------------
; Задержка. Скорость бегущей строки
;-------------------------------------
Delay_05    movlw       .186
            movwf       Reg_1
            movlw       .4
            movwf       Reg_2
            movlw       .2
            movwf       Reg_3
            decfsz      Reg_1
            bra         $-2
            decfsz      Reg_2
            bra         $-6
            decfsz      Reg_3
            bra         $-.10
            return

;------------------------------------
; таблица данных TEST
;------------------------------------
TEST
db    "               Privet!  Zaidi na sait chipmk.ru               "
db      0x00, 0x00

 

 

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


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

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