LPC1768 programm for the led matrix.
Dependencies: BufferedSerial DS3231 mbed-rtos mbed
main.cpp
- Committer:
- JOEV
- Date:
- 2016-08-03
- Revision:
- 1:3a39b1439456
- Parent:
- 0:41f9c251097c
- Child:
- 2:d5472e4a55bf
File content as of revision 1:3a39b1439456:
#include <mbed.h> #include <string> #include <ctype.h> //------------------------------------------------------------------------------------------------------ // Analog I/O, Digital I/O, etc. //------------------------------------------------------------------------------------------------------ DigitalOut ds1(p5), oe1(p6), stcp1(p7), shcp1(p8), mr1(p9); AnalogIn ain(p20); Ticker tick; /* DS normal Serial Data Output Schreibt vor ob das LED 0 oder 1 ist. OE invertiert Output-Enable Aktiviert oder deaktiviert die LEDs. SHCP normal Shift register clk Setzt Position mit kurzen Impulsen fest. STCP normal Storage reg. clk Setzt Reihe mit kurzen Impulsen fest. MR invertiert Master reset resetet den Storage. Muss mit STCP angezeigt werden. */ //------------------------------------------------------------------------------------------------------ // Voids & Ticker, Ints, etc. //------------------------------------------------------------------------------------------------------ int a = 0, x, y, z, t, temp, speed=10; int zahl[][8] ={ {255,255,112,56,56,112,255,255}, {255,112,56,56,112,255,255,0}, {112,56,56,112,255,255,0,2}, {56,56,112,255,255,0,2,23}, {56,112,255,255,0,2,23,21}, {112,255,255,0,2,23,21,21}, {255,255,0,2,23,21,21,31}, {255,0,2,23,21,21,31,15}, {0,2,23,21,21,31,15,0}, {2,23,21,21,31,15,0,17}, {23,21,21,31,15,0,17,27}, {21,21,31,15,0,17,27,14}, {21,31,15,0,17,27,14,14}, {31,15,0,17,27,14,14,27}, {15,0,17,27,14,14,27,17}, {0,17,27,14,14,27,17,0}, {17,27,14,14,27,17,0,14}, {27,14,14,27,17,0,14,31}, {14,14,27,17,0,14,31,17}, {14,27,17,0,14,31,17,17}, {27,17,0,14,31,17,17,31}, {17,0,14,31,17,17,31,14}, {0,14,31,17,17,31,14,0}, {14,31,17,17,31,14,0,31}, {31,17,17,31,14,0,31,31}, {17,17,31,14,0,31,31,24}, {17,31,14,0,31,31,24,24}, {31,14,0,31,31,24,24,31}, {14,0,31,31,24,24,31,15}, {0,31,31,24,24,31,15,0}, {31,31,24,24,31,15,0,0}, {31,24,24,31,15,0,0,0}, {24,24,31,15,0,0,0,0}, {24,31,15,0,0,0,0,0}, {31,15,0,0,0,0,0,0}, {15,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,255}, {0,0,0,0,0,0,255,255}, {0,0,0,0,0,255,255,112}, {0,0,0,0,255,255,112,56}, {0,0,0,255,255,112,56,56}, {0,0,255,255,112,56,56,112}, {0,255,255,112,56,56,112,255} }; int const size_y = sizeof(zahl) / sizeof(zahl[0]); int const size_x = sizeof(zahl[0]) / sizeof(zahl[0][0]); bool row_temp[8]; void shift_srg(), reset_srg(), setSpeed(); //, set_srg(bool status_[]); //------------------------------------------------------------------------------------------------------ // Vorgang //------------------------------------------------------------------------------------------------------ /* Zuerst müssen die ersten 8 DS den Wert 1 entsprechen, weil diese für die Kathoden Seite der Matrix ist. Die beiden 74HC595-ICs sind miteinander über dem Q7s und DS verbunden. Was aus dem ersten IC herauskommt, wird beim zweiten als Eingangswert benützt. */ //------------------------------------------------------------------------------------------------------ // Main //------------------------------------------------------------------------------------------------------ int main() { mr1 = 1; oe1 = 0; ds1 = 0; stcp1 = 0; shcp1 = 0; tick.attach(&setSpeed,0.005); reset_srg(); while(1) { for(t = 0; t < speed; t++) { for(z = 0; z < 8; z++) { for(y = 0; y < 8; y++) { row_temp[y] = (zahl[a][z] >> y) & 1; } for(x = 0; x < 8; x++) { if(x == z) { ds1 = 1; } else { ds1 = 0; } shift_srg(); } for(x = 0; x < 8; x++) { ds1 = row_temp[x]; shift_srg(); } stcp1 = 1; wait_ms(0.1); stcp1 = 0; } } a++; if(a == size_y) a = 0; } } // Ende main //------------------------------------------------------------------------------------------------------ // Voids & Floats //------------------------------------------------------------------------------------------------------ void shift_srg() { wait_ms(0.1); // Perioden-Dauer 2ms, später verkürzen shcp1 = 1; wait_ms(0.1); shcp1 = 0; } void reset_srg() { mr1 = 0; wait_ms(0.1); // Reset-Puls 1ms, später verkürzen mr1 = 1; } void setSpeed() { speed = ain * 1000; } /* for(x = 0; x < 16; x++) { switch(x) { // 0-7 = Kathode, 8-15 = Anoden case 7: case 9: case 10: case 11: case 13: case 14: case 15: ds1 = 1; shift_srg(); break; default: ds1 = 0; shift_srg(); break; } }*/