4个版本
0.2.0 | 2023年5月8日 |
---|---|
0.1.2 | 2021年10月26日 |
0.1.1 | 2021年10月16日 |
0.1.0 | 2021年10月16日 |
808 在 嵌入式开发
每月40次下载
51KB
650 行
AG-LCD
此库仅在Arduino Nano (atmega328p) 和Arduino Uno (atmega328p) 上进行了测试。如果您在其他系统上测试并发现错误,请将问题添加到该项目,以便我可以修复它们。
这是LiquidCrystal库的Rust版本。LiquidCrystal是一个标准的C++库,允许开发者使用一个或两个16字符行控制HITACHI HD44780 LCD屏幕。我已经调查过此库的替代方案(包括):
我决定创建一个更全面的解决方案,因为现有的库要么不完整,要么使用起来比较复杂。此库使用embedded-hal的特质,应该可以与任何使用相同类型的硬件抽象层一起工作。目前这个crate只与avr-hal进行了测试,所有示例代码和注释都假设您也在使用avr-hal。
还提供了通过PCF8574或PCF8574A远程I/O扩展器使用I2C控制LCD的功能。
构建
由于avr-hal需要nightly-2021-01-07或更早版本,您需要使用nightly来编译此项目。
注意:所有示例都已更新为使用nightly-2022-07-10
,并手动测试以确保它们可以构建。如果您发现它们无法构建,请提交问题。
用法
// Without I2C
use ag_lcd::{Display, Blink, Cursor, LcdDisplay};
let peripherals = arduino_hal::Peripherals::take().unwrap();
let pins = arduino_hal::pins!(peripherals);
let delay = arduino_hal::Delay::new();
let rs = pins.d12.into_output().downgrade();
let rw = pins.d11.into_output().downgrade();
let en = pins.d10.into_output().downgrade();
// let d0 = pins.d9.into_output().downgrade();
// let d1 = pins.d8.into_output().downgrade();
// let d2 = pins.d7.into_output().downgrade();
// let d3 = pins.d6.into_output().downgrade();
let d4 = pins.d5.into_output().downgrade();
let d5 = pins.d4.into_output().downgrade();
let d6 = pins.d3.into_output().downgrade();
let d7 = pins.d2.into_output().downgrade();
let mut lcd: LcdDisplay<_,_> = LcdDisplay::new(rs, en, delay)
// .with_full_bus(d0, d1, d2, d3, d4, d5, d6, d7)
.with_half_bus(d4, d5, d6, d7)
.with_display(Display::On)
.with_blink(Blink::On)
.with_cursor(Cursor::On)
.with_rw(d10) // optional (set to GND if not provided)
.build();
lcd.set_cursor(Cursor::Off);
lcd.set_blink(Blink::Off);
lcd.print("Test message!");
// With I2C
use ag_lcd::{Cursor, LcdDisplay};
use panic_halt as _;
use port_expander::dev::pcf8574::Pcf8574;
let peripherals = arduino_hal::Peripherals::take().unwrap();
let pins = arduino_hal::pins!(peripherals);
let delay = arduino_hal::Delay::new();
let sda = pins.a4.into_pull_up_input();
let scl = pins.a5.into_pull_up_input();
let i2c_bus = arduino_hal::i2c::I2c::new(peripherals.TWI, sda, scl, 50000);
let mut i2c_expander = Pcf8574::new(i2c_bus, true, true, true);
let mut lcd: LcdDisplay<_, _> = LcdDisplay::new_pcf8574(&mut i2c_expander, delay)
.with_cursor(Cursor::Off)
.build();
lcd.print("Test message!");
依赖项
~115–410KB