-
Notifications
You must be signed in to change notification settings - Fork 4
/
Display.cpp
68 lines (52 loc) · 1.33 KB
/
Display.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include "Display.h"
#include "IConnection.h"
using namespace GU20x8;
Display::Display(IConnection& connection) :
connection(connection)
{}
void Display::Begin()
{
connection.ConfigureBus();
DisableDisplay();
}
void Display::DisableDisplay()
{
connection.SetENBit(false);
}
void Display::EnableDisplay()
{
connection.SetENBit(true);
}
void Display::ClearScreen()
{
for (uint8_t column = 0; column < ColumnCount; column++)
{
WriteColumn(column, 0, 0);
}
}
void Display::WriteColumn(uint8_t column, uint8_t red, uint8_t blue)
{
WriteBlueColumn(column, blue);
WriteRedColumn(column, red);
}
void Display::WriteBlueColumn(uint8_t column, uint8_t value)
{
if (column < ColumnCount) TransferValue(BluePageOffset + column, value, true);
}
void Display::WriteRedColumn(uint8_t column, uint8_t value)
{
if (column < ColumnCount) TransferValue(RedPageOffset + column, value, true);
}
void Display::SetBrightness(uint8_t brightness)
{
TransferValue(BrightnessSettingAddress, brightness, false);
}
void Display::TransferValue(uint8_t address, uint8_t value, bool isDataTransfer)
{
while (connection.GetBusyBit());
connection.SetCDBit(isDataTransfer);
connection.SetDataBus(value);
connection.SetAddressBus(address);
connection.SetWRBit(true);
connection.SetWRBit(false);
}