Извините, немного попытался придумать название.Возьмите линейный вход, преобразуйте в геометрическую последовательность и округлите?
В принципе, у меня есть фрагмент кода, который считывает значение из компаратора на моей встроенной плате (8051). Это будет значение от 0 до 255, где 0 равно 0 В, а 255 - 5 В.
Мне нужно вывести эти значения в набор из восьми светодиодов, каждый из которых назначается бит на переменной P1, с возможностью чтения человеком (IE, как измеритель уровня). Следовательно, входное значение должно быть округлено так, чтобы что-либо от 16 до 32 выводилось как 1, 33 - 48 как 2, от 49 до 80 как 4, от 81 до 112 как 8 и т. Д.
Мое единственное решение, которое я знаю будет работать до сих пор - строка инструкций if-else, но я получил два слоя, прежде чем осознать, что это просто не собирается сокращать его.
Кто-нибудь знает, как это осуществить? Мой мозг превратился в мушню, пытаясь понять, как это сделать математически.
Спасибо! Joe
EDIT: сделайте снимок моих расчетов, я надеюсь, что это станет более понятным. http://i.imgur.com/r3n8Ila.png
Я не понимаю, почему вы должны 42+ быть преобразованы в 2. В каком порядке вы хотите, чтобы осветить светодиодов в зависимости от напряжения? – Aneri
Первый светодиод должен загореться, когда напряжение проходит 6,25% от общего количества, второе - 18,75%, третье - 31,25. Я только заметил, что я испортил свои расчеты, поэтому я сделаю их снова. Чтобы зажечь светодиоды (которые являются обратной логикой), я просто добавляю P1 = a ;, где a - 8 бит int. Например, для освещения только msb требуется равное 0xF7h. –
Итак, какие значения вам нужны? 0 -> 0, 33 ->, 65 ->, 97 ->, ... – Aneri