Module capsules_extra::seven_segment
source · Expand description
Provides userspace access to 7 segment digit displays.
This capsule was developed using the following components:
- Microbit_v2
- Edge Connector Breakout Board for Microbit (PPMB00126)
- 7 segment display with 4 digits (3461BS-1)
- breadboard, 220 ohms resistances and jump wires
§Usage
Example of use for a display with 4 digits and the Microbit: Microbit Pins: https://tech.microbit.org/hardware/schematic/ 4 digit 7 segment display pinout: https://www.dotnetlovers.com/images/4digit7segmentdisplay85202024001AM.jpg
ⓘ
const NUM_DIGITS: usize = 4;
const DIGITS: [Pin; 4] = [Pin::P1_02, Pin::P0_12, Pin::P0_30, Pin::P0_09]; // [D1, D2, D3, D4]
const SEGMENTS: [Pin; 7] = [
Pin::P0_02, // A
Pin::P0_03, // B
Pin::P0_04, // C
Pin::P0_31, // D
Pin::P0_28, // E
Pin::P0_10, // F
Pin::P1_05, // G
];
const DOT: Pin = Pin::P0_11;
let segment_array = static_init!(
[&'static nrf52::gpio::GPIOPin<'static>; 8],
[
static_init!(
&'static nrf52::gpio::GPIOPin<'static>,
&nrf52833_peripherals.gpio_port[SEGMENTS[0]]
),
static_init!(
&'static nrf52::gpio::GPIOPin<'static>,
&nrf52833_peripherals.gpio_port[SEGMENTS[1]]
),
static_init!(
&'static nrf52::gpio::GPIOPin<'static>,
&nrf52833_peripherals.gpio_port[SEGMENTS[2]]
),
static_init!(
&'static nrf52::gpio::GPIOPin<'static>,
&nrf52833_peripherals.gpio_port[SEGMENTS[3]]
),
static_init!(
&'static nrf52::gpio::GPIOPin<'static>,
&nrf52833_peripherals.gpio_port[SEGMENTS[4]]
),
static_init!(
&'static nrf52::gpio::GPIOPin<'static>,
&nrf52833_peripherals.gpio_port[SEGMENTS[5]]
),
static_init!(
&'static nrf52::gpio::GPIOPin<'static>,
&nrf52833_peripherals.gpio_port[SEGMENTS[6]]
),
static_init!(
&'static nrf52::gpio::GPIOPin<'static>,
&nrf52833_peripherals.gpio_port[DOT]
),
]
);
let digit_array = static_init!(
[&'static nrf52::gpio::GPIOPin<'static>; 4],
[
static_init!(
&'static nrf52::gpio::GPIOPin<'static>,
&nrf52833_peripherals.gpio_port[DIGITS[0]]
),
static_init!(
&'static nrf52::gpio::GPIOPin<'static>,
&nrf52833_peripherals.gpio_port[DIGITS[1]]
),
static_init!(
&'static nrf52::gpio::GPIOPin<'static>,
&nrf52833_peripherals.gpio_port[DIGITS[2]]
),
static_init!(
&'static nrf52::gpio::GPIOPin<'static>,
&nrf52833_peripherals.gpio_port[DIGITS[3]]
),
]
);
let buffer = static_init!([u8; 4], [0; 4]);
let digit_display = static_init!(
capsules::digits::DigitsDriver<
'static,
nrf52::gpio::GPIOPin<'static>,
capsules::virtual_alarm::VirtualMuxAlarm<'static, nrf52::rtc::Rtc<'static>>,
>,
capsules::digits::DigitsDriver::new(
segment_array,
digit_array,
buffer,
virtual_alarm_digit,
kernel::hil::gpio::ActivationMode::ActiveLow,
kernel::hil::gpio::ActivationMode::ActiveHigh,
60
),
);
virtual_alarm_digit.set_alarm_client(digit_display);
digit_display.init();
§Syscall Interface
§Command
All operations are synchronous, so this capsule only uses the command
syscall.
§command_num
0
: Driver Check.data1
: Unused.data2
: Unused.- Return: Number of digits.
1
: Prints one digit at the requested position.data1
: The position of the digit. Starts at 1.data2
: The digit to be represented, from 0 to 9.- Return:
Ok(())
if the digit index was valid,INVAL
otherwise.
2
: Clears all digits currently being displayed.data1
: Unused.data2
: Unused.
3
: Print a dot at the requested digit position.data1
: The position of the dot. Starts at 1.- Return:
Ok(())
if the index was valid,INVAL
otherwise.
4
: Print a custom pattern for a digit on a certain position.data1
: The position of the digit. Starts at 1.data2
: The custom pattern to be represented.- Return:
Ok(())
if the index was valid,INVAL
otherwise.
5
: Return the number of digits on the display being used.data1
: Unused.data2
: Unused.
Structs§
- Holds an array of digits and an array of segments for each digit.