
This program is for LB circuit(LED Martix 8 x 8) x 3 with mbed.
Diff: main.cpp
- Revision:
- 0:440d08e0dbbc
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Sep 08 13:20:52 2011 +0000 @@ -0,0 +1,288 @@ +#include "mbed.h" + +DigitalOut myled(LED1); +DigitalOut myled2(LED2); +SPI spi(p5, p6, p7); // mosi, miso, sclk +DigitalOut LEDRSTN(p30); //for Reset(Slot1) +DigitalOut LEDLATCH(p29); //for LATCH(Slot1) +DigitalOut LED2RSTN(p21); //for Reset(Slot2) +DigitalOut LED2LATCH(p22); //for LATCH(Slot2) +DigitalOut LED3RSTN(p23); //for Reset(Slot3) +DigitalOut LED3LATCH(p24); //for LATCH(Slot3) +Ticker flipper; + +//==================== +// Global : LED Array +//==================== +// for each element +// bit1 : Green +// bit0 : Red +int gLED_ARRAY[8][8]; +int gLED2_ARRAY[8][8]; +int gLED3_ARRAY[8][8]; + +void Init_LED_Array(void) +{ + // Setup the spi for 8 bit data, high steady state clock, + // second edge capture, with a 1MHz clock rate + spi.format(8,3); + spi.frequency(100000); + int x=0; + int y=0; + + LEDRSTN = 0; + LED2RSTN = 0; + LED3RSTN = 0; + wait(0.1); + LEDRSTN = 1; + LED2RSTN = 1; + LED3RSTN = 1; + // Clear LED Array Buffer + for (y = 0; y < 8; y++) + { + for (x = 0; x < 8; x++) + { + gLED_ARRAY[y][x] = 0; + gLED2_ARRAY[y][x] = 0; + gLED3_ARRAY[y][x] = 0; + } + } +} + +//================== +// Scan LED Array +//================== +// Caller of TIMER16_0_IRQHandler() +void Scan_LED_Array(void) +{ + static int x = 0,x2=0,x3=0; + int y; + int row,row2,row3; + int col_LED_ARRAY_RED,col_LED_ARRAY_RED2,col_LED_ARRAY_RED3; + int col_LED_ARRAY_GRN,col_LED_ARRAY_GRN2,col_LED_ARRAY_GRN3; + + row = 1 << x; + row2 = 1 <<x2; + row3 = 1 <<x3; + // + col_LED_ARRAY_RED = 0; + col_LED_ARRAY_RED2 = 0; + col_LED_ARRAY_RED3 = 0; + for (y = 0; y < 8; y++) + { + col_LED_ARRAY_RED = col_LED_ARRAY_RED | ((gLED_ARRAY[y][x] & 0x01) << (7 - y)); + col_LED_ARRAY_RED2 = col_LED_ARRAY_RED2 | ((gLED2_ARRAY[y][x2] & 0x01) << (7 - y)); + col_LED_ARRAY_RED3 = col_LED_ARRAY_RED3 | ((gLED3_ARRAY[y][x3] & 0x01) << (7 - y)); + } + // + col_LED_ARRAY_GRN = 0; + col_LED_ARRAY_GRN2 = 0; + col_LED_ARRAY_GRN3 = 0; + for (y = 0; y < 8; y++) + { + col_LED_ARRAY_GRN = col_LED_ARRAY_GRN | (((gLED_ARRAY[y][x] & 0x02) >> 1) << (7 - y)); + col_LED_ARRAY_GRN2 = col_LED_ARRAY_GRN2 | (((gLED2_ARRAY[y][x] & 0x02) >> 1) << (7 - y)); + col_LED_ARRAY_GRN3 = col_LED_ARRAY_GRN3 | (((gLED3_ARRAY[y][x] & 0x02) >> 1) << (7 - y)); + } + // + spi.write(row); + spi.write(col_LED_ARRAY_RED); + spi.write(col_LED_ARRAY_GRN); + + // + LEDLATCH=1; // high + LEDLATCH=0; // low (latch) + // + spi.write(row2); + spi.write(col_LED_ARRAY_RED2); + spi.write(col_LED_ARRAY_GRN2); + // + LED2LATCH=1; + LED2LATCH=0; + // + spi.write(row3); + spi.write(col_LED_ARRAY_RED3); + spi.write(col_LED_ARRAY_GRN3); + // + LED3LATCH=1; + LED3LATCH=0; + + x = (x + 1) & 0x07; + x2 = (x2+1) & 0x07; + x3 = (x3+1) & 0x07; +} + +//=================== +// Set LED Array +//=================== +void Set_LED_Array(int x, int y, int color) +{ + gLED_ARRAY[y][x] = color; +} + +void Set_LED2_Array(int x, int y, int color) +{ + gLED2_ARRAY[y][x] = color; +} + +void Set_LED3_Array(int x, int y, int color) +{ + gLED3_ARRAY[y][x] = color; +} + + +//Interrupt Handler +void scanLED(void) +{ + Scan_LED_Array(); +} + + +int main() { + Init_LED_Array(); + flipper.attach(&scanLED,0.001); + while(1) { + myled = 1; + myled2=0; + Set_LED_Array(5,0,0x01); + Set_LED_Array(2,1,0x01); + Set_LED_Array(3,1,0x01); + Set_LED_Array(4,1,0x01); + Set_LED_Array(5,1,0x01); + Set_LED_Array(6,1,0x01); + Set_LED_Array(7,1,0x01); + Set_LED_Array(5,2,0x01); + Set_LED_Array(3,3,0x01); + Set_LED_Array(4,3,0x01); + Set_LED_Array(5,3,0x01); + Set_LED_Array(6,3,0x01); + Set_LED_Array(7,3,0x01); + Set_LED_Array(5,4,0x01); + Set_LED_Array(2,5,0x01); + Set_LED_Array(3,5,0x01); + Set_LED_Array(4,5,0x01); + Set_LED_Array(5,5,0x01); + Set_LED_Array(1,6,0x01); + Set_LED_Array(5,6,0x01); + Set_LED_Array(6,6,0x01); + Set_LED_Array(2,7,0x01); + Set_LED_Array(3,7,0x01); + Set_LED_Array(4,7,0x01); + Set_LED_Array(7,7,0x01); + Set_LED2_Array(1,3,0x01); + Set_LED2_Array(2,3,0x01); + Set_LED2_Array(3,3,0x01); + Set_LED2_Array(4,3,0x01); + Set_LED2_Array(5,3,0x01); + Set_LED2_Array(6,4,0x01); + Set_LED2_Array(6,5,0x01); + Set_LED2_Array(6,6,0x01); + Set_LED2_Array(3,7,0x01); + Set_LED2_Array(4,7,0x01); + Set_LED2_Array(5,7,0x01); + Set_LED3_Array(5,0,0x01); + Set_LED3_Array(4,1,0x01); + Set_LED3_Array(3,2,0x01); + Set_LED3_Array(2,3,0x01); + Set_LED3_Array(2,4,0x01); + Set_LED3_Array(3,5,0x01); + Set_LED3_Array(4,6,0x01); + Set_LED3_Array(5,7,0x01); + wait(1.5); + myled = 0; + myled2=1; + Set_LED_Array(5,0,0x02); + Set_LED_Array(2,1,0x02); + Set_LED_Array(3,1,0x02); + Set_LED_Array(4,1,0x02); + Set_LED_Array(5,1,0x02); + Set_LED_Array(6,1,0x02); + Set_LED_Array(7,1,0x02); + Set_LED_Array(5,2,0x02); + Set_LED_Array(3,3,0x02); + Set_LED_Array(4,3,0x02); + Set_LED_Array(5,3,0x02); + Set_LED_Array(6,3,0x02); + Set_LED_Array(7,3,0x02); + Set_LED_Array(5,4,0x02); + Set_LED_Array(2,5,0x02); + Set_LED_Array(3,5,0x02); + Set_LED_Array(4,5,0x02); + Set_LED_Array(5,5,0x02); + Set_LED_Array(1,6,0x02); + Set_LED_Array(5,6,0x02); + Set_LED_Array(6,6,0x02); + Set_LED_Array(2,7,0x02); + Set_LED_Array(3,7,0x02); + Set_LED_Array(4,7,0x02); + Set_LED_Array(7,7,0x02); + Set_LED2_Array(1,3,0x02); + Set_LED2_Array(2,3,0x02); + Set_LED2_Array(3,3,0x02); + Set_LED2_Array(4,3,0x02); + Set_LED2_Array(5,3,0x02); + Set_LED2_Array(6,4,0x02); + Set_LED2_Array(6,5,0x02); + Set_LED2_Array(6,6,0x02); + Set_LED2_Array(3,7,0x02); + Set_LED2_Array(4,7,0x02); + Set_LED2_Array(5,7,0x02); + Set_LED3_Array(5,0,0x02); + Set_LED3_Array(4,1,0x02); + Set_LED3_Array(3,2,0x02); + Set_LED3_Array(2,3,0x02); + Set_LED3_Array(2,4,0x02); + Set_LED3_Array(3,5,0x02); + Set_LED3_Array(4,6,0x02); + Set_LED3_Array(5,7,0x02); + wait(1.5); + myled = 1; + myled2=1; + Set_LED_Array(5,0,0x03); + Set_LED_Array(2,1,0x03); + Set_LED_Array(3,1,0x03); + Set_LED_Array(4,1,0x03); + Set_LED_Array(5,1,0x03); + Set_LED_Array(6,1,0x03); + Set_LED_Array(7,1,0x03); + Set_LED_Array(5,2,0x03); + Set_LED_Array(3,3,0x03); + Set_LED_Array(4,3,0x03); + Set_LED_Array(5,3,0x03); + Set_LED_Array(6,3,0x03); + Set_LED_Array(7,3,0x03); + Set_LED_Array(5,4,0x03); + Set_LED_Array(2,5,0x03); + Set_LED_Array(3,5,0x03); + Set_LED_Array(4,5,0x03); + Set_LED_Array(5,5,0x03); + Set_LED_Array(1,6,0x03); + Set_LED_Array(5,6,0x03); + Set_LED_Array(6,6,0x03); + Set_LED_Array(2,7,0x03); + Set_LED_Array(3,7,0x03); + Set_LED_Array(4,7,0x03); + Set_LED_Array(7,7,0x03); + Set_LED2_Array(1,3,0x03); + Set_LED2_Array(2,3,0x03); + Set_LED2_Array(3,3,0x03); + Set_LED2_Array(4,3,0x03); + Set_LED2_Array(5,3,0x03); + Set_LED2_Array(6,4,0x03); + Set_LED2_Array(6,5,0x03); + Set_LED2_Array(6,6,0x03); + Set_LED2_Array(3,7,0x03); + Set_LED2_Array(4,7,0x03); + Set_LED2_Array(5,7,0x03); + Set_LED3_Array(5,0,0x03); + Set_LED3_Array(4,1,0x03); + Set_LED3_Array(3,2,0x03); + Set_LED3_Array(2,3,0x03); + Set_LED3_Array(2,4,0x03); + Set_LED3_Array(3,5,0x03); + Set_LED3_Array(4,6,0x03); + Set_LED3_Array(5,7,0x03); + wait(1.5); + + } +}