Официальный сайт компании Arduino по адресу arduino.cc
Хранение данных и функция shiftOut
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Вс, 17/05/2020 - 19:54
digitalWrite(ST, LOW); //начало передачи shiftOut(DS, SH, LSBFIRST, B00000000); //1 разряд shiftOut(DS, SH, LSBFIRST, B11111111); //2 разряд digitalWrite(ST, HIGH); //передача окончена
Проблема в следующем, есть два последовательно соединенных сдвиговых регистра sn74hc595dr. Все бы ничего, но светодиоды к ним подключены ни как "одна цифра - один регистр", а довольно таки хаотично. Есть перечень соответствия в excel, например,
0 0 B00111111 B01111110 0 1 B00111001 B01110010 0 2 B01111011 B01111100 0 3 B01111011 B01111010 и далее до 99...
Как лучше организовать хранение значений регистров, что бы было проще их вызывать в функции shiftOut& Думал в двухмерном массиве, но никак...
Проблема в следующем, есть два последовательно соединенных сдвиговых регистра sn74hc595dr. Все бы ничего, но светодиоды к ним подключены ни как "одна цифра - один регистр", а довольно таки хаотично. Есть перечень соответствия в excel, например,
Как лучше организовать хранение значений регистров, что бы было проще их вызывать в функции shiftOut& Думал в двухмерном массиве, но никак...
Потом или разбирать на байты, или написать функцию shiftOut32(uint32_t)
Не нужен тут двумерный массив, можно взять одномерный от 0 до 99. Но в таком случае он займер 200 байт.
Правильнее - определить соответвие конкретных битов конкретным сегментам и сделать два одномерных массива шестнадцати-битных значений для цифр от 0 до 9 в первом регистре и во втором. При выводе конкретного числа делать логическое побитовое "И" для цифр первого и второго регистра. Этот вариант займер 40 байт
Не нужен тут двумерный массив, можно взять одномерный от 0 до 99. Но в таком случае он займер 200 байт.
Правильнее - определить соответвие конкретных битов конкретным сегментам и сделать два одномерных массива шестнадцати-битных значений для цифр от 0 до 9 в первом регистре и во втором. При выводе конкретного числа делать логическое побитовое "И" для цифр первого и второго регистра. Этот вариант займер 40 байт
Чет я похоже не понял, не получается так:
чет код вставляется плохо:
Чет я похоже не понял, не получается так:
Во-первых, чисто матиматически вы складываете строчки неверно. Если третья и четвертая строчка - это результат применения "И" к первым двум - то оба результата неправильные.
Ну а во-вторых, у вас концептуальная ошибка. Для того чтобы вывести число "33", совмещать надо не "30" и "03", а "3_" и "_3", где символ подчеркивания означает отсутствие свечения сегментов вовсе
Чет я похоже не понял, не получается так:
Во-первых, чисто матиматически вы складываете строчки неверно. Если третья и четвертая строчка - это результат применения "И" к первым двум - то оба результата неправильные.
Ну а во-вторых, у вас концептуальная ошибка. Для того чтобы вывести число "33", совмещать надо не "30" и "03", а "3_" и "_3", где символ подчеркивания означает отсутствие свечения сегментов вовсе
Третья строка это результат побитового "и" согласно википедии (тут) Четвертая строка, как должно выглядеть число "33"
Еще хуже получилось:
очевидная ошибка - в первой строке третий слева разряд - "1", значит в этом месте в результате заведомо должна быть единица, а у вас в вашей строчке "должно быть" - почему-то ноль
Третья строка это результат побитового "и" согласно википедии (тут) Четвертая строка, как должно выглядеть число "33"
еще раз - у вас и в расчете ошибка, и в логике, разбирайтесь
очевидная ошибка - в первой строке третий слева разряд - "1", значит в этом месте в результате заведомо должна быть единица, а у вас в вашей строчке "должно быть" - почему-то ноль
не думаю
Еще хуже получилось:
сорри, не "И", а "ИЛИ"
Простите, сам зарапортовался. Но вообще-то это должно быть очевидно :)
Еще хуже получилось:
сорри, не "И", а "ИЛИ"
Простите, сам зарапортовался. Но вообще-то это должно быть очевидно :)
Да, это было очевидно, стоило подумать и... я подумал и догадался) но все равно спасибо)
Заработало