Skip to content

Commit ec34e2b

Browse files
Implement defining custom characters
1 parent 3304d93 commit ec34e2b

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed

src/character.rs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
use core::iter::once;
2+
3+
use embedded_hal::delay::DelayNs;
4+
5+
use crate::{bus::DataBus, charset::CharsetWithFallback, error::Result, memory_map::DisplayMemoryMap, HD44780};
6+
7+
pub struct CharacterDefinition {
8+
pub pattern: [u8; 10],
9+
pub cursor: u8,
10+
11+
// /// Since lines 12 to 16 are not used for display,
12+
// /// they can be used for general data RAM.
13+
// pub data: Option<[u8; 5]>,
14+
}
15+
16+
impl<B, M, C> HD44780<B, M, C>
17+
where
18+
B: DataBus,
19+
M: DisplayMemoryMap,
20+
C: CharsetWithFallback,
21+
{
22+
pub fn define_custom_character<D: DelayNs>(
23+
&mut self,
24+
code: u8,
25+
def: &CharacterDefinition,
26+
delay: &mut D,
27+
) -> Result<(), B::Error> {
28+
self.write_command(0b01000000 | (code & 0b11) << 4, delay)?;
29+
delay.delay_us(100);
30+
31+
let lines = def.pattern.iter().cloned().chain(once(def.cursor));
32+
for line in lines {
33+
self.write_byte(line, delay)?;
34+
}
35+
36+
// Change back to DDRAM
37+
self.set_cursor_pos(0, delay)?;
38+
Ok(())
39+
}
40+
}

src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ use entry_mode::{CursorMode, EntryMode};
1818

1919
pub mod setup;
2020

21+
pub mod character;
2122
pub mod charset;
2223

2324
pub mod memory_map;

0 commit comments

Comments
 (0)