Crate lcd[−][src]
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.
Examples
#![no_std] 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.
Structs
Display | Object implementing HD44780 protocol. Stateless (could be created as many times as needed). |
Enums
Command | |
Direction | |
DisplayBlink | |
DisplayCursor | |
DisplayMode | |
EntryModeDirection | |
EntryModeShift | |
FunctionDots | |
FunctionLine | |
FunctionMode | |
Scroll |
Traits
Delay | |
Hardware |