View Full Version : Can we suppress leading zero's in LCDOUT?
PICn-It
- 16th December 2009, 00:06
I'm trying to print a value in a BYTE sized VAR to a specific place on the LCD.
(a standard 16x2, and using DT's Anypin.php)
I need to get the number right-justified and w/o leading zero's.
I currently have a 0-255 number comming from the ADC on AN0.
(later I will need to do some math and expand the the result to Xnum-per-mV)
I'm currently doing something like this:
MYNUMBER VAR BYTE
MYNUMBER = 0
...
ADCIN 0, MYNUMBER
...
LCDOUT $FE, $83, DEC MYNUMBER
and it prints out "127 " instead of " 127" on the LCD.
My number needs to be printed before (in front of) some text that remains on the LCD during these numeric updates, like " 127-Dingles".
I tried DEC5 and get the digits in the right place but they have leading zero's (instead of spaces)
Is there a way to format my number right-justified and suppress the leading zero's?
Dennis
- 16th December 2009, 02:24
Hi there
Just thought this may help you a little more...
http://www.emesystems.com/BS2math4.htm
Good luck :-)
Dennis
Archangel
- 16th December 2009, 05:51
Hi PICn-It,
From your code:
LCDOUT $FE, $83, DEC MYNUMBER
make it so
LCDOUT $FE, $83, DEC MYNUMBER,"-Dingles"
EDIT: I see what you are doing now, have not tried this but . . .
LCDOUT $FE, $80, DEC MYNUMBER, $84,"Dingles"
DEC automaticaly supresses leading zeros unless followed by a number
sayzer
- 16th December 2009, 08:08
I'm trying to print a value in a BYTE sized VAR to a specific place on the LCD.
(a standard 16x2, and using DT's Anypin.php)
I need to get the number right-justified and w/o leading zero's.
I currently have a 0-255 number comming from the ADC on AN0.
(later I will need to do some math and expand the the result to Xnum-per-mV)
I'm currently doing something like this:
MYNUMBER VAR BYTE
MYNUMBER = 0
...
ADCIN 0, MYNUMBER
...
LCDOUT $FE, $83, DEC MYNUMBER
and it prints out "127 " instead of " 127" on the LCD.
My number needs to be printed before (in front of) some text that remains on the LCD during these numeric updates, like " 127-Dingles".
I tried DEC5 and get the digits in the right place but they have leading zero's (instead of spaces)
Is there a way to format my number right-justified and suppress the leading zero's?
At my best guess, this is what you are asking.
You need the print always to the right.
<font color="#000000">MYNUMBER <font color="#000080"><b>VAR BYTE
</b></font>MYNUMBER = <font color="#FF0000">0
</font><font color="#000080"><b>ADCIN </b></font><font color="#FF0000">0</font>, MYNUMBER
<font color="#000080"><b>LCDOUT </b></font><font color="#FF0000">$FE</font>, <font color="#FF0000">$83
</font><font color="#000080"><b>IF </b></font>MYNUMBER > <font color="#FF0000">99 </font><font color="#000080"><b>THEN
LCDOUT DEC3 </b></font>MYNUMBER <font color="#000080"><i>' three digits + "-Dingles"
</i><b>ELSE
IF </b></font>MYNUMBER > <font color="#FF0000">9 </font><font color="#000080"><b>THEN </b><i>' one space + two digits + "-Dingles"
</i><b>LCDOUT </b></font><font color="#008000">" "</font>, MYNUMBER
<font color="#000080"><b>ELSE
LCDOUT </b></font><font color="#008000">" "</font>,<font color="#000080"><b>DEC1 </b></font>MYNUMBER <font color="#000080"><i>' two spaces + one digit + "-Dingles"
</i><b>ENDIF
ENDIF
LCDOUT </b></font><font color="#008000">"-Dingles"
</font>
PICn-It
- 16th December 2009, 15:38
At my best guess, this is what you are asking.
You need the print always to the right.
<font color="#000000">MYNUMBER <font color="#000080"><b>VAR BYTE
</b></font>MYNUMBER = <font color="#FF0000">0
</font><font color="#000080"><b>ADCIN </b></font><font color="#FF0000">0</font>, MYNUMBER
<font color="#000080"><b>LCDOUT </b></font><font color="#FF0000">$FE</font>, <font color="#FF0000">$83
</font><font color="#000080"><b>IF </b></font>MYNUMBER > <font color="#FF0000">99 </font><font color="#000080"><b>THEN
LCDOUT DEC3 </b></font>MYNUMBER <font color="#000080"><i>' three digits + "-Dingles"
</i><b>ELSE
IF </b></font>MYNUMBER > <font color="#FF0000">9 </font><font color="#000080"><b>THEN </b><i>' one space + two digits + "-Dingles"
</i><b>LCDOUT </b></font><font color="#008000">" "</font>, MYNUMBER
<font color="#000080"><b>ELSE
LCDOUT </b></font><font color="#008000">" "</font>,<font color="#000080"><b>DEC1 </b></font>MYNUMBER <font color="#000080"><i>' two spaces + one digit + "-Dingles"
</i><b>ENDIF
ENDIF
LCDOUT </b></font><font color="#008000">"-Dingles"
</font>
Ahh, I see. I was hoping there would be some compiler directive/keyword/function-switch to use in PBP, something like printf in C but this is fine, whatever works ...right?.
Since I need a posible 5-digit number perhaps turning the IF/THEN into a CASE statement would work here? something like this:
MYNUMBER VAR BYTE
MYNUMBER = 0
...
ADCIN 0, MYNUMBER
...
...
SELECT CASE MYNUMBER
CASE IS > 9999
LCDOUT $FE, $83, DEC5 MYNUMBER ' 5 digits
CASE IS > 999
LCDOUT $FE, $83, " ", DEC4 MYNUMBER ' 1 space and 4 digits
CASE IS > 99
LCDOUT $FE, $83, " ", DEC3 MYNUMBER ' 2 spaces and 3 digits
CASE IS > 9
LCDOUT $FE, $83, " ", DEC2 MYNUMBER ' 3 spaces and 2 digits
CASE ELSE
LCDOUT $FE, $83, " ", DEC1 MYNUMBER ' 4 spaces and 1 digit
END SELECT
Thanks for response
sayzer
- 16th December 2009, 15:54
PICn-It,
MYNUMBER VAR BYTE
With that, you can get max. 255.
----------------------------------------------
PICn-It
- 16th December 2009, 16:09
PICn-It,
MYNUMBER VAR BYTE
With that, you can get max. 255.
----------------------------------------------
Yes, good catch.
In my code, currently I can't figure out how to steady up the 10-bit ADC reading, so I temporarily REM'd those lines:
ADC_BITS 10
MYNUMBER VAR WORD
and temporarily put in:
ADC_BITS 8
MYNUMBER VAR BYTE
while I work out the display screens and presentation. The CASE statement based on your IF/THEN code posted above seems to work great, thank you.
Powered by vBulletin® Version 4.1.7 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.