Arduino Mega 2560 + Регистр 74Hc165

17-06-2013, 15:48 От: admin Посмотрели: 1091
Добрый день.



Есть следующая задача:



Считать 12 кнопок с помощью каскада из двух регистров 74HC165

Кнопки подтянуты на +5, при нажатии дают логический 0

Входы G и H регистров подтянуты на GND (всегда выдают 0)

При всех не нажатых кнопках:



ABCD EFGH первого регистра

1111 1100

ABCD EFGH второго регистра

1111 1100





Сейчас код выглядит следующим образом:


// определяем переменные для входного IN регистра
int latch_SH_in = 41; // защелка входного регистра без привязки к SPI
int data_SH_in = 50; // SPI MISO 50

// общий CLK на каскад IN и OUT
int clock_SH_in_out = 52;// SPI SCK 52 на MEGA

// переменная считываемых с IN данных
int value_in1 = 0; // переменная первого IN
int value_in2 = 0; // переменная вторгоо IN



void setup()
{
// запускаем COM
Serial.begin(9600);
//настраиваем пины IN регистра
pinMode(latch_SH_in, OUTPUT);
pinMode(data_SH_in, INPUT);
// настраиваем общий IN_OUT clock
pinMode(clock_SH_in_out, OUTPUT);


}
void loop()
{
// Считываем регистры
value_in1 = shiftIn(data_SH_in, clock_SH_in_out, MSBFIRST);
value_in2 = shiftIn(data_SH_in, clock_SH_in_out, MSBFIRST);

//выводим значения в COM-монитор при изменениях в первом регистре
if(value_in1 == 124 && value_in2 == 252)
{Serial.println("A");}

if (value_in1 == 188 && value_in2 == 252)
{Serial.println ("B");}

if (value_in1 == 220 && value_in2 == 252)
{Serial.println ("C");}

if (value_in1 == 236 && value_in2 == 252)
{Serial.println ("D");}

if (value_in1 == 244 && value_in2 == 252)
{Serial.println ("E");}

if (value_in1 == 248 && value_in2 == 252)
{Serial.println ("F");}

//выводим значения в COM-монитор при изменениях во втором регистре
if(value_in1 == 252 && value_in2 == 124)
{Serial.println("2A");}

if (value_in1 == 252 && value_in2 == 188)
{Serial.println ("2B");}

if (value_in1 == 252 && value_in2 == 220)
{Serial.println ("2C");}

if (value_in1 == 252 && value_in2 == 236)
{Serial.println ("2D");}

if (value_in1 == 252 && value_in2 == 244)
{Serial.println ("2E");}

if (value_in1 == 252 && value_in2 == 248)
{Serial.println ("2F");}

}





1. Куда вставить в код управление защелкой (latch_SH_in) чтобы все корректно читалось?

2. Правильно ли читаются биты при порядке MSBFIRST? 1A 2B 3C 4D 5E 6F 7G 8H?

Или, все же наоборот 1H ............8A?

3. Что надо прописать в фигурных скобках, чтобы ничего не выводилось при ни одной не нажатой кнопке (value_in1 == 252 && value_in2 == 252)?
Раздел: Arduino и Raspberry Pi

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться, либо войти на сайт под своим именем.

Обсудить на форуме


На момент добавления Arduino Mega 2560 + Регистр 74Hc165 все ссылки были рабочие.
Все публикации статей, книг и журналов, представлены на этом сайте, исключительно для ознакомления,
авторские права на эти публикации принадлежат авторам статей, книг и издательствам журналов!
Подробно тут | Жалоба

Добавление комментария

Ваше имя:*
E-Mail:*
Текст:
Вопрос:
Решите уравнения x+2x=789
Ответ:*
Введите два слова, показанных на изображении:



Опрос

Ваши предпочтения в TRX


Одинарное преобразование
Двойное преобразование
Прямое преобразование
SDR
Другое
Мне всё равно

Популярные новости
Календарь новостей
«    Май 2024    »
ПнВтСрЧтПтСбВс
 12345
6789101112
13141516171819
20212223242526
2728293031