gn="justify"> r16, 0b11100011 PORTD, r16
ret
; ***************************************** ****************:
; перевіряє натиснення клавіші в клавіатурі повертає номер клавіші в разі натискання
; інакше повертає -1 (255) також -1 повертається у разі, якщо минулого разу була; натиснута та ж кнопка повертається значення - мінлива Key
; блок перевірки рядка (всього їх 4) R17, PinD; читаємо порт DKeyTest; викликаємо програму перевірки
; програма повертає номер кнопки: 0 .. 2
; або -1 - якщо немає натиснутих кнопок
R17, 0; завантажуємо код поточної строкіR18, 255; якщо нічого не натиснуто - йдемо дальшеSetKey; інакше - переходимо на обробку
; кінець 0-го блоку
R17, PinD
rcall KeyTestR17, 3R18, 255SetKey
R17, PinDKeyTestR17, 6R18, 255SetKeyR17, PinDKeyTestR17, 9R18, 255SetKey
R17, 0
SetKey: R17, R18; додаємо номер кнопки до коду строчкіR18, Key; вантажимо код кнопки, прочитаний в минулий разR18, 0b00001111; "чистимо" його по маскеR17, R18; якщо минулого разEndKeyRead; була натиснута не та ж кнопка, виходимо
R17, 0b10000000; інакше - пишемо прапорець "повтор": Key, R17; зберігаємо код кнопки в ОЗУ
; виходимо
; ***************************************** ****************
KeyTest: R17, 0b01110000; обрізаємо по маскеR18, 0b01110000R17, R18; інвертуємо біти по маскеNoButtons; якщо всі нулі (немає натиснутих), переходимо за міткою
R18, 0; инициализируем лічильник
R17, 0b00010000; перевіряємо 0-ю кнопкуEndKeyTest; натиснуто - виходR18; інакше - інкремент лічильника
R17, 0b00100000; перевірка 2 кнопкіEndKeyTestR18
R17, 0b01000000; перевірка 3 кнопкіEndKeyTest
: R18, 255; якщо нічого не натиснуто - повертаємо 255
: ret
; ***************************************** ****************:
; запускає виконання операції, закріпленої за кнопкою
R17, Key; завантажуємо змінну KeyR18, R17; перевіряємо на наявність флажкаR18, 0b10000000; "повтор" або-1EndKeyboard; якщо повтор або -1 - виходимо
ZH, High (KeysLUT * 2); завантажуємо табліцуZL, Low (KeysLUT * 2); істинності (клавіша -> значення)
R18, 0; зміщуємося на номер клавіші
add ZL, R17ZH, R18
lpm; завантажуємо значення елементаR17, R0
R18, Digit +2; зсуваємо розряди індіка...