Crates.io | lcd |
lib.rs | lcd |
version | 0.4.1 |
source | src |
created_at | 2017-09-11 07:25:42.491533 |
updated_at | 2022-01-03 23:33:30.690961 |
description | Hitachi HD44780-compatible LCD screen support for embedded development |
homepage | |
repository | https://github.com/idubrov/lcd |
max_upload_size | |
id | 31354 |
size | 59,705 |
Library that implements low-level protocol to the Hitachi HD44780-compatible LCD device.
Provides high-level API to the Hitachi HD44780-compatible LCD device. Uses 4-bit mode by default (only uses 4 data pins) plus two control pins (R/S and EN). R/W pin is not used and should be wired for "write" (low-level, 0).
The implementation is completely stateless. Client is free to reuse the same Display
object
or to create one every time access to LCD is required.
Display
also implements core::fmt::Write
trait, so it could be used as a target of write!
macro.
This library does not depend on std
crate and could be used in bare metal embedded development.
use core::fmt::Write; // for write!
use lcd::*;
// implement HAL...
struct HW {
// any data needed to access low-level peripherals
}
// implement `Hardware` trait to give access to LCD pins
impl Hardware for HW {
fn rs(&mut self, bit: bool) {
// should set R/S pin on LCD screen
}
fn enable(&mut self, bit: bool) {
// should set EN pin on LCD screen
}
fn data(&mut self, data: u8) {
// should set data bits to the LCD screen (only lowest 4 bits are used in 4-bit mode).
}
// optionally, override the following function to switch to 8-bit mode
fn mode(&self) -> lcd::FunctionMode {
lcd::FunctionMode::Bit8
}
// optionally, implement the following three functions to enable polling busy flag instead of delay
fn can_read(&self) -> bool {
true
}
fn rw(&mut self, bit: bool) {
// configure pins for input _before_ setting R/W to 1
// configure pins for output _after_ setting R/W to 0
}
fn read_data(&mut self) -> u8 {
0 // read data from the port
}
}
// implement `Delay` trait to allow library to sleep for the given amount of time
impl Delay for HW {
fn delay_us(&mut self, delay_usec: u32) {
// should sleep for the given amount of microseconds
}
}
// create HAL and LCD instances
let hw = HW { /* ... */ };
let mut lcd = Display::new(hw);
// initialization
lcd.init(FunctionLine::Line2, FunctionDots::Dots5x8);
lcd.display(
DisplayMode::DisplayOn,
DisplayCursor::CursorOff,
DisplayBlink::BlinkOff);
lcd.entry_mode(EntryModeDirection::EntryRight, EntryModeShift::NoShift);
// print something
write!(&mut lcd, "Hello, my number today is {: >4}", 42).unwrap();
See lcd-example-bluepill
for the working example
for the Blue Pill development board.
Licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.