I recently bought a 3.5" color lcd from China from
http://cgi.ebay.com/3-5-262k-TFT-240...item1c153a8de4
for $35.00 including shipping. It also has a touch screen and controller , eeprom, and sd socket.

Below is the test code. This should get you started if you want to play with this color display.

I am using 8 bit control for the LCD and hardware SPI for the touch screen controller.

Here are the spec's

3.5" QVGA 262k TFT-LCD module
240*RGB*320 pixels
LCD driver is SSD2119
2.7-3.3V operating voltage
RS1843 touch panel controller onboard directly compatible with ADS7843
Standard 2.54mm PCB headers for prototyping
Support a SD card interface(SPI mode)
Support a ATMEL DataFlash AT45DBxxx series device
Optional 8-bit or 16-bit parallel bus interface and
Optional 3 wire SPI or 4 wire SPI interface with PS3、PS2、PS1、PS1 jump select
4-wire Touch Panel support

I have to give credit to Darrel Taylor, mister_e, skimask and anyone else I may have used their code over the years.
Code:
' ************************************************************
' * Auto generated EasyHID file. PBP 2.60 and above          *
' ************************************************************

' include the HID descriptor
include	"DESC_TFT.bas"

DEFINE OSC 48
DEFINE LOADER_USED 1

ADCON1 = $F       'port A digital
CMCON = 7         'PortA Digital
INTCON2.7 = 0     'weak pullups portB
'INTCON2.4 = 0     'INT2 falling edge
USBBufferSizeMax   con 64  ' maximum buffer size
USBBufferSizeTX    con 64  ' input
USBBufferSizeRX    con 64  ' output

' the USB buffer...
USBBuffer        Var Byte[USBBufferSizeMax] 
USBBufferCount   Var Byte 


SPI_Buf_out   var        byte[8]      'spi output buffer
SPI_Buf_in   var        byte[8]       'spi input buffer
spi_cnt      var        byte          ' Transmit counter
ts_y      var        word
ts_x      var        word
ts_cs     var        PORTB.5
number    var        word
len       var        byte
high      ts_cs
' LCD VARS__________________________________________________________

LCD_Dat         var    PORTD
LCD_CS          var    PORTE.2
LCD_RS          var    PORTB.3
LCD_RD          var    PORTE.0
LCD_WR          var    PORTE.1
LCD_RST         var    PORTC.6
CMD             var    word
DAT             var    word
Color           var    word
fColor           var    word
bColor           var    word
' Color
RED	    con  $f800
GREEN	con  $07e0
BLUE	con  $001f
YELLOW	con  $ffe0
CYAN	con  $07ff
MAGENTA	con  $f81f
BLACK	con  $0000
WHITE	con  $ffff
rlb   var    byte
rhb   var    word
i     var    long
j     var    long
k     var    long
m     var    byte
n     var    byte

'** Graphic vars *************************************************************
cx          var     long
cy          var     long
sx          var     long
ex          var     long
sy          var     long
ey          var     long
x           var     word
y           var     word
ypos        var     long
rad         var     long
rad2         var    long
color_buf   var     word
sx_buff      var     word
ex_buff      var     word
'Circle constants and variables
gl_pi			con	2	'PI as an integer
glc_x			var     BYTE	'Calculation var
glc_y			var     BYTE	'Calculation var
glc_s			var     WORD	'Slope
glc_cx			var     BYTE	'Center x
glc_cy  		var     BYTE	'Center y
glc_r			var     BYTE	'Radius
gl_x1			var     word
gl_x2           var     word
gl_y1           var     BYTE
gl_y2           var     BYTE
b_inp1	 		var     BYTE
b_inp2	 		var     BYTE
b_inp3	 		var     BYTE
gl_i		var	word
gl_j		var BYTE
gl_k		var	BYTE
gl_l        var BYTE
gl_m        var BYTE
gl_x		var	WORD
gl_y		var	WORD
'===============================================================================
Invert          var bit
charsel          var byte[8]
char_row         var byte
lu1              var byte
charpos          var byte
addr             var word
addrb            var byte
addrb = 0
addr1            var word
char             var chardata[0]
chardata         var byte[8]
temp             var byte
temp1            var byte
temp5            var byte
Im1              var word
temp2            var byte
a               var byte
LCDx    var byte    '  Col position
LCDy    var byte    '  Row position
big     var byte
big = 0
Row var byte
col var byte

picdat  var byte

lcdcharloop var byte
lcdchardata var byte[8]
tp_cs      var PORTB.5

SSPEN VAR SSPCON1.5   ' SSP Enable bit
CKP   VAR SSPCON1.4   ' Clock Polarity Select
SMP   VAR SSPSTAT.7  ' Data input sample phase
CKE   VAR SSPSTAT.6  ' Clock Edge Select bit
SSPIF VAR PIR1.3     ' SPI interrupt flag
WCOL		Var	SSPCON1.7	' SSP write collision
BF		    Var	SSPSTAT.0	' SSP buffer full
SSPCON1 = %00000010	
Pen_Down  var PORTB.2
TRISA = %00000000
TRISB = %00000101
TRISC = %00000000
TRISD = %00000000
TRISE.0 = 0
TRISE.1 = 0
TRISE.2 = 0
latD = %11111111
high lcd_cs
high lcd_RD
high lcd_wr
high lcd_rs
high lcd_rst

    '   Interrupt definition
    '   ====================
        '   USB interrupt used to keep USB connection alive
INCLUDE "DT_INTS-18.bas"    ' Base Interrupt System
INCLUDE "ReEnterPBP-18.bas"     ' Include if using PBP interrupts
ASM
INT_LIST  macro    ; IntSource,         Label,  Type, ResetFlag?
        INT_Handler    INT2_INT,  _TS_INT,   ASM,  yes
    endm
    INT_CREATE               ; Creates the interrupt processor
ENDASM
@    INT_ENABLE  INT2_INT      ; enable external (INT) interrupt

ASM	;printstr2 to color LCD macro,	'@ printstr2 x,y, "string2 to lcd at x,y"
printstr2	macro x2, y2, str2
		local thestring2, overstr2
	
		bra overstr2
thestring2
		data str2,0
overstr2
		MOVE?CB x2, _LCDx
		MOVE?CB y2, _Row
		MOVE?CW thestring2, _addr
		L?CALL _stringout2
		endm
ENDASM


pause 1000
'include "USB_ASM_Service.pbp"
lcd_dat = $FF
goto programstart
'******************************************************************************
LCD_Write_CMD:
high lcd_RD
low lcd_rs
low lcd_cs
low lcd_wr
lcd_dat = cmd.highbyte
high lcd_wr
low lcd_wr
LCD_Dat = cmd.lowbyte
high lcd_wr
high lcd_rs
high lcd_cs

Return
'******************************************************************************
LCD_Write_Dat:
high lcd_RD
high lcd_rs
low lcd_cs
low lcd_wr
lcd_dat = dat.highbyte
high lcd_wr
low lcd_wr
LCD_Dat = dat.lowbyte
high lcd_wr
high lcd_cs

return
'******************************************************************************
LCD_Read_Dat:           ' only works with 16 bit control
TRISD = $FF
color_buf = 0
low lcd_cs
high lcd_rs
high lcd_wr


low lcd_rd      'dummy read
high lcd_rd

low lcd_rd
color_buf.lowbyte = lcd_dat 
high lcd_rd
                                                        'lcd_dat
low lcd_rd
color_buf.highbyte = lcd_dat 
high lcd_rd

                                                           'lcd_dat
TRISD = $00
high lcd_cs
return
'******************************************************************************

LCD_RESET:
low lcd_rst
pause 500
high lcd_rst
pause 1000
return
'******************************************************************************
LCD_Test:
gosub lcd_home
for i = 0 to 319
    for j = 0 to 239
        if i > 279 then 
        dat = black
        elseif i > 239 then 
        dat = blue
        elseif i > 199 then 
        dat = green
        elseif i > 159 then 
        dat = cyan
        elseif i > 119 then 
        dat = red
        elseif i > 79 then 
        dat = magenta
        elseif i > 39 then 
        dat = yellow
        else 
        dat = white
        
        endif
        gosub lcd_write_dat
    next j       




next i
return
'******************************************************************************
LCD_INIT:
gosub lcd_reset
cmd = $0028 : gosub lcd_write_CMD : dat = $0006 : gosub lcd_write_dat

pause 10
cmd = $0000 : gosub lcd_write_CMD : dat = $0001 : gosub lcd_write_dat ' Start OSC
cmd = $0010 : gosub lcd_write_CMD : dat = $0000 : gosub lcd_write_dat
cmd = $0001 : gosub lcd_write_CMD : dat = $30EF : gosub lcd_write_dat  ' Driver output  32EF
cmd = $0002 : gosub lcd_write_CMD : dat = $0600 : gosub lcd_write_dat   
cmd = $0003 : gosub lcd_write_CMD : dat = $6A64 : gosub lcd_write_dat   
cmd = $0011 : gosub lcd_write_CMD : dat = $6830 : gosub lcd_write_dat   

cmd = $000F : gosub lcd_write_CMD : dat = $0000 : gosub lcd_write_dat

cmd = $000B : gosub lcd_write_CMD : dat = $5308 : gosub lcd_write_dat
cmd = $000C : gosub lcd_write_CMD : dat = $0003 : gosub lcd_write_dat
cmd = $000D : gosub lcd_write_CMD : dat = $000A : gosub lcd_write_dat
cmd = $000E : gosub lcd_write_CMD : dat = $2E00 : gosub lcd_write_dat

cmd = $001E : gosub lcd_write_CMD : dat = $002B : gosub lcd_write_dat '
cmd = $0025 : gosub lcd_write_CMD : dat = $8000 : gosub lcd_write_dat
cmd = $0026 : gosub lcd_write_CMD : dat = $7000 : gosub lcd_write_dat 
cmd = $004E : gosub lcd_write_CMD : dat = $0000 : gosub lcd_write_dat
cmd = $004F : gosub lcd_write_CMD : dat = $0000 : gosub lcd_write_dat

cmd = $0012 : gosub lcd_write_CMD : dat = $08D9 : gosub lcd_write_dat
 ' Gama Curve
cmd = $0030 : gosub lcd_write_CMD : dat = $0000 : gosub lcd_write_dat
cmd = $0031 : gosub lcd_write_CMD : dat = $0104 : gosub lcd_write_dat
cmd = $0032 : gosub lcd_write_CMD : dat = $0100 : gosub lcd_write_dat
cmd = $0033 : gosub lcd_write_CMD : dat = $0305 : gosub lcd_write_dat
cmd = $0034 : gosub lcd_write_CMD : dat = $0505 : gosub lcd_write_dat
cmd = $0035 : gosub lcd_write_CMD : dat = $0305 : gosub lcd_write_dat
cmd = $0036 : gosub lcd_write_CMD : dat = $0707 : gosub lcd_write_dat
cmd = $0037 : gosub lcd_write_CMD : dat = $0300 : gosub lcd_write_dat
cmd = $003A : gosub lcd_write_CMD : dat = $1200 : gosub lcd_write_dat
cmd = $003B : gosub lcd_write_CMD : dat = $0800 : gosub lcd_write_dat
pause 150
cmd = $0007 : gosub lcd_write_CMD : dat = $0033 : gosub lcd_write_dat
pause 200

Return
'******************************************************************************
LCD_HOME:

cmd = $004E : gosub lcd_write_CMD : dat = $0000 : gosub lcd_write_dat  ' RAM Addsress set X
cmd = $004F : gosub lcd_write_CMD : dat = $0000 : gosub lcd_write_dat  ' RAM Addsress set Y
cmd = $0044 : gosub lcd_write_CMD : dat = $EF00 : gosub lcd_write_dat  'Vertical start/end RAM address position
cmd = $0045 : gosub lcd_write_CMD : dat = $0000 : gosub lcd_write_dat  'Horizontal start RAM address position 
cmd = $0046 : gosub lcd_write_CMD : dat = $013F : gosub lcd_write_dat   ' Horizontal end RAM address position
cmd = $0022 : gosub lcd_write_CMD     'RAM data write/read

return
'******************************************************************************
CLR_DISP:
color = white
for i = 0 to 319
    for j = 0 to 239
    dat = color
    gosub lcd_write_dat
    next j
next i
return
'******************************************************************************
'  Need sx (start x), ex (end x) sy (start y), ey (end y) and Color
'
'******************************************************************************
Fill_Rect:
ypos.highbyte = ey
ypos.lowbyte = sy


cmd = $004E : gosub lcd_write_CMD : dat = sx : gosub lcd_write_dat  ' RAM Addsress set X
cmd = $004F : gosub lcd_write_CMD : dat = sy : gosub lcd_write_dat  ' RAM Addsress set Y
cmd = $0044 : gosub lcd_write_CMD : dat = ypos: gosub lcd_write_dat  'Vertical start/end RAM address position
cmd = $0045 : gosub lcd_write_CMD : dat = sx : gosub lcd_write_dat  'Horizontal start RAM address position 
cmd = $0046 : gosub lcd_write_CMD : dat = ex : gosub lcd_write_dat   ' Horizontal end RAM address position
cmd = $0022 : gosub lcd_write_CMD     'RAM data write/read
x = ex - sx + 1
y = ey - sy + 1
dat = color
for j = 0 to y
    for i = 0 to x
    gosub lcd_write_dat
    next i
next j
return

'******************************************************************************
'  Need cx (center x), cy (center y), rad (radius) and Color
'
'******************************************************************************

'******************************************************************************
'    need  x, y, color
'
'******************************************************************************
Setdot:
cmd = $004E : gosub lcd_write_CMD : dat = x : gosub lcd_write_dat  ' RAM Addsress counter set X
cmd = $004F : gosub lcd_write_CMD : dat = y : gosub lcd_write_dat  ' RAM Addsress counter set Y
cmd = $0022 : gosub lcd_write_CMD 
dat = color
gosub lcd_write_dat

return

' ***** Set x,y Points *****
set8:
	x = glc_x+glc_cx : y=glc_y+glc_cy	        '1
	gosub setdot
	x = glc_cx-glc_x : y=glc_y+glc_cy		'2	
	gosub setdot
	x = glc_cx+glc_x : y=glc_cy-glc_y		'3	
	gosub setdot
	x = glc_cx-glc_x : y=glc_cy-glc_y		'4	
	gosub setdot
	x = glc_y+glc_cx : y=glc_x+glc_cy		'5
	gosub setdot			
	x = glc_cx-glc_y : y=glc_cy+glc_x		'6	
	gosub setdot
	x = glc_cx+glc_y : y=glc_cy-glc_x		'7	
	gosub setdot
	x = glc_cx-glc_y : y=glc_cy-glc_x		'8	
	gosub setdot
return

'*** gl_circle d = diameter r = radius x,y are point locations ***
'***** Given Center = glc_cx,glc_cy and Radius = glc_r **********
gl_circ:
  glc_x = 0
  glc_y = glc_r
  glc_s = gl_pi-2*glc_r
  

  while (glc_x <= glc_y) 
 
      gosub set8

	if (glc_s.15 =1) then
           glc_s = glc_s + (4*glc_x + 6)
         else
           glc_s = glc_s + (4*(glc_x-glc_y) + 10)
           glc_y = glc_y - 1
	endif

	glc_x = glc_x + 1
  wend

return
'Rectangle subroutine given gl_x1,gl_x2,gl_y1, gl_y2
gl_rect:

        gosub chk_xy         
	for gl_i= gl_x1 to gl_x2 step 1
		x = gl_i
		y = gl_y1
		gosub setdot
	        y = gl_y2
		gosub setdot
	next gl_i

	for gl_i= gl_y1 to gl_y2 step 1
		y = gl_i
		x = gl_x1
		gosub setdot
		x = gl_x2
		gosub setdot
	next gl_i

return

chk_xy:
	if gl_x1 > gl_x2 then
		swap gl_x1,gl_x2
        endif
	if gl_y1 > gl_y2 then
		swap gl_y1,gl_y2
        endif
return



'*******************************************************************************
'           Text
'*******************************************************************************
stringout2:		
lcdy = row
Readcode addr, char : 
If char = 0 then return 

gosub putclcdtext : 
addr = addr + 1 : 
lcdx = lcdx + 1 : 

lcdy = row 

goto stringout2


putclcdtext:	
if char < 20 then return
 if char > $7f then return
 
 for char_row = 0 to 4
     if char < $50 then
        charpos  = (((char & $ff)- $20)*5)
        gosub table1
        
     endif

     if char > $4f then
        charpos  = (((char & $ff)- $50)*5)
        gosub table2
      endif 

next char_row
if big = 0 then      ' Normal 5x7 font
    for j = 0 to 7   ' data bits 0 - 7
                
            	cmd = $004E : gosub lcd_write_CMD : dat = lcdx : gosub lcd_write_dat  ' RAM Addsress counter set X
                cmd = $004F : gosub lcd_write_CMD : dat = lcdy : gosub lcd_write_dat  ' RAM Addsress counter set Y    
    
                   
        for k = 1 to 5
    
    	        dat = fcolor
                temp = chardata[k]
                if temp.0[j] = 0 then 
                    dat = bcolor
                endif
                cmd = $0022 : gosub lcd_write_CMD 
                gosub lcd_write_dat
    	next k
    	dat = bcolor
        gosub lcd_write_dat
        lcdy = lcdy + 1
    
    next j 
    lcdx = lcdx + 6
    

elseif big = 1 then      ' big 10x14 font
    for j = 0 to 7   ' data bits 0 - 7
    for n = 0 to 1
                 
            	cmd = $004E : gosub lcd_write_CMD : dat = lcdx : gosub lcd_write_dat  ' RAM Addsress counter set X
                cmd = $004F : gosub lcd_write_CMD : dat = lcdy : gosub lcd_write_dat  ' RAM Addsress counter set Y    
    
    
        for k = 1 to 5
        for m = 0 to 1    
    	        dat = fcolor
                temp = chardata[k]
                if temp.0[j] = 0 then 
                    dat = bcolor
                endif
                cmd = $0022 : gosub lcd_write_CMD 
                gosub lcd_write_dat
    	next m
        next k
    	
        dat = bcolor
        gosub lcd_write_dat
        lcdy = lcdy + 1
    next n
    next j 
    lcdx = lcdx + 10       '20X24
elseif big = 2   then
    for j = 0 to 7   ' data bits 0 - 7
    for n = 0 to 3
                 
            	cmd = $004E : gosub lcd_write_CMD : dat = lcdx : gosub lcd_write_dat  ' RAM Addsress counter set X
                cmd = $004F : gosub lcd_write_CMD : dat = lcdy : gosub lcd_write_dat  ' RAM Addsress counter set Y    
    
    
        for k = 1 to 5
        for m = 0 to 3    
    	        dat = fcolor
                temp = chardata[k]
                if temp.0[j] = 0 then 
                    dat = bcolor
                endif
                cmd = $0022 : gosub lcd_write_CMD 
                gosub lcd_write_dat
    	next m
        next k
    	
        dat = bcolor
        gosub lcd_write_dat
        lcdy = lcdy + 1
    next n
    next j 
    lcdx = lcdx + 24

endif
return

'=================
'FONT SAMPLE 5x7
'=================

Table1:
lu1 = charpos + char_row

lookup lu1, [0,0,0,0,0,_             'space
            $00,$00,$5f,$00,$00,_	'// 21 !
			$00,$07,$00,$07,$00,_	' 22 "
			$14,$7f,$14,$7f,$14,_	 ' 23 #
			$24,$2a,$7f,$2a,$12,_	 ' 24 $
			$23,$13,$08,$64,$62,_	'  25%
			$36,$49,$55,$22,$50,_	 ' 26 &
			$00,$05,$03,$00,$00,_	 ' 27 '
			$00,$1c,$22,$41,$00,_	 ' 28 (
			$00,$41,$22,$1c,$00,_	 ' 29 )
			$14,$08,$3e,$08,$14,_	 ' 2a *
			$08,$08,$3e,$08,$08,_	 ' 2b +
			$00,$50,$30,$00,$00,_	 ' 2c ,
			$08,$08,$08,$08,$08,_	 ' 2d -
			$00,$60,$60,$00,$00,_	 ' 2e .
			$20,$10,$08,$04,$02,_	 ' 2f /
			$3e,$51,$49,$45,$3e,_	 ' 30 0
			$00,$42,$7f,$40,$00,_	 ' 31 1
			$42,$61,$51,$49,$46,_    ' 32 2
			$21,$41,$45,$4b,$31,_    ' 33 3
			$18,$14,$12,$7f,$10,_    ' 34 4
			$27,$45,$45,$45,$39,_    ' 35 5
			$3c,$4a,$49,$49,$30,_    ' 36 6
			$01,$71,$09,$05,$03,_    ' 37 7
			$36,$49,$49,$49,$36,_    ' 38 8
			$06,$49,$49,$29,$1e,_	'// 39 9
			$00,$36,$36,$00,$00,_	'// 3a :
			$00,$56,$36,$00,$00,_	'// 3b ;
			$08,$14,$22,$41,$00,_	'// 3c <
			$14,$14,$14,$14,$14,_	'// 3d =
			$00,$41,$22,$14,$08,_	'// 3e >
			$02,$01,$51,$09,$06,_	'// 3f ?
			$32,$49,$79,$41,$3e,_	'// 40 @
			$7e,$11,$11,$11,$7e,_	'// 41 A
			$7f,$49,$49,$49,$36,_	'// 42 B
			$3e,$41,$41,$41,$22,_	'// 43 C
            $7f,$41,$41,$22,$1c,_	'// 44 D
			$7f,$49,$49,$49,$41,_	'// 45 E
			$7f,$09,$09,$09,$01,_	'// 46 F
			$3e,$41,$49,$49,$7a,_	''// 47 G
			$7f,$08,$08,$08,$7f,_	'// 48 H
			$00,$41,$7f,$41,$00,_	'// 49 I
			$20,$40,$41,$3f,$01,_	'// 4a J
			$7f,$08,$14,$22,$41,_	'// 4b K
			$7f,$40,$40,$40,$40,_	'// 4c L
			$7f,$02,$0c,$02,$7f,_	'// 4d M
			$7f,$04,$08,$10,$7f,_	'// 4e N
			$3e,$41,$41,$41,$3e],temp	'// 4f O
chardata[char_row + 1] = temp


Return

Table2:
lu1 = charpos + char_row

lookup lu1, [$7f,$09,$09,$09,$06,_	'// 50 P
            $3e,$41,$51,$21,$5e,_	'// 51 Q
			$7f,$09,$19,$29,$46,_	'// 52 R
			$46,$49,$49,$49,$31,_	'// 53 S
			$01,$01,$7f,$01,$01,_	'// 54 T
			$3f,$40,$40,$40,$3f,_	'// 55 U
			$1f,$20,$40,$20,$1f,_	'// 56 V
			$3f,$40,$38,$40,$3f,_	'// 57 W
			$63,$14,$08,$14,$63,_	'// 58 X
			$07,$08,$70,$08,$07,_	'// 59 Y
			$61,$51,$49,$45,$43,_	'// 5a Z
			$00,$7f,$41,$41,$00,_	'// 5b [
			$02,$04,$08,$10,$20,_	'// 5c
			$00,$41,$41,$7f,$00,_	'// 5d
			$04,$02,$01,$02,$04,_	'// 5e
			$40,$40,$40,$40,$40,_	'// 5f
			$00,$01,$02,$04,$00,_	'// 60
			$20,$54,$54,$54,$78,_	'// 61 a
			$7f,$48,$44,$44,$38,_	'// 62 b
			$38,$44,$44,$44,$20,_	'// 63 c
			$38,$44,$44,$48,$7f,_	'// 64 d
			$38,$54,$54,$54,$18,_	'// 65 e
			$08,$7e,$09,$01,$02,_	'// 66 f
			$0c,$52,$52,$52,$3e,_	'// 67 g
			$7f,$08,$04,$04,$78,_	'// 68 h
			$00,$44,$7d,$40,$00,_	'// 69 i
			$20,$40,$44,$3d,$00,_	'// 6a j 
			$7f,$10,$28,$44,$00,_	'// 6b k
			$00,$41,$7f,$40,$00,_	'// 6c l
			$7c,$04,$18,$04,$78,_	'// 6d m
			$7c,$08,$04,$04,$78,_	'// 6e n
			$38,$44,$44,$44,$38,_	'// 6f o
			$7c,$14,$14,$14,$08,_	'// 70 p
			$08,$14,$14,$18,$7c,_	'// 71 q
			$7c,$08,$04,$04,$08,_	'// 72 r
			$48,$54,$54,$54,$20,_	'// 73 s
			$04,$3f,$44,$40,$20,_	'// 74 t
			$3c,$40,$40,$20,$7c,_	'// 75 u
			$1c,$20,$40,$20,$1c,_	'// 76 v
			$3c,$40,$30,$40,$3c,_	'// 77 w
			$44,$28,$10,$28,$44,_	'// 78 x
			$0c,$50,$50,$50,$3c,_	'// 79 y
			$44,$64,$54,$4c,$44,_	'// 7a z
			$00,$08,$36,$41,$00,_	'// 7b
			$00,$00,$7f,$00,$00,_	'// 7c
			$00,$41,$36,$08,$00,_	'// 7d
			$10,$08,$08,$10,$08,_	'// 7e
			$78,$46,$41,$46,$78], temp '	// 7f
chardata[char_row + 1] = temp


Return  
'******************************************************************************





'******************************************************************************

'******************************************************************************

'''*******************************************************************************
spi_Write:
		
       SPI_Buf_out[0] = $90    'read y   ADS7843
       SPI_Buf_out[1] = 0
       SPI_Buf_out[2] = $D0    'read x   ADS7843                                                  '
       SPI_Buf_out[3] = 0
       SPI_Buf_out[4] = 0 
       low tp_cs               ' enable touch screen
        
        
        SPI_Buf_in = SSPBUF	' Clear the buffer.
		SSPIF = 0		' Clear the interrupt flag.
for spi_cnt = 0 to 4
		SSPBUF = SPI_Buf_out[spi_cnt]	' Send the byte.
  		While !SSPIF		' Wait for send to complete.
		Wend
        SPI_Buf_in[spi_cnt] = SSPBUF    'receive data and put in array
        SSPIF = 0          ' reset flag
next spi_cnt        
'-------------------Calabration-----------------------------------------------
' spi returns a  12 bit number highest is 4095
' if the desplay is 320X240  x = 320  so-- 4095/320 = 12.80
' we must use integer math,  multiply the spi result by 100, 
' then devide that result by the calibration factor  1280 ( 12.80 * 100 )
' adjust this number to your display, then do the same for the Y
'---------------------------------------------------------------------------
     high tp_cs                ' disable touch screen
     ts_y = SPI_Buf_in[1] <<5
     ts_y = 240-(((ts_y +  SPI_Buf_in[2] >>3)*100)/1800)   ' Calibration = 1800 very rough number, change to suit your scteen
     ts_x = SPI_Buf_in[3] <<5
     ts_x = 320-(((ts_x +  SPI_Buf_in[4] >>3)*100)/1244)     
return
'*******************************************************************************
Print_Number:    ' need lcd_x , lcd_y , number, len, 
     temp5 = lcdy
   for i = len to 0 step -1
   char = number dig i  + 48
   gosub putclcdtext
   lcdy = temp5
    next i

return
'*******************************************************************************



'*******************************************************************************

'*******************************************************************************



'*******************************************************************************

TS_Init:       ' Touch initalization
'---SPI ________________________________
'SSPCON1.2 = 1
SSPEN = 1         ' enable SPI pins  = 1
CKP = 0           ' clock idle low
CKE = 1           ' transmit on idle to active transition
SSPIF = 0         ' clear buffer full status
SMP = 0            ' sample in middle of data

Return
'---[INT - interrupt handler]---------------------------------------------------
TS_INT:
 
gosub LCD_HOME
gosub clr_disp
bcolor = white
fcolor = black
 color = red
 sx = 159
 ex = 161
 sy = 119
 ey = 121
gosub fill_rect      'Center dot to check calibration
gosub LCD_HOME
gosub  spi_write
while pen_down = 0
@ printstr2 125,20, "X = "
@ printstr2 125,30, "Y = "
lcdx = 165
lcdy = 20
len = 3
number = ts_x
gosub  print_number
lcdx = 165
lcdy = 30
len = 3
number = ts_y
gosub  print_number   
wend
   
@ INT_RETURN


' ************************************************************
' * receive data from the USB bus                            *
' ************************************************************
DoUSBIn:
   USBBufferCount = USBBufferSizeRX              ' RX buffer size
   USBIn 1, USBBuffer, USBBufferCount, DoUSBIn   ' read data, if available
   return
    
' ************************************************************
' * wait for USB interface to attach                         *
' ************************************************************
DoUSBOut:
   USBBufferCount = USBBufferSizeTX              ' TX buffer size
   USBOut 1, USBBuffer, USBBufferCount, DoUSBOut ' if bus available, transmit data
   return
' ************************************************************
' * main program loop - remember, you must keep the USB      *
' * connection alive with a call to USBService every couple  *
' * of milliseconds or so...                                 *
' ************************************************************   
ProgramStart: 
 gosub lcd_init
 gosub lcd_home
 gosub clr_disp
 pause 3000
 gosub lcd_test
 pause 3000
 gosub clr_disp

 color = blue
 sx = 0
 ex = 319
 sy = 0
 ey = 239
 gosub fill_rect

 color = black
 sx = 0
 ex = 319
 sy = 0
 ey = 70
 gosub fill_rect                

fcolor = white
bcolor = black
@ printstr2 25,20, "Testing SSD2119 Controller"
 gosub lcd_home
 color = black
 sx = 20
 ex = 80
 sy = 90
 ey = 130
 gosub fill_rect

 color = yellow
 sx = 30
 ex = 90
 sy = 100
 ey = 140
 gosub fill_rect      

 color = black
 sx = 20
 ex = 80
 sy = 160
 ey = 200
 gosub fill_rect

 color = red
 sx = 30
 ex = 90
 sy = 170
 ey = 210
 gosub fill_rect  

  color = white
 sx = 195
 ex = 205
 sy = 71
 ey = 239
 gosub fill_rect 
for k = 26 to 30
glc_cx = 160
glc_cy  = 120
glc_r = k
color = magenta
gosub  gl_circ
next k
pause 2000
gosub lcd_home
gosub clr_disp
big = 0
bcolor = white
fcolor = black
@ printstr2 25,5, "Small"
big = 1
@ printstr2 25,20, "Bigger"
big = 2
@ printstr2 25,50, "Biggest"
big = 0


pause 3000
gosub lcd_home
gosub clr_disp

glc_cx = 160
glc_cy  = 120
glc_r = 30
color = green
gosub  gl_circ
gl_x1 = 10
gl_x2 = 310
gl_y1 =  10 
gl_y2 = 230
color = black
gosub gl_rect
gosub lcd_home
bcolor = white
fcolor = black
@ printstr2 25,20, "SSD2119 Controller"
@ printstr2 25,28, "Dave Cutliff "
@ printstr2 25,36, "TFT Color LCD Model Rev 1.0"
@ printstr2 25,44, "320xRGBx240"
@ printstr2 25,60, "PicBasic Pro6.0 "
@ printstr2 25,68, "Sept 8,2010"
gosub ts_init
Loop1:
' gosub DoUSBIn
'  gosub DoUSBOut
goto loop1