#adafruit #ht16k33 #嵌入式HAL驱动程序 #无std

无std adafruit-alphanum4

ht16k33 库之上构建的小包装,用于驱动 Adafruit 14 段 LED 数码显示屏

3个版本

0.1.2 2019年11月8日
0.1.1 2019年11月8日
0.1.0 2019年11月8日

#1417硬件支持

MIT/Apache

20KB
306

adafruit-alphanum4

ht16k33 的基础上增加功能,使用 嵌入式HAL 的特质来驱动 Adafruit 14 段 LED 数码显示屏

Crate Documentation

特性

  • 向4个段之一发送 u8
  • 向4个段之一发送 AsciiChar
  • 设置或清除与4个段之一相关的点
  • f32 格式化为 1 到 4 段

示例

    const DISP_I2C_ADDR: u8 = 112;

    let freq: Hertz = 20.khz().into();

    let mut i2c2 = blocking_i2c(
        I2c::i2c2(
            device.I2C2, 
            (scl_pin, sda_pin),
            Mode::Standard { frequency: freq.0 },
            clocks,
            &mut rcc.apb1,
        ),
        clocks,
        500,
        2,
        500,
        500,
    );

    let mut ht16k33 = HT16K33::new(i2c2, DISP_I2C_ADDR);
    ht16k33.initialize().expect("Failed to initialize ht16k33");

    // Sending individual digits
    ht16k33.update_buffer_with_digit(Index::One, 1);
    ht16k33.update_buffer_with_digit(Index::Two, 2);
    ht16k33.update_buffer_with_digit(Index::Three, 3);
    ht16k33.update_buffer_with_digit(Index::Four, 4);

    // Sending ascii
    ht16k33.update_buffer_with_char(Index::One, AsciiChar::new('A'));
    ht16k33.update_buffer_with_char(Index::Two, AsciiChar::new('B'));

    // Setting the decimal point 
    ht16k33.update_buffer_with_dot(Index::Two, true);

    // Formatting a float using the whole display
    ht16k33.update_buffer_with_float(Index::One, -3.14, 2, 10).unwrap();

    // Putting a character in front of a float
    ht16k33.update_buffer_with_char(Index::One, AsciiChar::new('X'));
    ht16k33.update_buffer_with_float(Index::Two, -3.14, 2, 10).unwrap(); //Display will read "X-3.1"

    // This will panic because there aren't enough digits to display this number
    ht16k33.update_buffer_with_float(Index::One, 12345., 0, 10).expect("Oops"); 

    // Note: none of the above methods actually commit the buffer to the display, call write_display_buffer to actually send it to the display
    ht16k33.write_display_buffer().unwrap()

性能警告

由于 ht16k33 库的 API,显示缓冲区不可直接访问,因此构成字符的每个LED都是顺序更新的。这个背包上硬件的设置允许通过在缓冲区中设置一个16位值来更新一个字符。每次更新时遍历16位的每个位显然不是最优的,但对我来说足够快。如果 ht16k33 库更新为允许对缓冲区进行可变访问,这可以改进。

许可证

免费和开源软件,根据 MIT 许可证和 Apache 许可证 2.0 的条款分发。

依赖

~375KB