-# Hitachi HD44780 or similar 2-4 lines LCD displays
-class HD44780
- var rs: RPiPin
- var en: RPiPin
- var d4: RPiPin
- var d5: RPiPin
- var d6: RPiPin
- var d7: RPiPin
-
- var ds = new Array[RPiPin]
-
- # commands
- fun flag_clear_display: Int do return 1
- fun flag_return_home: Int do return 2
- fun flag_entry_mode_set: Int do return 4
- fun flag_display_control: Int do return 8
- fun flag_cursor_shift: Int do return 16
- fun flag_function_set: Int do return 32
- fun flag_set_cgram_addr: Int do return 64
- fun flag_set_ggram_addr: Int do return 128
-
- # entry mode
- fun flag_entry_right: Int do return 0
- fun flag_entry_left: Int do return 2
- fun flag_entry_shift_increment: Int do return 1
- fun flag_entry_shift_decrement: Int do return 0
-
- # display flags
- fun flag_display_on: Int do return 4
- fun flag_display_off: Int do return 0
- fun flag_cursor_on: Int do return 2
- fun flag_cursor_off: Int do return 0
- fun flag_blink_on: Int do return 1
- fun flag_blink_off: Int do return 0
-
- # display/cursor shift
- fun flag_display_move: Int do return 8
- fun flag_cursor_move: Int do return 0
- fun flag_move_right: Int do return 4
- fun flag_move_left: Int do return 0
-
- # function set
- fun flag_8bit_mode: Int do return 16
- fun flag_4bit_mode: Int do return 0
- fun flag_2_lines: Int do return 8
- fun flag_1_line: Int do return 0
- fun flag_5x10_dots: Int do return 4
- fun flag_5x8_dots: Int do return 0
-
- fun function_set(bits, lines, dots_wide: Int)
- do
- var fs = flag_function_set
- if bits == 8 then
- fs = fs.bin_or(16)
- else if bits != 4 then abort