7Segment.c


1
// Einbinden der Header-Datei
2
#include "T89C51CC03.H" /* für Atmel AT80C51CC03 */
3
4
5
// **** Hauptprogramm ****
6
int main (void)
7
{
8
  unsigned char Eingangsbyte;       /* Datenbyte zur Eingabe über Port P0 */
9
  unsigned char Ausgangsbyte;        /* Datenbyte zur Ausgabe auf Port P2 */
10
  unsigned char Zahl;             
11
  unsigned char Maskenbyte = 0x0F;     /* Maskenbyte fuer ausgeblendete Portbits */
12
  unsigned char Maskenbit = 0x80;      /* Maskenbyte fuer das LSB
13
  /* look-up-table fuer Codetabelle mit 10 Elementen mit Initialisierung */
14
  unsigned char Codetabelle [10] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
15
  unsigned char *Index_Tabelle; /* Deklaration eines Pointers */
16
  unsigned char n;
17
18
  P0 = 0xFF;
19
  P1 = 0x00;
20
  P2 = 0x00;
21
  
22
  while (1) /* Endlosschleife */
23
  {
24
    /* Einlesen des Prozessabbildes der Eingaenge von Port P4 */
25
    Eingangsbyte = P0;
26
    Eingangsbyte = Eingangsbyte & Maskenbyte;
27
    
28
    /* Beginn des Steuerprogramms */
29
30
    /* Pointer "Index_Tabelle" zeigt auf das erste Element der Codetabelle */
31
    Index_Tabelle = &Codetabelle[0];
32
    /* Auswaehlen des zugehoerigen Elements der Codetabelle */
33
    /* Cast-Operator zur Umwandlung der char-Variable in die int-Variable für Pointer */
34
    Zahl = *(Index_Tabelle + Eingangsbyte);
35
    Ausgangsbyte = Zahl;
36
37
    for(n=0;n<7;n++)
38
    {
39
       if (Zahl & Maskenbit)
40
       {
41
         P1_1 = 1;
42
         P1_0 = 1;
43
         P1_0 = 0;
44
       }
45
       else
46
       {
47
         P1_1 = 0;
48
         P1_0 = 1;
49
         P1_0 = 0;
50
       }
51
      Zahl = Zahl << 1;
52
      P1_1 = 0;
53
    }
54
    P1_2 = 1;
55
    P1_2 = 0;
56
57
    for(n=0;n<7;n++)
58
    {
59
       P1_1 = 0;
60
       P1_0 = 1;
61
       P1_0 = 0;
62
    }
63
    P1_2 = 1;
64
    P1_2 = 0;
65
    P2 = Ausgangsbyte;
66
  }
67
return 0;
68
}