1) 4 digits, but “2+2 independent”?
Yes, but not with seven_segment_multiplexer = value / put(word), because that only formats one number across all digits. To do 2+2, you must set the digit buffer per position (each digit is updated independently by the ISR).
-- up: 0..99 (displayed on digits 1..0)
-- down: 0..99 (displayed on digits 3..2)
var byte up = 23
var byte down = 99
procedure display_update_2plus2() is
var byte tens
var byte ones
tens = up / 10
ones = up - (tens * 10)
_seven_segment_multiplexer_digit[0] = ones
_seven_segment_multiplexer_digit[1] = tens
tens = down / 10
ones = down - (tens * 10)
_seven_segment_multiplexer_digit[2] = ones
_seven_segment_multiplexer_digit[3] = tens
if up < 10 then
_seven_segment_multiplexer_digit[1] = 27 -- space
end if
end procedure
2) Using seven_segment characters in the multiplexer
The multiplexer already uses seven_from_digit(...). So you can show any seven_segment “character index” by putting that index into the digit buffer (e.g. 10 = “A”, 27 = space, 34 = “-”, etc.).
_seven_segment_multiplexer_digit[0] = 10 -- "A"
_seven_segment_multiplexer_digit[1] = 11 -- "b"
_seven_segment_multiplexer_digit[3] = 27 -- "space"
3) Showing sbyte negative (e.g. -4)
Yes: display "-" (character index 34) on one digit and 4 on the other.
_seven_segment_multiplexer_digit[0] = 4 -- "4"
_seven_segment_multiplexer_digit[1] = 34 -- "-" (minus)
4) Digits set to input go blank; when set back to output the old value is gone
To blank/re-enable while keeping the previous value, keep multiplexing running and blank via the digit data (e.g., use space index 27) rather than changing pin direction.
Matt.