LED matrix library for http://goo.gl/y6VnO6.

Dependencies:   LEDMatrix mbed

Committer:
yihui
Date:
Fri Nov 08 06:51:49 2013 +0000
Revision:
0:43feb8b53696
LED matrix display using http://goo.gl/y6VnO6.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yihui 0:43feb8b53696 1 /**
yihui 0:43feb8b53696 2 * LED Matrix library for http://www.seeedstudio.com/depot/ultrathin-16x32-red-led-matrix-panel-p-1582.html
yihui 0:43feb8b53696 3 * The LED Matrix panel has 32x16 pixels. Several panel can be combined together as a large screen.
yihui 0:43feb8b53696 4 *
yihui 0:43feb8b53696 5 * Coordinate & Connection (mbed -> panel 0 -> panel 1 -> ...)
yihui 0:43feb8b53696 6 * (0, 0) (0, 0)
yihui 0:43feb8b53696 7 * +--------+--------+--------+ +--------+--------+
yihui 0:43feb8b53696 8 * | 5 | 3 | 1 | | 1 | 0 |
yihui 0:43feb8b53696 9 * | | | | | | |<----- mbed
yihui 0:43feb8b53696 10 * +--------+--------+--------+ +--------+--------+
yihui 0:43feb8b53696 11 * | 4 | 2 | 0 | (64, 16)
yihui 0:43feb8b53696 12 * | | | |<----- mbed
yihui 0:43feb8b53696 13 * +--------+--------+--------+
yihui 0:43feb8b53696 14 * (96, 32)
yihui 0:43feb8b53696 15 *
yihui 0:43feb8b53696 16 */
yihui 0:43feb8b53696 17
yihui 0:43feb8b53696 18 #include "mbed.h"
yihui 0:43feb8b53696 19 #include "LEDMatrix.h"
yihui 0:43feb8b53696 20
yihui 0:43feb8b53696 21 #define WIDTH 64
yihui 0:43feb8b53696 22 #define HEIGHT 16
yihui 0:43feb8b53696 23
yihui 0:43feb8b53696 24 BusOut leds(LED1, LED2, LED3, LED4);
yihui 0:43feb8b53696 25
yihui 0:43feb8b53696 26 // LEDMatrix(a, b, c, d, oe, r1, stb, clk);
yihui 0:43feb8b53696 27 LEDMatrix matrix(P1_18, P1_24, P1_25, P1_5, P1_26, P1_27, P0_2, P1_29);
yihui 0:43feb8b53696 28 Ticker scanner;
yihui 0:43feb8b53696 29
yihui 0:43feb8b53696 30 // Display Buffer 128 = 64 * 16 / 8
yihui 0:43feb8b53696 31 uint8_t displaybuf[WIDTH *HEIGHT / 8] = {
yihui 0:43feb8b53696 32 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
yihui 0:43feb8b53696 33 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60,
yihui 0:43feb8b53696 34 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0xE0, 0x07, 0x8F, 0xC7, 0xC7, 0xC7, 0xE0,
yihui 0:43feb8b53696 35 0x00, 0x40, 0x0C, 0xCE, 0x6C, 0x6C, 0x6C, 0xE0, 0x00, 0xE0, 0x0C, 0x0C, 0x6C, 0x6C, 0x6C, 0x60,
yihui 0:43feb8b53696 36 0x01, 0xF0, 0x07, 0x8C, 0x6F, 0xEF, 0xEC, 0x60, 0x23, 0xF8, 0x00, 0xCC, 0x6C, 0x0C, 0x0C, 0x60,
yihui 0:43feb8b53696 37 0x33, 0xF8, 0x0C, 0xCE, 0x6C, 0x6C, 0x6C, 0xE0, 0x3B, 0xF8, 0x07, 0x8F, 0xC7, 0xC7, 0xC7, 0xE0,
yihui 0:43feb8b53696 38 0x3B, 0xF8, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x1B, 0xF8, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00,
yihui 0:43feb8b53696 39 0x0B, 0xF8, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
yihui 0:43feb8b53696 40 };
yihui 0:43feb8b53696 41
yihui 0:43feb8b53696 42 // 16 * 8 digital font
yihui 0:43feb8b53696 43 const uint8_t digitals[] = {
yihui 0:43feb8b53696 44 0x00, 0x1C, 0x36, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x36, 0x1C, 0x00, 0x00, 0x00, 0x00, // 0
yihui 0:43feb8b53696 45 0x00, 0x18, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00, 0x00, 0x00, 0x00, // 1
yihui 0:43feb8b53696 46 0x00, 0x3E, 0x63, 0x63, 0x63, 0x06, 0x06, 0x0C, 0x18, 0x30, 0x63, 0x7F, 0x00, 0x00, 0x00, 0x00, // 2
yihui 0:43feb8b53696 47 0x00, 0x3E, 0x63, 0x63, 0x06, 0x1C, 0x06, 0x03, 0x03, 0x63, 0x66, 0x3C, 0x00, 0x00, 0x00, 0x00, // 3
yihui 0:43feb8b53696 48 0x00, 0x06, 0x0E, 0x1E, 0x36, 0x36, 0x66, 0x66, 0x7F, 0x06, 0x06, 0x1F, 0x00, 0x00, 0x00, 0x00, // 4
yihui 0:43feb8b53696 49 0x00, 0x7F, 0x60, 0x60, 0x60, 0x7C, 0x76, 0x03, 0x03, 0x63, 0x66, 0x3C, 0x00, 0x00, 0x00, 0x00, // 5
yihui 0:43feb8b53696 50 0x00, 0x1E, 0x36, 0x60, 0x60, 0x7C, 0x76, 0x63, 0x63, 0x63, 0x36, 0x1C, 0x00, 0x00, 0x00, 0x00, // 6
yihui 0:43feb8b53696 51 0x00, 0x7F, 0x66, 0x66, 0x0C, 0x0C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, // 7
yihui 0:43feb8b53696 52 0x00, 0x3E, 0x63, 0x63, 0x63, 0x36, 0x1C, 0x36, 0x63, 0x63, 0x63, 0x3E, 0x00, 0x00, 0x00, 0x00, // 8
yihui 0:43feb8b53696 53 0x00, 0x1C, 0x36, 0x63, 0x63, 0x63, 0x37, 0x1F, 0x03, 0x03, 0x36, 0x3C, 0x00, 0x00, 0x00, 0x00, // 9
yihui 0:43feb8b53696 54 };
yihui 0:43feb8b53696 55
yihui 0:43feb8b53696 56 // (x, y) top-left position, x should be multiple of 8
yihui 0:43feb8b53696 57 void drawDigital(uint16_t x, uint16_t y, uint8_t n)
yihui 0:43feb8b53696 58 {
yihui 0:43feb8b53696 59 if ((n >= 10) || (0 != (x % 8))) {
yihui 0:43feb8b53696 60 return;
yihui 0:43feb8b53696 61 }
yihui 0:43feb8b53696 62
yihui 0:43feb8b53696 63 uint8_t *pDst = displaybuf + y * (WIDTH / 8) + x / 8;
yihui 0:43feb8b53696 64 const uint8_t *pSrc = digitals + n * 16;
yihui 0:43feb8b53696 65 for (uint8_t i = 0; i < 16; i++) {
yihui 0:43feb8b53696 66 *pDst = *pSrc;
yihui 0:43feb8b53696 67 pDst += WIDTH / 8;
yihui 0:43feb8b53696 68 pSrc++;
yihui 0:43feb8b53696 69 }
yihui 0:43feb8b53696 70 }
yihui 0:43feb8b53696 71
yihui 0:43feb8b53696 72
yihui 0:43feb8b53696 73 void scan()
yihui 0:43feb8b53696 74 {
yihui 0:43feb8b53696 75 matrix.scan();
yihui 0:43feb8b53696 76 }
yihui 0:43feb8b53696 77
yihui 0:43feb8b53696 78 int main() {
yihui 0:43feb8b53696 79 matrix.begin(displaybuf, WIDTH, HEIGHT);
yihui 0:43feb8b53696 80 scanner.attach(scan, 0.001);
yihui 0:43feb8b53696 81
yihui 0:43feb8b53696 82 wait(3);
yihui 0:43feb8b53696 83 matrix.clear();
yihui 0:43feb8b53696 84
yihui 0:43feb8b53696 85 uint8_t count = 0;
yihui 0:43feb8b53696 86 while(1) {
yihui 0:43feb8b53696 87 drawDigital(40, 0, count);
yihui 0:43feb8b53696 88
yihui 0:43feb8b53696 89 leds = ~count;
yihui 0:43feb8b53696 90 wait(1);
yihui 0:43feb8b53696 91 count = (count + 1) & 0x7;
yihui 0:43feb8b53696 92
yihui 0:43feb8b53696 93 }
yihui 0:43feb8b53696 94 }