Koordinatengrafik mit Java
HomeAufgabenDruckenJava-Online

Digitalanzeige


Eine Digitalanzeige wird mit 7 Segmenten realisiert, die ein- oder ausgeschaltet sind.

Im ersten Beispiel werden die Ziffern 0 bis 9 nacheinander angezeigt.

 
// DigitalAnzeige.java

import ch.aplu.util.*;

public class DigitalAnzeige
{
  public DigitalAnzeige()
  {
    GPanel p = new GPanel(01000100);
    Display display = new Display(352060, p);

    while (true)
    {
      for(int i = 0; i < 10; i++)
      {
        p.clear();
        display.showDigit(i);
        Console.delay(1000);
      }
    }
  }
  public static void main(String[] args)
  {
    new DigitalAnzeige();
  }
}

class Display
{
  private GPanel p;
  private Segment segment = new Segment();
  private double x;      //linke untere Ecke der Ziffer
  private double y;
  private double h ;     //Höhe der Ziffer
  private double w ;     //Breite
  private double d ;     //Abstand zwischen Linien mit gleichem Eckpunkt

  private boolean [] d0 = {truetruetruetruetruetruefalse};
  private boolean [] d1 = {falsetruetruefalsefalsefalsefalse};
  private boolean [] d2 = {truefalsetruetruefalsetruetrue};
  private boolean [] d3 = {truetruetruetruefalsefalsetrue};
  private boolean [] d4 = {falsetruetruefalsetruefalsetrue};
  private boolean [] d5 = {truetruefalsetruetruefalsetrue};
  private boolean [] d6 = {truetruefalsetruetruetruetrue};
  private boolean [] d7 = {falsetruetruetruefalsefalsefalse};
  private boolean [] d8 = {truetruetruetruetruetruetrue};
  private boolean [] d9 = {truetruetruetruetruefalsetrue};
  private boolean [][] digits = {d0,d1,d2,d3,d4,d5,d6,d7,d8,d9};  //d0 ist die 1-te Zeile von digits

  private class Segment
  {
    public void draw(double x, double y, boolean horizontal){
      if (horizontal)
        p.line(+ d, y,  x + w - d,  y);
      else
        p.line(x, y + d, x, y + h/2 - d);
    }
  }

  public Display(double xPos, double yPos, double hight, GPanel apanel)
  {
     p = apanel;
     x = xPos;
     y = yPos;
     h = hight;
     w = h / 2;
     d = h / 30;
     p.lineWidth(10);
  }

  public void showDigit(int value)
  {
    if (digits[value][0])
      segment.draw(x, y, true);
    if (digits[value][1])
      segment.draw(+ w, y, false);
    if (digits[value][2])
      segment.draw(+ w, y + h/2false);
    if (digits[value][3])
     segment.draw(x, y + h, true);
    if (digits[value][4])
      segment.draw(x, y + h/2false);
    if (digits[value][5])
      segment.draw(x, y, false);
    if (digits[value][6])
      segment.draw(x, y + h/2true);
  }
}
 

 

Zweistellige Digitalanzeige

Die Applikation lässt sich sehr einfach zu einer zweistelligen Anzeige erweitern. Dabei wird dieselbe Klasse Display wie im ersten Beispiel verwendet.

 

// DigitalAnzeigeEx2.java

import ch.aplu.util.*;

public class DigitalAnzeigeEx
{
  public DigitalAnzeigeEx2()
  {
    GPanel p = new GPanel(01000100);
    Display display1 = new Display(152060, p);
    Display display2 = new Display(552060, p);

    p.enableRepaint( false );

    while (true)
    {
      for(int i = 0; i < 10; i++)
      {
        for(int j = 0; j < 10; j++)
        {
           p.clear();
           display1.showDigit(i);
           display2.showDigit(j);
           p.repaint();
           Console.delay(250);
        }
      }
    }
  }
  public static void main(String[] args)
  {
    new DigitalAnzeigeEx2();
  }
}
 

 

Digitale Uhr

Die Digitalanzeige lässt sich mit einem Timer aus der Klasse LoResAlarmTimer zeitlich genau steuern. Auch hier wird erneut die Klasse Display verwendet.

//DigitaleUhr.java

import ch.aplu.util.*;

public class DigitaleUhr implements TimerListener
{
  GPanel p = new GPanel(01000100);
  int zsec = 0;

  Display display1 = new Display(102530, p);
  Display display2 = new Display(352530, p);
  Display display3 = new Display(552530, p);
  Display display4 = new Display(802520, p);

  public DigitaleUhr()
  {
    LoResAlarmTimer timer = new LoResAlarmTimer(100000);
    timer.addTimerListener(this);
    p.enableRepaint(false);
  }

  public boolean timeElapsed()
  {
    p.clear();
    display4.showDigit(zsec % 10);
    display3.showDigit((int)(zsec / 10) % 10);
    display2.showDigit((int)(zsec / 100) % 10);
    display1.showDigit((int)(zsec / 1000));
    p.repaint();
    zsec++;
    return zsec < 10000;
  }

  public static void main(String[] args)
  {
    new DigitaleUhr();
  }
}