Лазерная сигнализация
СхемаЛазерные светодиоды распологаяются на стенах комнаты, противоположно им устанавливаются фотоприемники.
Это позволяет определить местонахождение человека в комноте, и отобразить его на матрице светодиодов.
Текст программы микроконтроллера
.include "c:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\m8535def.inc"
.cseg
.org 0
.def tmp = r16 ;временная
.def str = r17 ;результат проверки фототранзисторов
.def tmp2 = r18 ;сдвиговая последовательность
.def vd = r19 ;временная
.def n = r20 ;временная
rjmp RESET
RESET: ldi tmp,HIGH(RAMEND) ;определение начала стека
out SPH,tmp ;в ОЗУ
ldi tmp,LOW(RAMEND)
out SPL,tmp
ser tmp ;установить tmp (= $ff)
out PORTC,tmp ;установить на всех линиях порта C ВЫСОКИЕ уровни
out PORTB,tmp ;установить на всех линиях порта B ВЫСОКИЕ уровни
out DDRA,tmp ;линии порта A - выходы на индикатор
out DDRD,tmp ;линии порта D - выходы на лазерные светодиоды
out PINB,tmp ;эта операция только для отладчика AVR Studio
out PINC,tmp
ldi tmp,15 ;инициализация сторожевого таймера:
out WDTCR,tmp ;при отсутствии команды сброса (wdr)
;в течение 2 с произойдет переход на прерывание RESET
clr tmp ;очистить регистр tmp (= 0)
out DDRC,tmp ;линии порта C - фототранзисторы
out PORTA,tmp ;очистить индикатор
ldi tmp2,0b00000001 ;начальные настройки
ldi n,1
Scan: wdr ;cброс сторожевого таймера
;rcall Wait ;задержка
;rcall Wait ;задержка
out PORTD,tmp2 ;включение лазерного светодиода
rcall Foto ;проверка фототранзистора
cpi tmp2,0b10000000 ;проверка достижения мах
breq m1 ;если достигнут, переход на m1
lsl tmp2 ;сдвиг tmp2 влево
inc n
sbis PINB,PB0 ;если кнопка Stop нажата
rjmp Stop ;перейти на метку Stop
rjmp Scan ;переход на метку Scan
m1:
;clr tmp
;out PORTA,tmp
ldi tmp2,0b00000001 ;tmp (=1)
ldi n,1
clr str
rjmp Scan ;переход на метку Scan
;=====================================================
;остановка
;=====================================================
Stop:
wdr ;cброс сторожевого таймера
rjmp Stop ;на метку Stop
;=====================================================
;проверка фототранзистора
;=====================================================
Foto: wdr ;cброс сторожевого таймера
cpi n,1
breq x1
cpi n,2
breq x2
cpi n,3
breq x3
cpi n,4
breq x4
cpi n,5
breq x5
cpi n,6
breq x6
cpi n,7
breq x7
cpi n,8
breq x8
x1: sbic PINC,PC0
add str,tmp2
rjmp ex
x2: sbic PINC,PC1
add str,tmp2
rjmp ex
x3: sbic PINC,PC2
add str,tmp2
rjmp ex
x4: sbic PINC,PC3
add str,tmp2 ;строки в младшую тетраду
rjmp ex
x5: sbic PINC,PC4
add str,tmp2
rjmp ex
x6: sbic PINC,PC5
add str,tmp2
rjmp ex
x7: sbic PINC,PC6
add str,tmp2
rjmp ex
x8: sbic PINC,PC7
add str,tmp2
rjmp ex
ex:
rcall ind ;вывод на индикатор
ret
;=====================================================
;вывод на индикатор (матрица светодиодов)
;=====================================================
ind:
cpi str,0b11100111
breq w1
cpi str,0b11010111
breq w2
cpi str,0b10110111
breq w3
cpi str,0b01110111
breq w4
cpi str,0b11101011
breq x5
cpi str,0b11011011
breq w6
cpi str,0b10111011
breq w7
cpi str,0b01111011
breq w8
cpi str,0b11101101
breq w9
cpi str,0b11011101
breq w10
cpi str,0b10111101
breq w11
cpi str,0b01111101
breq w12
cpi str,0b11101110
breq w13
cpi str,0b11011110
breq w14
cpi str,0b10111110
breq w15
cpi str,0b01111110
breq w16
rjmp ex1
w1: ldi vd,0b11101000
out PORTA,vd ;вывод на vd1
rjmp ex1
w2: ldi vd,0b11100100
out PORTA,vd ;вывод на vd2
rjmp ex1
w3: ldi vd,0b11100010
out PORTA,vd ;вывод на vd3
rjmp ex1
w4: ldi vd,0b11100001
out PORTA,vd ;вывод на vd4
rjmp ex1
w5: ldi vd,0b11011000
out PORTA,vd ;вывод на vd5
rjmp ex1
w6: ldi vd,0b11010100
out PORTA,vd ;вывод на vd6
rjmp ex1
w7: ldi vd,0b11010010
out PORTA,vd ;вывод на vd7
rjmp ex1
w8: ldi vd,0b11010001
out PORTA,vd ;вывод на vd8
rjmp ex1
w9: ldi vd,0b10111000
out PORTA,vd ;вывод на vd9
rjmp ex1
w10: ldi vd,0b10110100
out PORTA,vd ;вывод на vd10
rjmp ex1
w11: ldi vd,0b10110010
out PORTA,vd ;вывод на vd11
rjmp ex1
w12: ldi vd,0b10110001
out PORTA,vd ;вывод на vd12
rjmp ex1
w13: ldi vd,0b01111000
out PORTA,vd ;вывод на vd13
rjmp ex1
w14: ldi vd,0b01110100
out PORTA,vd ;вывод на vd14
rjmp ex1
w15: ldi vd,0b01110010
out PORTA,vd ;вывод на vd15
rjmp ex1
w16: ldi vd,0b01110001
out PORTA,vd ;вывод на vd16
rjmp ex1
ex1:
ret
;=====================================================
;Подпрограмма задержки
;=====================================================
Wait: ldi YL,low(1000)
ldi YH,high(1000)
d05: wdr ;cброс сторожевого таймера
sbiw YL,1
brne d05
ret
Скачать файлы проекта для AVR Studio 4 (7,23 КБ)