Matrix driver for HDSP-200x four character 5x7 alphanumeric displays. These are 12 pin DIL package ICs full of LEDs arranged in 4 characters of 5 columns & 7 rows each. The ones I have are the yellow HDSP-2001, but they are also available in red (HDSP-2000), high efficiency red (HDSP-2002) or green (HDSP 2003). I don't know if they are easily available anymore, but I thought, since I've got 30 or so, I'd have a go at programming them. See my notepad (http://mbed.org/users/tonymudd/notebook/led-matrix-display/) for videos of this working.
Dependents: alpha_message TP1_matriz
matrixDisplay.cpp
- Committer:
- tonymudd
- Date:
- 2011-06-15
- Revision:
- 0:69eeea586a16
File content as of revision 0:69eeea586a16:
#include "mbed.h" #include "matrixDisplay.h" #include "matrix.h" #include <string> matrixDisplay::matrixDisplay( float scrollRate, PinName clockPinIn, PinName dataPinIn, PinName col1, PinName col2, PinName col3, PinName col4, PinName col5) { clockPin = new DigitalOut(clockPinIn); dataPin = new DigitalOut(dataPinIn); columnsBus = new BusOut(col1, col2, col3, col4, col5); column = 0; whereInMessage = 0; message = NULL; // clear the text array. for (int i =0 ; i < numOfChars; i++) text[i] = ' '; loadDisplay(); colTick.attach_us(this, &matrixDisplay::colChange, 5000); scroll.attach(this, &matrixDisplay::scrollMessage, scrollRate); } matrixDisplay::~matrixDisplay() { stop(); } // Stop displaying stuff. void matrixDisplay::stop() { colTick.detach(); scroll.detach(); columnsBus->write( 0); } // load a new message // keeps a pointer to it, so bad things could happen. void matrixDisplay::setMessage(char * newMessage) { for (int i =0 ; i < numOfChars; i++) text[i] = ' '; message = newMessage; whereInMessage = 0; } void matrixDisplay::outputCol(int colNum) // colNum is 0-4 { for (int i = 0; i< numOfLeds; i++) // once for each bool in the "display" which has already been set up { clockPin->write(1); if (display[colNum][i]) dataPin->write(1); else dataPin->write(0); clockPin->write(0); } } void matrixDisplay::colChange() { columnsBus->write( 0); column ++; if (column > 4) column = 0; outputCol(column); columnsBus->write (1 << column); // columns is a bit pattern } // turns the contents of "text" into the bit pattern in "display" void matrixDisplay::loadDisplay() { for (int i =0;i < numOfChars; i ++) // for each char in text { char c = text[i]; c -= 32; // index an array starting at 0 for char ' ' (space) for (int led = 0; led < numOfRows; led++) // for each led in the column, done this way round because that's the way it's stored in matrix.h { int bits = char_data[c][led]; for (int col = 0; col < numOfColumns; col++) // for each column { display[col][led+i*numOfRows] = (bits & 1<< col); } } } } void matrixDisplay::scrollMessage() { if (message == NULL) // It may not have been set yet. return; if (whereInMessage >= strlen(message)) whereInMessage =0; for (int i=1;i<numOfChars;i++) { text[i-1] = text[i]; } text[numOfChars-1] = message[whereInMessage]; loadDisplay(); whereInMessage ++; }