AFON // радиотехник affonya@mail.ru
← Проекты на PIC

Проект 16. Светодиодная матрица 8×8

Изображение выводится на матрицу построчной развёрткой: столбцы перебираются дешифратором, строки задаются портом. Так работают все светодиодные экраны.

Задача

Вывести на матрицу 8×8 неподвижное изображение.

Микроконтроллер: PIC16F84A, кварц 4 МГц. Среда: MPLAB X + MPASM (или любой совместимый ассемблер). Как настроить среду и прошить контроллер — в статье программирование PIC.

Что понадобится

  • PIC16F84A
  • кварц 4 МГц + 2×22 пФ
  • матрица 8×8
  • дешифратор 74HC138
  • 8 резисторов 330 Ом
  • транзисторные ключи столбцов

Схема подключения

ВыводПодключение
RB0…RB7строки матрицы через резисторы 330 Ом
RA0…RA2адресные входы дешифратора 74HC138
Выходы дешифратораключи катодов столбцов

Алгоритм

  1. Хранить изображение как восемь байт — по байту на столбец.
  2. Выставить на порт B образ текущего столбца.
  3. Подать номер столбца на дешифратор и выдержать около миллисекунды.
  4. Погасить строки и перейти к следующему столбцу.

Листинг на ассемблере

Код проверен ассемблером и собирается без ошибок. Скачать: p16.asm · p16.hex (готовая прошивка).

;=======================================================
; Проект 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

Пояснения

  • Восемь столбцов по 1 мс дают кадр 8 мс, то есть около 125 кадров в секунду — мерцания не видно.
  • Гашение порта перед сменой адреса убирает «призраки» — паразитную засветку соседнего столбца.
  • Дешифратор 74HC138 экономит выводы: три линии адреса вместо восьми линий столбцов.

Что дальше

Разобравшись с этим проектом, переходите к следующему в разделе проекты на PIC. Справочник по архитектуре и периферии контроллеров — на странице микроконтроллеры PIC.