#lcd-display #hd44780 #mode #pin #low-level #screen

不依赖 std lcd

日立HD44780兼容液晶显示屏嵌入式开发支持

7个不稳定版本

0.4.1 2022年1月3日
0.4.0 2022年1月3日
0.4.0-alpha.02021年2月15日
0.3.0 2017年9月27日
0.1.1 2017年9月11日

#416嵌入式开发

Download history 31/week @ 2024-03-11 19/week @ 2024-03-18 13/week @ 2024-03-25 51/week @ 2024-04-01 12/week @ 2024-04-08 31/week @ 2024-04-15 25/week @ 2024-04-22 20/week @ 2024-04-29 21/week @ 2024-05-06 21/week @ 2024-05-13 25/week @ 2024-05-20 17/week @ 2024-05-27 26/week @ 2024-06-03 25/week @ 2024-06-10 18/week @ 2024-06-17 28/week @ 2024-06-24

99 每月下载量
lcd-pcf8574 中使用

MIT/Apache

22KB
300 代码行数

crates.io crates.io CircleCI Codecov

lcd

实现与日立HD44780兼容的LCD设备的低级协议的库。

为日立HD44780兼容的LCD设备提供高级API。默认使用4位模式(只使用4个数据引脚)加上两个控制引脚(R/S和EN)。R/W引脚未使用,应连接为"写入"(低电平,0)。

实现完全无状态。客户端可以自由地重用相同的Display对象,或者每次需要访问LCD时创建一个。

Display还实现了core::fmt::Write特质,因此它可以作为write!宏的目标。

此库不依赖于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();

请参阅lcd-example-bluepill以获取针对Blue Pill开发板的示例。

许可证

许可协议为以下之一:

任选其一。

贡献

除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交的工作的任何贡献,都将如上所述双重许可,没有任何额外的条款或条件。

无运行时依赖