NetBurner 3.5.6
PDF Version
hd44780.h
1#ifndef __HD44780_H
2#define __HD44780_H
3/*NB_REVISION*/
4
5/*NB_COPYRIGHT*/
6
7#include <predef.h>
8
9class HD44780_LCD_Bus
10{
11 volatile uint8_t bus[2];
12 class reg
13 {
14 uint8_t addr;
15 volatile uint8_t *lcd;
16
17 public:
18 reg(uint8_t addr, volatile uint8_t *lcd) : addr(addr), lcd(lcd) {}
19 operator uint8_t() { return read(); }
20 uint8_t operator=(uint8_t val)
21 {
22 write(val);
23 return val;
24 }
25
26 uint8_t read() { return lcd[addr]; }
27 void write(uint8_t val)
28 {
29 while (lcd[0] & 0x80)
30 {
31 asm("dsb");
32 }
33 lcd[addr] = val;
34 }
35 };
36
37 public:
38 HD44780_LCD_Bus();
39
40 void init(uint8_t cols, uint8_t rows);
41 void putchar(char c);
42 void putstr(const char *str);
43 void setCursor(int row, int col);
44 void clr();
45
46 reg operator[](int i) { return reg(i & 0x1, bus); }
47 friend class HD44780_LCD;
48};
49
50class HD44780_LCD
51{
52 public:
53 enum cursorDisp_t
54 {
55 CURSOR_OFF = 0,
56 CURSOR_ON = 2,
57 CURSOR_BLINK = 3
58 };
59
60 private:
61 HD44780_LCD_Bus &bus;
62 uint8_t cols;
63 uint8_t rows;
64 cursorDisp_t cursorDisp;
65 bool dispState;
66
67 public:
68 HD44780_LCD(HD44780_LCD_Bus &bus, uint8_t cols, uint8_t rows);
69
70 void init() { bus.init(cols, rows); }
71 void putchar(char c) { bus.putchar(c); }
72 void putstr(const char *str) { bus.putstr(str); }
73 void setCursor(int row, int col) { bus.setCursor(row, col); }
74 void enableCursor(cursorDisp_t disp);
75 void enableDisplay(bool enable);
76 void clr();
77
78 HD44780_LCD_Bus::reg operator[](int i) { return bus[i]; }
79};
80
81#endif /* ----- #ifndef __HD44780_H ----- */
void init()
System initialization. Ideally called at the beginning of all applications, since the easiest Recover...