Skip to content

Instantly share code, notes, and snippets.

@lpereira
Created June 12, 2011 16:47
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save lpereira/1021747 to your computer and use it in GitHub Desktop.
Save lpereira/1021747 to your computer and use it in GitHub Desktop.
Interfacing Osram SCDQ5541 dot-matrix display with an Arduino
class SCDQ5541 {
private:
int m_clock, m_data, m_load;
void bitbang(unsigned char code)
{
digitalWrite(m_load, LOW);
for (int i = 0; i < 8; i++) {
digitalWrite(m_clock, LOW);
digitalWrite(m_data, code & 0x01);
digitalWrite(m_clock, HIGH);
code >>= 1;
}
digitalWrite(m_load, HIGH);
}
public:
SCDQ5541(int clock, int data, int load)
: m_clock(clock)
, m_data(data)
, m_load(load) {}
void begin();
void clear();
void sendDigitData(int digit, char *digitData);
void setBrightness(int percent);
void setPowerdownMode(boolean on);
void setLampTest(boolean on);
};
void SCDQ5541::clear()
{
bitbang(0xc0);
}
void SCDQ5541::setBrightness(int percent)
{
bitbang(0xf0 + map(percent, 0, 100, 6, 0));
}
void SCDQ5541::setPowerdownMode(boolean on)
{
if (on)
bitbang(0xff);
else
setBrightness(100);
}
void SCDQ5541::setLampTest(boolean on)
{
if (on)
bitbang(0xf8);
else
clear();
}
void SCDQ5541::begin()
{
pinMode(m_clock, OUTPUT);
pinMode(m_data, OUTPUT);
pinMode(m_load, OUTPUT);
clear();
}
void SCDQ5541::sendDigitData(int digit, char *rowData)
{
if (digit < 0 || digit > 3)
return;
bitbang(0xa0 + digit);
for (int row = 0; row < 5; row++) {
bitbang(rowData[row] | row << 5);
}
}
SCDQ5541 ledMatrix(5, 6, 7);
void setup() {
ledMatrix.begin();
ledMatrix.sendDigitData(0, (char[]){ 0b11111, 0b10001, 0b10001, 0b10001, 0b11111 });
ledMatrix.sendDigitData(1, (char[]){ 0b10001, 0b01010, 0b00100, 0b01010, 0b10001 });
ledMatrix.sendDigitData(2, (char[]){ 0b00100, 0b01010, 0b10001, 0b01010, 0b00100 });
ledMatrix.sendDigitData(3, (char[]){ 0b00100, 0b01010, 0b01010, 0b10001, 0b11111 });
}
void loop() {
static int b = 0;
ledMatrix.setBrightness(b);
b = (b + 5) % 100;
delay(50);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment