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

Проект 18. Бегущая строка на матрице 8×8

Изображение шире экрана и плавно уезжает влево. Проект показывает кольцевую адресацию буфера — приём, на котором строятся все бегущие строки и анимации.

Задача

Прокручивать изображение по матрице справа налево.

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

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

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

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

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

Алгоритм

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

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

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

;=======================================================
; Проект 18. Бегущая строка на светодиодной матрице 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, shift, frames, tmp
        endc

        ORG     0x000
        goto    Start

;--- 16 столбцов бегущего образа ---
Font
        addwf   PCL,f
        retlw   b'01111110'
        retlw   b'00010001'
        retlw   b'00010001'
        retlw   b'01111110'
        retlw   b'00000000'
        retlw   b'01111111'
        retlw   b'01001001'
        retlw   b'01001001'
        retlw   b'00000000'
        retlw   b'00111110'
        retlw   b'01000001'
        retlw   b'01000001'
        retlw   b'00100010'
        retlw   b'00000000'
        retlw   b'00000000'
        retlw   b'00000000'

Start
        bsf     STATUS,RP0
        clrf    TRISB
        clrf    TRISA
        bcf     STATUS,RP0
        clrf    PORTB
        clrf    shift

Main
        movlw   .30             ; сколько кадров держать положение
        movwf   frames
Frame
        clrf    col
Scan
        movf    col,w           ; столбец экрана
        addwf   shift,w         ; + текущее смещение
        andlw   0x0F            ; кольцевой проход по 16 столбцам
        call    Font
        movwf   PORTB
        movf    col,w
        movwf   PORTA
        call    Delay1ms
        clrf    PORTB
        incf    col,f
        movf    col,w
        xorlw   .8
        btfss   STATUS,Z
        goto    Scan
        decfsz  frames,f
        goto    Frame

        incf    shift,f         ; сдвигаем строку
        movf    shift,w
        andlw   0x0F
        movwf   shift
        goto    Main

Delay1ms
        movlw   .200
        movwf   d1
D1      nop
        decfsz  d1,f
        goto    D1
        return

        END

Пояснения

  • Кольцевая адресация делается маской: andlw 0x0F оставляет индекс в пределах 0…15, и буфер замыкается сам на себя.
  • Скорость задаётся числом кадров на одно положение: больше кадров — медленнее бег.
  • Индекс столбца в таблице — это сумма номера столбца экрана и смещения; экран как бы «окно» в длинный буфер.

Что дальше

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