;=======================================================
; Проект 16. Светодиодная матрица 8x8 (вывод символа)
; PIC16F84A, 4 МГц
; PORTB — строки (анодЫ через резисторы), RA0..RA2 — адрес столбца
; на дешифратор 74HC138 (выходы — катоды столбцов через ключи)
;=======================================================
        LIST    p=16F84A
        #include <p16f84a.inc>
        __CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF

        cblock  0x0C
        d1, col
        endc

        ORG     0x000
        goto    Start

;--- образ символа: 8 столбцов ---
Font
        addwf   PCL,f
        retlw   b'00111100'
        retlw   b'01000010'
        retlw   b'10100101'
        retlw   b'10000001'
        retlw   b'10100101'
        retlw   b'10011001'
        retlw   b'01000010'
        retlw   b'00111100'

Start
        bsf     STATUS,RP0
        clrf    TRISB           ; строки — выходы
        clrf    TRISA           ; адрес столбца — выход
        bcf     STATUS,RP0
        clrf    PORTB
        clrf    col

Main
        movf    col,w
        call    Font            ; образ текущего столбца
        movwf   PORTB
        movf    col,w
        movwf   PORTA           ; выбираем столбец дешифратором
        call    Delay1ms
        clrf    PORTB           ; гасим перед переключением
        incf    col,f
        movf    col,w
        xorlw   .8
        btfsc   STATUS,Z
        clrf    col
        goto    Main

;--- ~1 мс на столбец: кадр 8 мс = 125 Гц ---
Delay1ms
        movlw   .200
        movwf   d1
D1      nop
        decfsz  d1,f
        goto    D1
        return

        END
