Code:
'****************************************************************
'* Name : SD_PicFrame_TFT.BAS *
'* Author : Dave Cutliff *
'* Notice : Copyright (c) 2010 You can take all you want *
'* : All Rights Reserved *
'* Date : 9/21/2010 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
DEFINE OSC 20
DEFINE LOADER_USED 1
ADCON1 = $F 'port A digital
CMCON = 7 'PortA Digital
INTCON2.7 = 0 'weak pullups portB
Include "SDFSR.pbp"
SDC_UseHardSPI = TRUE
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
rgb var word
cnt var word
first 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
b var byte
c var byte
i var long
j var long
k var long
m var byte
n var byte
p 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
tmp_color var word
tmp1_color var word
buffer var byte[10]
TempData var byte[3]
NoOfChar var byte
TextBuffer var byte[64]
File1 var byte[11]
File2 var byte[11]
File3 var byte[11]
File4 var byte[11]
File5 var byte[11]
File6 var byte[11]
FileNum var byte
BMP_data_offset var byte[4]
picdat var byte
lcdcharloop var byte
lcdchardata var byte[8]
tp_cs var PORTB.5
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
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
'******************************************************************************
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
'*******************************************************************************
ProgramStart:
gosub lcd_init
gosub lcd_home
gosub clr_disp
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
pause 2000
gosub lcd_home
gosub clr_disp
Gosub FSInit
@ printstr2 25,20, "INT: "
lcdx = 50
lcdy = 20
len = 1
number = FAT_error
gosub print_number
lcdx = 80
lcdy = 20
len = 2
number = SDC_status
gosub print_number
lcdx = 120
lcdy = 20
len = 2
number = SDC_response
gosub print_number
If (FAT_error != 0) Then Stop
'Display card directory
lcdx = 50
row = 70
filenum = 1
Gosub FINDfirst ' Find first file on card
While (FAT_error = 0)
' number of char = 11
for b = 0 to 10
select case filenum
case 1
for c = 0 to 10
file1[c] = FAT_FileName[c]
next c
case 2
for c = 0 to 10
file2[c] = FAT_FileName[c]
next c
case 3
for c = 0 to 10
file3[c] = FAT_FileName[c]
next c
case 4
for c = 0 to 10
file4[c] = FAT_FileName[c]
next c
case 5
for c = 0 to 10
file5[c] = FAT_FileName[c]
next c
end select
next b
lcdx = 50
for c = 0 to 10
char = FAT_FileName[c]
lcdy = row
gosub putclcdtext
next c
lcdy = row
Gosub FINDnext ' Find next file on card
filenum = filenum + 1
row = row + 10
Wend
filenum = filenum - 1 'number of file on card
pause 2000
ImageLoop:
for p = 1 to filenum
select case p
case 1
for c = 0 to 10
FAT_FileName[c] = file1[c]
next c
case 2
for c = 0 to 10
FAT_FileName[c] = file2[c]
next c
case 3
for c = 0 to 10
FAT_FileName[c] = file3[c]
next c
case 4
for c = 0 to 10
FAT_FileName[c] = file4[c]
next c
case 5
for c = 0 to 10
FAT_FileName[c] = file5[c]
next c
end select
' Open a file for read
FAT_mode = "r" ' Read mode
Gosub FSfopen ' Open file pointed to by Byte array FAT_FileName
If (FAT_error != 0) Then Stop
' Read and display the whole file
FAT_count = 512 ' Read 512 byte to buffer at a time
gosub clr_disp
gosub lcd_home
lcdx = 0
lcdy = 0
x = 0
cnt = 0
rgb = 0
first = 0
gl_x = 0
gl_y = 240
Gosub FSfread
if first = 0 then
cnt = fat_dest[$0A] 'read where data starts
first = 1
else
cnt = 0
endif
While (FAT_error = 0)
While cnt < 512
tmp_color = 0
tmp1_color = 0
select case rgb
case 0
tmp_color = fat_dest[cnt]>>3
dat = tmp_color
k =k + 1
case 1
tmp_color = fat_dest[cnt]>>2
tmp1_color = tmp_color<< 5
dat = dat + tmp1_color
k =k + 1
case 2
tmp_color = fat_dest[cnt]>>3
tmp1_color = tmp_color<< 11
color = dat + tmp1_color
end select
cnt = cnt + 1
rgb = rgb + 1
if rgb = 3 then
y = gl_y
gosub setdot
color = 0
x = x + 1
rgb = 0
if x >= 320 then
x = 0
gl_y = gl_y - 1
endif
endif
wend
FAT_count = 512 ' Read 512 byte to buffer at a time
cnt = 0
Gosub FSfread
Wend
pause 5000
pause 5000
next p
goto imageloop
Loop1:
' gosub DoUSBIn
' gosub DoUSBOut
goto loop1
Bookmarks