umrechnung von zahlen + ausgabe auf LCD

Gast #20195
Lesenswert?

ich versuche eine ausgabe auf einem LCD zu programmieren ! die 
displayansteuerrung funktioniert ohne probleme ! als µC verwende ich den 
PIC 16F877

was stimmt an diesem unterprogramm nicht ? ich möchte eine zahl 
ausgeben, alledings bekomme ich am display nur irgendwelche 
sonderzeichen !


void ADC_UMRECHNUNG(int16 x)
{

  uns8 t, h, z, e;

 if (x.15 == 1)
  {
   LCD_1 = '-';
  }
 else
  {
   LCD_1 = ' ';
  }
  h = x / 100;
  z = x % 100;
  z = z / 10;
  e = x % 100;
  e = e % 10;
  h = 0x30 + h;
  z = 0x30 + z;
  e = 0x30 + e;
  LCD_2 = h;
  LCD_3 = z;
  LCD_4 = e;
}
Gast #20198
Lesenswert?

0x30 ist 48.
Das eine ist Hex, das andere Dezimal.

Du mußt Deinen Wert als BCD-Zahl darstellen. D.h. die einzelnen Werte 
von h,z,e dürfen nicht größer als 9 sein. Dann müßen hierzu 0x30 addiert 
werden.
Überprüf doch mal, was in diesen drei Variablen steht bevor Du 0x30 
addierst.

Ansonsten kann ich mir nur vorstellen, daß die Zeichen zu schnell 
nacheinander ausgegeben werden und das Display hier nicht mitkommt.
Ist aber nur eine Vermutung.
Gast #20203
Lesenswert?

Bei 10 bit kann Deine Zahl maximal 3FFh groß sein. Dies ist dezimal 
1023. D.h. zu deinen h,z,e muss noch ein t für die tausender dazu und 
entsprechend Deiner Umwandlung noch mitberücksichtigt werden.

  t = x / 1000;
  h = x % 1000;
  usw.
  .
  .
  .
  t = 0x30 + t;
  h = 0x30 + h;
  z = 0x30 + z;
  e = 0x30 + e;
  LCD_2 = t;
  LCD_3 = h;
  LCD_4 = z;
  LCD_5 = e;
Gast #20204
Lesenswert?

Hi chris,

mit x=-x; wird x positiv wenn es vorher kleiner 0 war. Sonst berechnest 
Du nur Mist...

/* -9999 <= x <= 9999, immer 4 stellig, also z.B. 0012 */
void ADC_UMRECHNUNG(int16 x)
{
  if(x<0)
  {
    LCD_1='-';
    x=-x;
  }
  else
    LCD_1=' ';

  LCD_5=x%10+0x30; x/=10; /* 3 stellig bis 999, diese Zeile weg */
  LCD_4=x%10+0x30; x/=10;
  LCD_3=x%10+0x30; x/=10;
  LCD_2=x+0x30;
}

Peter

PS: bist Du sicher, das LCD_1,... korrekt auf dem Display ausgegeben 
wird? Du kannst ja mal probeweise am Ende der Funktion ein 
LCD_1=LCD_2=LCD_3=LCD_4=LCD_5='8'; einfügen, dann sollte 88888 
erscheinen.

wieso besitzt dies Forum eigentlich keinen Preview Knopf?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren