3个版本
0.1.2 | 2019年11月8日 |
---|---|
0.1.1 | 2019年11月8日 |
0.1.0 | 2019年11月8日 |
#1417 在 硬件支持
20KB
306 行
adafruit-alphanum4
在 ht16k33
库 的基础上增加功能,使用 嵌入式HAL
的特质来驱动 Adafruit 14 段 LED 数码显示屏。
特性
- 向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