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次下载

GPL-3.0-or-later

51KB
650

AG-LCD

ag-lcd crate ag-lcd docs

此库仅在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