;************************************************************************/ ;* */ ;* Display values on LCD */ ;* */ ;* Author: Peter Dannegger */ ;* danni@specs.de */ ;* mit Aenderungen f. Temperatursensor ( DS18B20 ) von Unbekannt */ ;************************************************************************/ ;************************************************************************/ ;------------------------------------------------------------------------- ; Anzeige ohne fuehrende Nullen ;------------------------------------------------------------------------- ;input: a = value -128 bis 127 ;used: a, b, c ; _dec_out: mov c,a ;Wert sichern ldi a,$10 ;Cursor einen nach links um.. rcall _lcd_cmd ;..formatiert zu bleiben tst c ;Negativer Wert ? brpl _positiv ;Nein -> springen ldi a,'-' ;Minuszeichen.. rcall _dou4 ;..Zeichen ausgeben neg c ;In positives Aquivalent umwandeln rjmp _dou0 _positiv: ldi a,' ' ;Um evtl. vorheriges Minuszeichen zu loeschen.. rcall _dou4 ;..Zeichen ausgeben _dou0: mov a,c ;Wert duplizieren subi c, 100 ;Hunderter ermitteln brcc _hunderter ;if > = 100, die hunderter Stelle auswerten.. ldi a,' ' ;..ansonsten die hunderter Stelle durch Space ersetzen.. clt ;Keine Hunderter vorhanden rjmp _dou2 ;..und dies ausgeben _hunderter: set ;Hunderter vorhanden mov c, a ;Wert wieder neu laden und.. ldi a, '0' - 1 ;..Hunderter zaehlen.. _dou1: inc a ;..wobei die Ziffer in ASCII umgewandelt wird subi c, 100 ;100 subtrahieren brcc _dou1 ;< 100 -> Nein -> weiter zaehlen _dou2: rcall _dou4 ;output hundrets _zehner: ldi a, '0' +10 ;Zehnerstelle in ASCII umwandeln.. _dou3: dec a ;..und ASCII rueckwaerts von '9' subi c, -10 ;Zehner x +10 brcs _dou3 ;Zehner gezaehlt ? NEIN -> weiter zaehlen rcall _dou5 ;output tens subi c,-'0' ;Einerstelle in ASCII uberfuehren mov a, c ;output ones _dou4: rjmp _lcd_data ;ASCII-Zeichen ausgeben _dou5: cpi a, '0' ;Ist die Zehnerziffer eine Null ?.. brne _dou4 ;..Nein -> Zehnerziffer ausgeben.. brts _dou4 ;Waren vorher Hunderter vorhanden ? Ja -> Null ausgeben ldi a,' ' ;..Nein -> Null durch Space ersetzen und.. rjmp _dou4 ;..jetzt ausgeben ;------------------------------------------------------------------------------