Для вывода двух-, трех- или четырех- значного числа на сегментный индикатор необходимо это число предварительно подготовить. Разбивка числа на разряды и есть тема этого поста. Кто то скажет, что эта тема и яйца выеденного не стоит, а для кого то это может быть неразрешимой проблемой. Для себя я представил решение этой задачи следующим образом. Поскольку задача стоит выводить целое число,
заключенное в переменной типа int, можно воспользоваться делением с последующим округлением до целого.
Если речь идет о четырехзначном числе, деление его на 1000 даст в целой части результата требуемое значение цифры тысяч. Отняв от числа тысячи, делим остаток на 100 и получаем в целой части количество сотен. Процесс повторяем, пока не получим значение единиц.
Математика получается такая:
Исходное число 1234
1234 / 1000 = 1, (234) - отбросим остаток, результат = 1
1234 - 1 * 1000 = 234
234 / 100 = 2, (34) - отбросим остаток, результат = 2
234 - 2 * 100 = 34
34 / 10 = 3, (4) - отбросим остаток, результат = 3
34 - 3 * 10 = 4 - получаем число единиц = 4
Код получился такой:
int razr[4] = {0, 0, 0, 0}; // определяем массив для хранения поразрядно заданного числа DIGIT
unsigned int DIGIT = 1234; // число, которое будем разбивать на разряды
void setup() {
}
void loop() {
razr[0] = DIGIT / 1000; // целая часть от деления будет соответствовать количеству тысяч в числе
// результат заносим в массив под номером 0
unsigned int cifra = razr[0] * 1000;// вспомогательная переменная
razr[1] = (DIGIT - cifra) / 100; // получем количество сотен
cifra += razr[1] * 100; // суммируем сотни и тысячи
razr[2] = (DIGIT - cifra) / 10; // получем десятки
cifra += razr[2] * 10; // сумма тысяч, сотен и десятков
razr[3] = DIGIT - cifra; // получаем количество единиц
// теперь наш массив содержит значение числа, разбитого на отдельные цифры
}
заключенное в переменной типа int, можно воспользоваться делением с последующим округлением до целого.
Если речь идет о четырехзначном числе, деление его на 1000 даст в целой части результата требуемое значение цифры тысяч. Отняв от числа тысячи, делим остаток на 100 и получаем в целой части количество сотен. Процесс повторяем, пока не получим значение единиц.
Математика получается такая:
Исходное число 1234
1234 / 1000 = 1, (234) - отбросим остаток, результат = 1
1234 - 1 * 1000 = 234
234 / 100 = 2, (34) - отбросим остаток, результат = 2
234 - 2 * 100 = 34
34 / 10 = 3, (4) - отбросим остаток, результат = 3
34 - 3 * 10 = 4 - получаем число единиц = 4
Код получился такой:
int razr[4] = {0, 0, 0, 0}; // определяем массив для хранения поразрядно заданного числа DIGIT
unsigned int DIGIT = 1234; // число, которое будем разбивать на разряды
void setup() {
}
void loop() {
razr[0] = DIGIT / 1000; // целая часть от деления будет соответствовать количеству тысяч в числе
// результат заносим в массив под номером 0
unsigned int cifra = razr[0] * 1000;// вспомогательная переменная
razr[1] = (DIGIT - cifra) / 100; // получем количество сотен
cifra += razr[1] * 100; // суммируем сотни и тысячи
razr[2] = (DIGIT - cifra) / 10; // получем десятки
cifra += razr[2] * 10; // сумма тысяч, сотен и десятков
razr[3] = DIGIT - cifra; // получаем количество единиц
// теперь наш массив содержит значение числа, разбитого на отдельные цифры
}
Комментариев нет:
Отправить комментарий