Задача
Вывести на матрицу 8×8 неподвижное изображение.
Микроконтроллер: PIC16F84A, кварц 4 МГц. Среда: MPLAB X + MPASM (или любой совместимый ассемблер). Как настроить среду и прошить контроллер — в статье программирование PIC.
Что понадобится
- PIC16F84A
- кварц 4 МГц + 2×22 пФ
- матрица 8×8
- дешифратор 74HC138
- 8 резисторов 330 Ом
- транзисторные ключи столбцов
Схема подключения
| Вывод | Подключение |
|---|---|
| RB0…RB7 | строки матрицы через резисторы 330 Ом |
| RA0…RA2 | адресные входы дешифратора 74HC138 |
| Выходы дешифратора | ключи катодов столбцов |
Алгоритм
- Хранить изображение как восемь байт — по байту на столбец.
- Выставить на порт B образ текущего столбца.
- Подать номер столбца на дешифратор и выдержать около миллисекунды.
- Погасить строки и перейти к следующему столбцу.
Листинг на ассемблере
Код проверен ассемблером и собирается без ошибок. Скачать: 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.