What you're looking for is commonly known as leading zero blanking. You could continue with filling blanks to digits after the value is zero. That is how you will achieve it.
What you're looking for is commonly known as leading zero blanking. You could continue with filling blanks to digits after the value is zero. That is how you will achieve it.
IF XVR > 999 THEN
[Work the first digit]
ENDIF ;If not, no action taken
IF XVR > 99 THEN
[Work the 2nd digit]
ENDIF ;If not, no action taken
I'm doing a more featured custom decoder, which will display both letters and digits on max7219 7 segment display. It will also have custom decoder for digital values. The code is below:
This code works, but DLEN instead of cropping digits from the left, crops them from the right - say initial variable is "12345" and I want to display 2 digits from it, I'm getting "45" instead of "12", have no idea why. Same for start position - DSTART starts from rightmost position, instead of leftmost....Code:FOURD=12345 'test value dstart=2 'start segment DLEN=2 'decode length TEST: 'test digits FOR x=DLEN TO 1 STEP -1 Z=FOURD DIG X+1 'EXTRACT VALUE GOSUB FOURDEC PAUSE 500 NEXT GOTO TEST FOURDEC: 'DIGIT DECODER if Z=0 then Y=126 if Z=1 then Y=48 if z=2 then Y=109 if z=3 then Y=121 if z=4 then Y=51 if z=5 then Y=91 if z=6 then Y=95 if z=7 then Y=112 if z=8 then Y=127 if z=9 then Y=115 low load shiftout datapin,clockpin,1,[x+DSTART-1, y] 'DISPLAY THE LETTER high load RETURN
FOURD=12345
FOURD=FOURD>>2 should return FOURD=123, right? but it returns 11419 !
Forgot to mention, startup shift fixed:
shiftout datapin,clockpin,1,[X-DLEN+DSTART, y]
Not sure how that happened. First, you wouldn't get "123", as Right Shift 2 (>> 2) is the same as Divide by 4; in which case 12345 >> 2 = 3086 and not 11419.
Since you're dealing with a display, you may have to treat each place holder as a unique byte (perhaps value + $30 to convert it to ASCii); "12345" would be saved as $31, $32, $33, $34, $35 in an array. You can then shift your pointer 2 places to look at 123 by itself (as 3 individual bytes, of course).
I've written a PC based converter, which deals with ASCII conversion. It generates PBP code for EEPROM.
![]()
So back to shift.
How to trim one variable from left to right, to value of another variable?
say trim 12345 by 3 - mean, make 123 digits from it.
12345 / 10 = 1234
12345 / 100 = 123
12345 / 1000 = 12
12345 / 10000 = 1
/Henrik.
Bookmarks