#include "ClearCore.h"
#define NUM_ROWS 4
#define NUM_COLUMNS 20
#define baudRate 80000
#define clockPolarity SerialDriver::SCK_HIGH
#define clockPhase SerialDriver::LEAD_CHANGE
#define SpiPort ConnectorCOM0
const uint8_t line1[21] = "abcdefghijklmnopqrst";
const uint8_t line2[21] = "ABCDEFGHIJKLMNOPQRST";
const uint8_t line3[21] = "01234567890123456789";
const uint8_t line4[21] = "98765432109876543210";
void SetBrightness(uint8_t level);
void SetCursor(uint8_t row, uint8_t column);
int main() {
SpiPort.Mode(Connector::SPI);
SpiPort.Speed(baudRate);
SpiPort.DataOrder(SerialDriver::COM_MSB_FIRST);
SpiPort.SpiClock(clockPolarity, clockPhase);
SpiPort.PortOpen();
SetBrightness(4);
SetCursor(0, 0);
SpiPort.SpiSsMode(SerialDriver::LINE_ON);
SpiPort.SpiTransferData(line1, NULL, 20);
SpiPort.SpiTransferData(line3, NULL, 20);
SpiPort.SpiTransferData(line2, NULL, 20);
SpiPort.SpiTransferData(line4, NULL, 20);
SpiPort.SpiSsMode(SerialDriver::LINE_OFF);
}
void SetBrightness(uint8_t level) {
SpiPort.SpiSsMode(SerialDriver::LINE_ON);
SpiPort.SpiTransferData(0xfe);
SpiPort.SpiTransferData(0x53);
SpiPort.SpiTransferData(level);
SpiPort.SpiSsMode(SerialDriver::LINE_OFF);
}
void SetCursor(uint8_t row, uint8_t column) {
if (row >= NUM_ROWS) {
row = 0;
}
if (column >= NUM_COLUMNS) {
column = 0;
}
uint8_t position = row * NUM_COLUMNS + column;
SpiPort.SpiSsMode(SerialDriver::LINE_ON);
SpiPort.SpiTransferData(0xfe);
SpiPort.SpiTransferData(0x45);
SpiPort.SpiTransferData(position);
SpiPort.SpiSsMode(SerialDriver::LINE_OFF);
}