Дипломная работа: Разработка светодиодной матрицы
Программа
для «Эффект -1» светодиодной матрицы
;------------------------------------------------------------------------------------------------------------------------------
list
p = 16f628a
__config
03F30h ; 11111100110001 - защиты памяти нет, низковольтное программирование
запрещено, сброс по питанию запрещен,
;
RA5/-MCLR работает как -MCLR, таймер вкл-я питания включен, сторожевой таймер -
выключен, генератор - внутренний
;*********
Переменные ************************************
CBLOCK
0x20 ;Начальный адрес блока констант
T_ext
;таймер внешнего цикла
T_int
;таймер внутреннего цикла
Strok
;байт строк, младшие 5 бит этого байта - состояния строк (1 - вкл, 0 - выкл)
Stolb
;байт столбцов, младшие 5 бит этого байта - состояния столбцов (1 - вкл, 0 -
выкл)
ENDC
;
;********
Константы ***************************************
Cr1
equ .200 ;длительность 1-й задержки 200 мкс
Cr2
equ .150 ;длительность 2-й задержки 150х200 мкс
Status
equ 03h ; Регистр выбора банка
TrisA
equ 05h ; Регистр выбора направления работы выводов порта А
TrisB
equ 06h ; Регистр выбора направления работы выводов порта В
PortA
equ 05h ; Регистр управления защелками порта А
PortB
equ 06h ; Регистр управления защелками порта В
Cmcon
equ 1Fh ; вкл/выкл компараторов
F
equ 1 ; Результат направить в регистр.
;********************************************************
;
Пусть у нас RA1, RA2, RA3, RA6, RA7 - выходы строки
;
RB3, RB4, RB5, RB6, RB7 - выходы столбцы
;********************************************************
;
org
0
;********
Установка направления работы порта A: RA7, RA6 - выходы, RA5, RA4, RA3 - входы,
RA2, RA1, RA0 - выходы
;********
Установка направления работы порта B: RB7, RB6, RB5, RB4, RB3, RB2 - выходы,
RB1, RB0 - входы ***
start
movlw .7 ;
movwf
Cmcon ; выключить компараторы и включить эти пины как цифровые входы/выходы
clrf
PortA ; инициализация защелок порта А
movlw
.248 ; 11111000
movwf
PortB ; инициализация защелок порта В
bsf
Status,5 ; Перейти в 1-й банк (установить в 1 5-й бит регистра Status).
movlw
.49 ; Записать конфигурацию порта A в аккумулятор (W). .49=00110001
movwf
TrisA ; Скопировать конфигурацию порта А из W в регистр TrisA
movlw
.7 ; Записать конфигурацию порта В в аккумулятор (W). .3=00000111
movwf
TrisB ; Скопировать конфигурацию порта B из W в регистр TrisB.
bcf
Status,5 ; Перейти в 0-й банк (установить в 0 5-й бит регистра Status)
;********
ЭФФЕКТ 1
********************************************************************************
eff1
movlw b'00011111' ; включаем все строки
movwf
Strok
movlw
b'00000001' ; и первый столбец
movwf
Stolb
;--------
Включаем светодиоды -----------------
cikl_stolb1
call in_ports
call
pause
rlf
Stolb,1 ; переходим на следующий столбец
btfss
Stolb,5 ; если 5 бит stolb = 1, то следующая команда пропускается
goto
cikl_stolb1
;----------------------------------------------
movlw
b'00000001' ; включаем первую строку
movwf
Strok
movlw
b'00011111' ; и все столбцы
movwf
Stolb
;--------
Включаем светодиоды -----------------
cikl_strok1
call in_ports
call
pause
rlf
Strok,1 ; переходим на следующую строку
btfss
Strok,5 ; если 5 бит stolb = 1, то следующая команда пропускается
goto
cikl_strok1
goto
eff1
;******************************************************************************************************
;********
Процедура включения строк и столбцов
in_ports
btfsc Stolb,0 ; если 0-й бит stolb = 0, то следующая команда пропускается
bcf
PortB,3 ; RB3=0 - вкл.1 столбец
btfss
Stolb,0 ; если 0-й бит stolb =1, то следующая команда пропускается
bsf
PortB,3 ; RB3=1 - выкл. 1 столбец
;--------------------------------------
btfsc
Stolb,1 ; если 1-й бит stolb = 0, то следующая команда пропускается
bcf
PortB,4 ; RB4=0 - вкл. 2 столбец
btfss
Stolb,1 ; если 1-й бит stolb =1, то следующая команда пропускается
bsf
PortB,4 ; RB4=1 - выкл. 2 столбец
;-------------------------------------
btfsc
Stolb,2 ; если 2-й бит stolb = 0, то следующая команда пропускается
bcf
PortB,5 ; RB5=0 - вкл. 3 столбец
btfss
Stolb,2 ; если 2-й бит stolb =1, то следующая команда пропускается
bsf
PortB,5 ; RB5=1 - выкл. 3 столбец
;--------------------------------------
btfsc
Stolb,3 ; если 3-й бит stolb = 0, то следующая команда пропускается
bcf
PortB,6 ; RB6=0 - вкл. 4 столбец
btfss
Stolb,3 ; если 3-й бит stolb =1, то следующая команда пропускается
bsf
PortB,6 ; RB6=1 - выкл. 4 столбец
;--------------------------------------
btfsc
Stolb,4 ; если 4-й бит stolb = 0, то следующая команда пропускается
bcf
PortB,7 ; RB7=0 - вкл. 5 столбец
btfss
Stolb,4 ; если 4-й бит stolb =1, то следующая команда пропускается
bsf
PortB,7 ; RB7=1 - выкл. 5 столбец
;--------
Строки -----------------------------------------------------------
btfsc
Strok,0 ; если 0-й бит strok = 0, то следующая команда пропускается
bsf
PortA,2 ; RA2=1 - вкл.1 строку
btfss
Strok,0 ; если 0-й бит strok =1, то следующая команда пропускается
bcf
PortA,2 ; RA2=0 - выкл.1 строку
;--------------------------------------
btfsc
Strok,1 ; если 1-й бит strok = 0, то следующая команда пропускается
bsf
PortA,3 ; RA3=1 - вкл.2 строку
btfss
Strok,1 ; если 1-й бит strok =1, то следующая команда пропускается
bcf
PortA,3 ; RA3=0 - выкл.2 строку
;--------------------------------------
btfsc
Strok,2 ; если 2-й бит strok = 0, то следующая команда пропускается
bsf
PortA,1 ; RA1=1 - вкл.3 строку
btfss
Strok,2 ; если 2-й бит strok =1, то следующая команда пропускается
bcf
PortA,1 ; RA1=0 - выкл.3 строку
;--------------------------------------
btfsc
Strok,3 ; если 3-й бит strok = 0, то следующая команда пропускается
bsf
PortA,7 ; RA7=1 - вкл.4 строку
btfss
Strok,3 ; если 3-й бит strok =1, то следующая команда пропускается
bcf
PortA,7 ; RA7=0 - выкл.4 столбец
;--------------------------------------
btfsc
Strok,4 ; если 4-й бит strok = 0, то следующая команда пропускается
bsf
PortA,6 ; RA6=1 - вкл.5 строку
btfss
Strok,4 ; если 4-й бит strok =1, то следующая команда пропускается
bcf
PortA,6 ; RA6=0 - выкл.5 строку
return
;****************************************************************************************************
;********
Процедура Паузы ****************************************************************************
pause
movlw Cr2
movwf
T_ext ; загрузить значение для внешнего цикла
cikl2
movlw Cr1
movwf
T_int ; загрузить значение для внутреннего цикла
cikl3
decfsz T_int,1 ; если T_int = 0, следующая команда пропускается
goto
cikl3 ; внутренний цикл
decfsz
T_ext,1 ; если T_ext = 0, следующая команда пропускается
goto
cikl2 ; внешний цикл
return
end
ПРИЛОЖЕНИЕ
В
Программа
для создания эффекта «Вращающийся крест»
;--------------------------------------------------------------------------------------------------------------------------
list
p = 16f628a
__config
03F30h ; 11111100110001 - защиты памяти нет, низковольтное программирование
запрещено,
;
сброс по питанию запрещен, RA5/-MCLR работает как -MCLR, таймер вкл-я питания
включен,
;
сторожевой таймер - выключен, генератор - внутренний
;*********
Переменные ************************************
CBLOCK
0x20 ; Начальный адрес блока
Temp
; обменник , 20h
Adr
; адрес фрейма в EEPROM или ОЗУ , 21h
T_int
; счетчик для паузы , 22h
Strok
; байт текущего состояния строк , 23h
Stolb
; байт текущего состояния столбцов , 24h
Fr_sch
; счетчик фреймов , 25h
Fr_cikl
; счетчик показов одного фрейма , 26h
Fr_kol
; количество фреймов , 27h
Fr_cikl_kol
; количество показов одного фрейма , 28h
;-----
Свободная память ОЗУ в нулевом банке от 29h до 7Fh
---------------------------------
;-----
Из этих 86 своб-х байт в первые 30 мы будем грузить наши фреймы
------------------
ENDC
;
;********
Константы ***************************************
Status
equ 03h ; Регистр выбора банка
TrisA
equ 05h ; Регистр выбора направления работы выводов порта А
TrisB
equ 06h ; Регистр выбора направления работы выводов порта В
PortA
equ 05h ; Регистр управления защелками порта А
PortB
equ 06h ; Регистр управления защелками порта В
Cmcon
equ 1Fh ; вкл/выкл компараторов
F
equ 1 ; Результат направить в регистр.
FSR
equ 04h ; регистр адреса при косвенной адресации
INDF
equ 0h ; регистр косвенной адресации
Cr
equ .50 ; значение счетчика для паузы
EEADR
equ 1Bh ; адрес EEPROM
EECON1
equ 1Ch ; управляющий регистр для работы c EEPROM
EEDATA
equ 1Ah ; регистр данных из/в EEPROM
;********************************************************
;
Пусть у нас RA1, RA2, RA3, RA6, RA7 - выход строки
;
RB3, RB4, RB5, RB6, RB7 - выходы столбцы
;********************************************************
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21 |