1 | |
---|
2 | |
---|
3 | //TM 1638 LED & Key. "Manuelles" Einlesen der Ziffern mit shiftOut, (von Dominik + Victor) |
---|
4 | |
---|
5 | const int stb = 7; // Strobe |
---|
6 | const int clk = 9; // Clock |
---|
7 | const int dio = 8; // Data |
---|
8 | |
---|
9 | const byte NUMBER_FONT[] = { |
---|
10 | 0b00111111, // 0 |
---|
11 | 0b00000110, // 1 |
---|
12 | 0b01011011, // 2 |
---|
13 | 0b01001111, // 3 |
---|
14 | 0b01100110, // 4 |
---|
15 | 0b01101101, // 5 |
---|
16 | 0b01111101, // 6 |
---|
17 | 0b00000111, // 7 |
---|
18 | 0b01111111, // 8 |
---|
19 | 0b01101111 // 9 |
---|
20 | }; |
---|
21 | |
---|
22 | void setup() { |
---|
23 | |
---|
24 | pinMode(stb, OUTPUT); |
---|
25 | pinMode(clk, OUTPUT); |
---|
26 | pinMode(dio, OUTPUT); |
---|
27 | |
---|
28 | digitalWrite(stb, LOW); |
---|
29 | |
---|
30 | shiftOut(dio, clk, LSBFIRST, 0b10001111); //Command-Byte (erstes Byte) |
---|
31 | |
---|
32 | clearLn(); // loeschen des Displays, ausgelagerte Methode |
---|
33 | |
---|
34 | printZi(7,0,0); // Daten einlesen, ausgelagerte Methode, s.u. |
---|
35 | printZi(3,0,1); |
---|
36 | printZi(4,1,0); // hier wird z.B. die Zahl 734.12 eingegeben und ueber der 3 sowie 1 |
---|
37 | printZi(1,0,1); // wird die LED eingeschaltet |
---|
38 | printZi(2,0,0); |
---|
39 | |
---|
40 | digitalWrite(stb, HIGH); //uebernimmt Daten aus dem Schieberegister zur Anzeige |
---|
41 | } |
---|
42 | |
---|
43 | void loop() { |
---|
44 | |
---|
45 | } |
---|
46 | |
---|
47 | void clearLn() { // loescht das Display und die LEDs |
---|
48 | for(int i = 0;i<8;i++){ |
---|
49 | shiftOut(dio, clk, LSBFIRST, 0b00000000); |
---|
50 | shiftOut(dio, clk, LSBFIRST, 0b10000000); |
---|
51 | } |
---|
52 | |
---|
53 | } |
---|
54 | |
---|
55 | void printZi(int number, int point, int led) { // setzt Ziffer, Punkt und LED über der Ziffer |
---|
56 | byte byte2 = NUMBER_FONT[number]; // liest Byte der gewuenschten Nummer aus dem Array |
---|
57 | |
---|
58 | if (point==1){ // setzt bei Bedarf das Bit fuer den Dezimalpunkt auf 1 |
---|
59 | bitSet(byte2,7); // hier wird im NUMBER-FONT das 8. Bit (Array-Index=7) gesetzt, falls an dieser |
---|
60 | } // Stelle ein Dezimalpunkt erscheinen soll |
---|
61 | |
---|
62 | shiftOut(dio, clk, LSBFIRST, byte2); // gibt die Ziffer an das Modul(und evtl. den Punkt) |
---|
63 | if (led==1){ |
---|
64 | shiftOut(dio, clk, LSBFIRST, 0b10000001); // drittes Byte setzt die LED ueber der Ziffer AN oder AUS |
---|
65 | }else{ |
---|
66 | shiftOut(dio, clk, LSBFIRST, 0b10000000); |
---|
67 | } |
---|
68 | } |
---|
69 | |
---|
70 | |
---|