that's what I was looking for thanks pedja089MOVE?CB high (Bin), FSR2H ;load highbyte
MOVE?CB low (Bin), FSR2L ;load low byte
that's what I was looking for thanks pedja089MOVE?CB high (Bin), FSR2H ;load highbyte
MOVE?CB low (Bin), FSR2L ;load low byte
that's one down , works like a dream
Code:GLCDSTR?CCB macro Xin ,Yin ,Bin movlw Xin CHK?RP _X MOVWF _X movlw Yin CHK?RP _Y MOVWF _Y MOVE?CB high (Bin), FSR2H ;load highbyte MOVE?CB low (Bin), FSR2L ;load low byte strloop movf POSTINC2, W ; Get a character bnz outstr1 ; Not null char bra exstr outstr1 MOVWF _g_chr L?CALL _gcga bra strloop exstr endm
woops - looping in macro for multiple calls is a no go
needs to be like this
Code:GLCDSTR?CCB macro Xin ,Yin ,Bin movlw Xin CHK?RP _X MOVWF _X movlw Yin CHK?RP _Y MOVWF _Y MOVE?CB high (Bin), FSR2H ;load highbyte MOVE?CB low (Bin), FSR2L ;load low byte L?CALL bfill endm bfill Next_Char movf POSTINC2, W ; Get a character bnz outchr ; Not null char bra exstr2 outchr MOVWF _g_chr L?CALL _gcga bra Next_Char exstr2 return
now have strings and circles, moved font to include file
HOW TO USE THIS STILL ELUDES ME would be nice for display of "constant" stringUSERCOMMAND?S
You can use label in macro and multiple call to that macro.
Just need to define your labels as local.
Here is local used in my example:
But way your done use less FLASHCode:TFTSTR?B macro Bin MOVE?CB high (Bin), FSR2H ;load highbyte MOVE?CB low (Bin), FSR2L ;load low byte local tftstrloop local tftStrDone tftstrloop movf POSTINC2, W ; Get a character, then increment pointer BZ tftStrDone ;All strings must end with 0 ;Not Null char L?CALL tftWoutput; CALL print char in W to TFT BRA tftstrloop ;Get next chr tftStrDone: ;Null char endm ;end of macro
And you can make bfill little smaller
To save few bytes in FLASH.Code:bfill Next_Char movf POSTINC2, W ; Get a character bz exstr2 ; Null char MOVWF _g_chr L?CALL _gcga bra Next_Char exstr2 return
And I'll suggest you to put TFT_ in front all labels and variable names so there is minimal chance for user to duplicate label/variable or unintentional use one of tft variables.
And for "Constant String" I don't know how to implement it with user command. But I know assembler part
Here is use of asm macro
PrintStr 0,0," Test Clock"
And macro:
This is from example for nokia 3310 lcd, that I tried to get to work with GLCD with KS0108 controler.Code:PrintStr macro x, y, Str local TheString, OverStr ; define local labels so you can call macro multiple times goto OverStr ' goto over string stored in FLASH, so processor can't execute that TheString ;label to get address of your string data Str, 0 ;add string to flash at TheString address and end string with 0 OverStr MOVE?CB x, _GLCD_X MOVE?CB x, _GLCD_SX MOVE?CB y, _PosY MOVE?CW TheString, _GLCD_Addr ;move addres of string to word variable, don't know how it would work with device that have more than 65535K of FLASH??? L?CALL _GLCD_StringOut endm ENDASM GLCD_StringOut: Readcode GLCD_Addr, GLCD_Char ' Get a character if GLCD_Char = 0 then RETURN ' Look for Null char, Stop if found ...... RETURN
Last edited by pedja089; - 22nd June 2015 at 12:55.
brilliant , thanks for the tip pedja089Just need to define your labels as local.
seems nobody doesAnd for "Constant String" I don't know how to implement it with user command
I might just stick to my flash2ram macro for now
now with drawline and a bit of optimising
I will wait now for my 2.8" ILI9340C tft display to arrive and see if I can separate out a hw include for each type
Compiler know how to handle user command with string.
So lets try to get something...
Try this code:
Code:GLCD_Addr var word GLCD_Char var byte asm ;----[String]--------------------------------------------------------------- GLCDC?S macro Cin local TheString, OverStr ; define local labels so you can call macro multiple times goto OverStr ; goto over string stored in FLASH, so processor can't execute that TheString ;label to get address of your string data Cin, 0 ;add string to flash at TheString address and end string with 0 OverStr MOVE?CW TheString, _GLCD_Addr ;move addres of string to word variable, don't know how it would work with device that have more than 65535K of FLASH??? L?CALL _GLCD_StringOut endm ENDASM GLCD_StringOut: Readcode GLCD_Addr, GLCD_Char ' Get a character if GLCD_Char = 0 then RETURN ' Look for Null char, Stop if found
now have the image rotation corrected , made all the x,y vars word sized (heading towards a portrait/landscape command)
the font now has lowercase , chars 32-127. and few other subtle changes
the image file can be located anywhere , have tested with a 127k pic18f87j11 and loading file past the 64k boundary is no problem
back in post #54 I uploaded another python script 565-pbp.py that code is a bit simpler , it just converts the data . also if you intend to use an external flash chip with my flash code then your pic18 needs to have two mssp ports . I found buffering image data between flash and tft with them on the same port was just too tedious and slow and gave up on the process , its doable but complicated .
Bookmarks