Yihui Xiong
/
led_matrix
LED matrix library for http://goo.gl/y6VnO6.
main.cpp@0:43feb8b53696, 2013-11-08 (annotated)
- 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?
User | Revision | Line number | New 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 | } |