Кнопки висят в старшей тетраде ... светодиоды в младшей. Я здесь просто сразу кнопки "подвинул" на места светодиодов ... дабы потом ими управлять.
Если у вас кнопки разбросаны по порту с другой переферией, то просто работайте только с битами кнопок... остальные не трогайте. Это хорошо видно в примере выше:
здесь я описал веса битов своих кнопок (bt_*) и свтодиода (ld_*)
Код:
|
#define bt_mode 0x01 //Вес бита кнопки "режим"
#define bt_cnt 0x02 //Вес бита кнопки "считалка"
#define ld_mode 0x04 //Вес бита светодиода "Режим подсчета" |
А дальше идет чситывание состояния кнопок - читаем только биты кнопок:
Код:
|
n = PINB & (bt_mode|bt_cnt); |
И точно так же через веса битов и маски проверяются и изменяются остальные биты.
Эту строку можно прочесть: если бит кнопки и в V и N поднят (изменена и сейчас нажата), значит ее нажали только сейчас.
Если Кнопки передернуть на другие биты, то достаточно в DEFINE изменить вес бита... а на другую переферию этого порта можно не обращать внимания.
--------
Цитата:
|
pb1(0x02) кнопка pb2(0x04) кнопка режима pb4(0x10) тоже кнопка
|
Код:
|
n = PINB & 0x16; или PINB & (0x02 | 0x04 | 0x10)
v = p ^ n
if (v & n & 0x02) // Если нажали кнопку pb1,
PORTB &= ~ 0x08 //то зажгли светодиод на pb3
if (v & p & 0x04) // Если отпустили кнопку pb2
bomba_on; // :-)
if (!(v & 0x10) -- Если состояние кнопки pb4 НЕ изменилось |