MAX7219.h


1
///=======================================================================================
2
//***************************************************************************************
3
//=======================================================================================
4
//  Das ist die Header datei um den IC Max7219 zu Initialisieren
5
//  ohne die Initialisierung könnte man den IC nicht Ansteuern
6
//=======================================================================================
7
//***************************************************************************************
8
//=======================================================================================
9
10
//=======================================================================================
11
// Schieben
12
//=======================================================================================
13
14
void leer(unsigned char);
15
16
delay(int zeit)
17
{
18
  int i,j;
19
  for(i=0;i<zeit;i++)
20
  {
21
    for(j=0;j<50;j++)
22
    {
23
    }
24
  }
25
26
}
27
28
void load()
29
{
30
   P2 = 0x00;
31
  delay(2);
32
    P2 = 0x04;
33
   delay(2);
34
     P2 = 0x00;
35
}
36
37
38
void takten (int zahl)
39
{
40
   int i;
41
  
42
   
43
   for ( i=15; i>=0; i--)
44
   {
45
      P2 = (zahl >> i) & 0x01; 
46
      P2 = ((zahl >> i) & 0x01) | 0x02;
47
    delay(2);
48
      P2 = (zahl >> i) & 0x01; 
49
    
50
   }
51
   
52
53
54
  
55
}
56
57
void schieben(int zahl)
58
{
59
  takten(zahl);
60
  load();
61
}
62
63
//=======================================================================================
64
// IC MAX7219 initialisieren
65
//=======================================================================================
66
67
void init7219(unsigned char anzahl)
68
{
69
  int i,j;  
70
  int ausgabe[5]= {0x0a0f,0x0b07,0xc01,0x0f00,0x0900};
71
/*
72
  takten (0x0a0f);    // Intensity  0 bis f
73
     takten (0x0b07);    // scan limit, 8 digits aktiv
74
     takten (0x0c01);    // shutdown nicht aktiv
75
     takten (0x0f00);    // Display-Test ausgeschaltet 
76
     takten (0x0900);    // decode mode, BCD für alle digits
77
*/
78
79
  for(j=0;j<5;j++)
80
  {
81
    for(i=0;i<anzahl;i++)
82
    {
83
      takten(ausgabe[j]);
84
    }
85
     load();
86
   }
87
88
  leer(anzahl);
89
     
90
}
91
92
93
void leer(unsigned char anzahl)
94
{
95
  int i,j;  
96
  for(j=0x0100;j<0x0900;j=j+0x0100)
97
  /*
98
  schieben (0x0100);    // alle Digits löschen
99
  schieben (0x0200);      
100
   schieben (0x0300);      
101
  schieben (0x0400);      
102
  schieben (0x0500);      
103
  schieben (0x0600);      
104
  schieben (0x0700);      
105
  schieben (0x0800);
106
   */
107
  {
108
    for(i=0;i<anzahl;i++)
109
    {
110
      takten(j);
111
    }
112
     load();
113
   }  
114
115
116
   
117
}
118
119
void ausgabe(unsigned char charakter)
120
{
121
//***************************************************************************************
122
//=======================================================================================
123
//  Hier wird die Zeichensatz ASCII-Zeichen  definiert
124
//=======================================================================================
125
//***************************************************************************************
126
127
unsigned char code  zeichen[][9] = {             // Zeichensatz ASCII-Zeichen ab 32(dez.)
128
129
//=======================================================================================
130
//***************************************************************************************
131
  
132
  {'W',0xfe,0xff,0x03,0x1f,0x1f,0x03,0xff,0xfe},  //     W am Modul
133
  {'S',0xce,0xdf,0xdb,0xdb,0xdb,0xdb,0xfb,0x73},   //     S am Modul
134
  {'H',0xff,0xff,0x18,0x18,0x18,0x18,0xff,0xff},  //     H am Modul
135
  {'Y',0x00,0xf0,0xf8,0x0f,0x0f,0xf8,0xf8,0x00},  //     Y am Modul
136
  {'B',0x00,0x66,0x99,0x99,0x99,0x99,0xff,0xff},  //     B am Modul
137
  {'d',0x00,0x7e,0x09,0x09,0x09,0x09,0x06,0x00},  //     d am Modul
138
  {'0',0x00,0x3c,0x62,0x91,0x89,0x46,0x3c,0x00},  //     Zahl 0 am Modul
139
  {'1',0x00,0x00,0x00,0xff,0xff,0x70,0x30,0x00},  //     Zahl 1 am Modul
140
  {'2',0x00,0x63,0xf3,0xdb,0xcf,0xc7,0x63,0x00},  //     Zahl 2 am Modul
141
  {'3',0x00,0x7e,0xff,0xdb,0xdb,0xdb,0xc3,0x00},  //     Zahl 3 am Modul
142
  {'4',0x0c,0xff,0xff,0xcc,0x6c,0x3c,0x1c,0x00},  //     Zahl 4 am Modul
143
  {'5',0x00,0xdf,0xdf,0xdb,0xdb,0xdb,0xfb,0x00},  //     Zahl 5 am Modul
144
  {'6',0x00,0xdf,0xdf,0xdb,0xdb,0xdf,0xff,0x00},  //     Zahl 6 am Modul
145
  {'7',0x00,0xe0,0xf8,0xdc,0xc7,0xc3,0xc0,0x00},  //     Zahl 7 am Modul
146
  {'8',0x00,0x6e,0x91,0x91,0x91,0x91,0x6e,0x00},  //     Zahl 8 am Modul
147
  {'9',0x00,0x6e,0x91,0x91,0x91,0x91,0x60,0x00},  //     Zahl 9 am Modul
148
  {'+',0x00,0x64,0x62,0x09,0x09,0x62,0x64,0x00},  //     Smilie lachend
149
  {'-',0x00,0x62,0x62,0x0a,0x0a,0x62,0x62,0x00},  //     Smilie nicht Lachend
150
  {'/',0x00,0x61,0x62,0x0a,0x0a,0x62,0x61,0x00},  //     Smilie Sauer
151
  {'&',0x00,0x09,0x04,0x6a,0x91,0x69,0x06,0x00},  //     &
152
  {'c',0x3c,0x42,0x81,0xa5,0xa5,0x49,0x42,0x3c},  //     Copyright Zeichen
153
  {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff},  //     alle LED an
154
  {' ',0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},  //     Löschen
155
156
  };
157
158
//=======================================================================================
159
//***************************************************************************************
160
//  Für unseren Projekt brauchen wir den Kompletten Zahlen Zeichensatz und
161
//  bestimmte Buchstaben um den WHS Logo, Schallpegel [dB] und unsere Initiale zu
162
//  Simulieren.
163
//=======================================================================================
164
//***************************************************************************************
165
166
//=======================================================================================
167
//  Unterprogramm für die Ausgabe am LED Modul
168
//=======================================================================================
169
  int g;
170
  g=0;
171
  
172
  
173
  while(zeichen[g][0]!=charakter)
174
  {
175
  g++  ;
176
  
177
  
178
  }
179
180
  schieben(0x0100 + zeichen[g][1]);
181
  schieben(0x0200 + zeichen[g][2]);
182
  schieben(0x0300 + zeichen[g][3]);
183
  schieben(0x0400 + zeichen[g][4]);
184
  schieben(0x0500 + zeichen[g][5]);
185
  schieben(0x0600 + zeichen[g][6]);
186
  schieben(0x0700 + zeichen[g][7]);
187
  schieben(0x0800 + zeichen[g][8]);
188
  
189
    
190
  
191
}