brne D100_1
dec FreqConst
brne D100_2
dec BeepDuration
brne D100_3
ret
;================
; проверка приема данных от клавиатуры
GetKey:
clt; Сброс признака, что была нажата клавиша
ldi r31,$0Е; Младшая тетрада — запрос в порт, старшая -
rcall GetKeyAnswer; смещение ответа
brne KeyPressed
ldi r31,$3D
rcall GetKeyAnswer
brne KeyPressed
ldi r31,$6B
rcall GetKeyAnswer
brne KeyPressed
ldi r31,$97
rcall GetKeyAnswer
brne KeyPressed
ret
KeyPressed:
set
swap r31
andi r31,$0F
swap Key
andi Key,$07
CCFind: inc r31; Поиск, какой конкретно бит установлен
lsr Key
brcc CCFind
breq NoMu1
clt; Если нажато несколько клавиш, то не нажата ни одна
NoNuclass="underline" mov Key,r31
; Проверка, нажата ли кнопка Ring, если нажата, то будет выдан звуковой сигнал
; без сообщения об этом вызывающей функции
cpi Key,KeyRiog
breq Ring
rjmp NoRing
Ring: sbrc KeyPass1,0; Выбор типа мелодии в зависимости от четности
rjmp SimpleRing; старей цифры секретного кода
rcall Delay100
;Проигрываем сложную мелодию (Отговорила роща золотая)
;1 ми 1/8
ldi FreqConst,Note_mi1
ldi BeepDuration,2*DURATI0N/Note_mi1
rcall Beep_Del
;1 ми 1/8
ldi F reqConst,Note_mi1
ldi BeepDuration,2*DURATION/Note_mi1
rcall Beep_Del
; 1 ми 1/8
ldi FreqConst,Notejnii
ldi BeepDuration.2*DURATION/Note_mi1
rcall Beep_Del
;1 фа 3/8
Idi FreqConst,Note_fa1
ldi BeepDuration,6*DURATI0N/Note_fa1
rcall Beep_Del
;1 ми 1/8
ldi F reqConst,Note_mi1
ldi BeepDuration,2*DURATION/Note_mi1
rcall Beep_Del
;1 фа 3/8
Idi FreqConst,Note_fa1
ldi BeepDuration,6*DURATI0N/Note_fa1
rcall Beep_Del
;1 ми 1/16 (1/8)
ldi FreqCoost,Note_mi1
ldi BeepDuration,2*DURATI0N/Note_mi1
rcall Beep_Del
;1 ре 1/8
ldi FreqConst,Note_re1
ldi BeepDuration,2*DURATlON/Note_re1
rcall Beep_Del
;1 до 1/8
ldi FreqConst,Note_do1
ldi BeepDuration,2*DURATION/Note_do1
rcall Beep_Del
;1 си 1/4
ldi FreqConst,Note_ci0
ldi BeepOuration,4*DURATION/Note_ci0
rcall Beep_Del
; 1 фа 3/8
ldi FreqConst.Note_fa1
ldi BeepDuration,6*DIRATION/Note_fa1
rcall Beep_Del
;1 Фа 1/8
ldi FreqConst,Note_fa1
ldi BeepDuration,2*DURATION/Note_fa1
rcall Beep_Del
; 1 ми 3/8
ldi FreqConst.Note_mi1
ldi BeepDuration,6*DURATIOIN/Note_mi1
rcall Beep_Del
;1 ми 1/6
ldi FreqConst.Note.mil
ldi BeepDoration. 3*DURATI0N/Note_mi1
rcall Beep_Del
; 1 ми 1/8
ldi FreqConst.Note_mi1
ldi BeepDuration,2*DURATIOIN/Note_mi1
rcall Beep_Del
;1 Фа 1/8
ldi FreqConst,Note_fa1
ldi BeepDuration,2*DURATION/Note_fa1
rcall Beep_Del
;1 си 1/8
ldi FreqConst,Note_ci0
ldi BeepOuration,2*DURATION/Note_ci0
rcall Beep_Del
;1 ре 1/8
ldi FreqConst,Note_re1
ldi BeepDuration,2*DURATlON/Note_re1
rcall Beep_Del
;1 Фа 1/8
ldi FreqConst,Note_fa1
ldi BeepDuration,2*DURATION/Note_fa1
rcall Beep_Del
; 1 ми 5/8
ldi FreqConst.Note_mi1
ldi BeepDuration,10*DURATIOIN/Note_mi1
rcall Beep_Del
rjmp EndRing
SimpleRing:; Проигрываем простую мелодию