I TRIED YOUR INCLUDE FILE FOR PBPL AND MADE WHAT U SAID.
Code:
'****************************************************************
'* Creates a variable sized BAR-graph anywhere on the screen *
'****************************************************************
'* Name : LCDbar_INC.bas *
'* Author : Darrel Taylor *
'* Notice : Copyright (c) 2005 *
'* Date : 9/8/2005 *
'* Version : 1.0 *
'* Notes : Maximum Range is 32768 *
'* : Range must always be a Constant *
'* : Value must always be a WORD variable *
'* : *
'****************************************************************
; default
BAR_width VAR BYTE : BAR_width = 16 ; Width of the BARgraph 16
BAR_range VAR LONG : BAR_range = 100 ; Range of Values (0-100) 100 ;;;;;;;;;;;
BAR_row VAR BYTE : BAR_row = 1 ; Row location (1-4) 1
BAR_col VAR BYTE : BAR_col = 0 ; Column location (0-15) 0
BAR_value VAR LONG : BAR_value = 0 ; Current BAR value 0 ;;;;;;;;;;;
BAR_style VAR BYTE : BAR_style = 1 ; 1=lines, 2=boxed, 3=blocks 1
; --- Temporary vars ----
BARtemp VAR LONG ;;;;;;;;
Remainder VAR LONG ;;;;;;;;
BARloop VAR BYTE
LastCharset VAR BYTE : LastCharset = 0
Limit1 VAR LONG ;;;;;;;;
GOTO overBAR ; Skip over Subroutines
ThreeBARS CON 0 ; Identify the Custom Characters
TwoBARS CON 1
OneBAR CON 2
ASM
lines = 0x10000001 ; Define the Styles
boxed = 0x10000002
blocks = 0x10000003
ENDASM
; --- lines Style custom chars ----
CharsetLines:
LCDOut $FE,$40,REP $15\8 ; Custom char 0 - 3 lines |||
LCDOut $FE,$48,REP $14\8 ; Custom char 1 - 2 lines ||
LCDOut $FE,$50,REP $10\8 ; Custom char 2 - 1 line |
RETURN
; --- boxed Style custom chars ----
CharsetBoxed:
LCDOut $FE,$40,$1F,REP $15\6,$1F ; III
LCDOut $FE,$48,$1C,REP $14\6,$1C ; II
LCDOut $FE,$50,REP $10\8 ; I
RETURN
; --- blocks Style custom chars ----
CharsetBlocks:
LCDOut $FE,$40,REP $1F\8
LCDOut $FE,$48,REP $1C\8
LCDOut $FE,$50,REP $10\8
RETURN
; ----- Show the BAR graph -----------------------------------------------------
ShowBAR:
IF BAR_width = 0 then BARdone
if LastCharset <> BAR_style then ; If the Style has changed ?
LastCharset = BAR_style
SELECT CASE BAR_style ; Load the new custom chars
CASE 1 : GOSUB CharsetLines
CASE 2 : GOSUB CharsetBoxed
CASE 3 : GOSUB CharsetBlocks
END SELECT
endif
@ ifdef LCD4X20
LOOKUP BAR_row,[$80,$80,$C0,$94,$D4],BARtemp
@ else
LOOKUP BAR_row,[$80,$80,$C0,$90,$D0],BARtemp
@ endif
LCDOUT $FE, BARtemp + BAR_col ; Move cursor to start of the BAR
;;;;;;;;BARtemp = BAR_value * BAR_width ; calc the char position
;;;;;;;;BARtemp = DIV32 BAR_range
BARtemp = (BAR_value * BAR_width)/BAR_range ; CHANGED
Remainder = R2
For BARloop = 0 to BAR_width -1
SELECT CASE BARtemp
CASE IS > BARloop
LCDOUT ThreeBARS ; send 3 bars |||
CASE IS < BARloop
LCDOUT " " ; clear to end of BARwidth
CASE IS = BARloop
;;;;Limit1 = BAR_range * 6
;;;;Limit1 = DIV32 10
Limit1 = (BAR_range * 6)/10 ; CHANGED
if Remainder >= Limit1 then
LCDOUT TwoBARS ; send 2 bars ||
else
;;;;Limit1 = BAR_range * 3
;;;;Limit1 = DIV32 10
Limit1 = (BAR_range * 3)/10 ; CHANGED
if Remainder >= Limit1 then ; 30%
LCDOUT OneBAR ; send 1 bar |
else
LCDOUT " " ; no bars
endif
endif
END SELECT
NEXT BARloop
BARdone:
RETURN
ASM
; --- The main macro for creating BARgraphs ------------------------------------
BARgraph macro Value, Row, Col, Width, Range, Style
MOVE?CW Range, _BAR_range ; Range MUST be a constant
MOVE?WW Value, _BAR_value ; Value MUST be a WORD variable
if (Row < 5) ; Row is a constant
MOVE?CB Row, _BAR_row
else ; Row is a variable
MOVE?BB Row, _BAR_row
endif
if (Col < 16) ; Is Col a constant ?
MOVE?CB Col, _BAR_col
else ; NO, it's a variable
MOVE?BB Col, _BAR_col
endif
if (Width <= 40)
MOVE?CB Width, _BAR_width
else
MOVE?BB Width, _BAR_width
endif
if ((Style >= lines) & (Style <= blocks)) ; Is Style a valid constant ?
MOVE?CB Style, _BAR_style
else ; NO, treat it like a variable
MOVE?BB Style, _BAR_style
endif
L?CALL _ShowBAR
endm
ENDASM
overBAR:
but there is a problem ; when i want to use different bar type on lcd for different rows bar types are mixing.
when use it like this all rows are one type bar.
Bookmarks