BMP To And From Memory

Code Examples ›› TFT ››
 visits
Parent Previous Next

DEMO BMP FILES TO AND FROM FLASH MEMORY

(Download)

Device = 33EP128MC504

Declare Xtal = 150

Declare Auto_Heap_Arrays = On

Declare Auto_Heap_Strings = On

Declare Auto_Variable_Bank_Cross = On

Declare Stack_Expand = On

Declare Watchdog = OFF

Declare Warnings = Off

Declare Access_Upper_64K = On

'================ MCU =======================

$define McuType              1

'================ TFT SCREEN ================

$define TFT_IC               ILI9341

$define TftScreenWidth       320

$define TftScreenHeight      240

$define TftWidthOffset       0

$define TftHeightOffset      0

$define TftPixelCheck        0

$define TFT_COM              SPI_2

$define TFT_COM_Slow         SPI2STAT = 0X0000 : SPI2CON1 = 0X033D : SPI2BUF = 0 : SPI2STAT = 0X8000

$define TFT_COM_Fast         SPI2STAT = 0X0000 : SPI2CON1 = 0X033B : SPI2BUF = 0 : SPI2STAT = 0X8000

$define TFT_RESET            PORTC.2

$define TFT_CS               PORTC.9

$define TFT_DC               PORTC.1

$define TFT_MOSI             PORTC.6

$define _TFT_MOSI            _PORTC.6

$define TFT_MISO             PORTC.5

$define _TFT_MISO            _PORTC.5

$define TFT_SCLK             PORTC.7

$define _TFT_SCLK            _PORTC.7

Include                      "TftLib\TFT_Graphic_Lib.inc"

Include                      "TftLib\Colors\Colors.inc"

Include                      "TftLib\Drivers\Drivers.inc"

Include                      "TftLib\Drivers\ILI9341.inc"

Include                      "TftLib\System\System.inc"

Include                      "TftLib\System\System_SPI_V4.inc"

Include                      "TftLib\Shapes\Shapes.inc"

Include                      "TftLib\Shapes\Shapes_SPI_V1.inc"

'================ SD CARD ===================

$define SDCardUsed           1

$define SDCardFatUsed        1

$define SD_COM               SPI_1

$define SD_CS                PORTA.1

$define SD_SDO               PORTA.4

$define _SD_SDO              _PORTA.4

$define SD_SDI               PORTA.9

$define _SD_SDI              _PORTA.9

$define SD_CLK               PORTC.3

$define _SD_CLK              _PORTC.3

Include                      "TftLib\SdCard\SdCard.inc"

Include                      "TftLib\SdCard\Fat.inc"

Include                      "TftLib\SdCard\SdCard_SPI_V4.inc"

'================ MEMORY ====================

$define MemoryType           2

$define MEM_PAGE_SIZE        256

$define MEM_SECTOR_SIZE      4096

$define MEM_SECTOR_COUNT     2048

$define MEM_FILE_COUNT       256

$define MEM_WRITE_DELAY      5

$define MEM_COM              SPI_1

$define MEM_CS               PORTA.7

$define MEM_MOSI             PORTA.4

$define _MEM_MOSI            _PORTA.4

$define MEM_MISO             PORTA.9

$define _MEM_MISO            _PORTA.9

$define MEM_SCLK             PORTC.3

$define _MEM_SCLK            _PORTC.3

Include                      "TftLib\Memory\Memory.inc"

Include                      "TftLib\Memory\Flash.inc"

Include                      "TftLib\Memory\Memory_SPI_V3.inc"

Include                      "TftLib\Memory\Flash_SPI_V1.inc"

'================ TFT TOUCH =================

$define TOUCH_IC             XPT2046

$define Z_Threshold          500

$define TouchAveragePoints   2

$define TouchMedianDistance  8

$define TOUCH_COM            SPI_SW

$define T_CS                 PORTC.8

$define T_IRQ                PORTA.8

$define T_MOSI               PORTC.6

$define _T_MOSI              _PORTC.6

$define T_MISO               PORTC.5

$define _T_MISO              _PORTC.5

$define T_SCLK               PORTC.7

$define _T_SCLK              _PORTC.7

Include                      "TftLib\Touch\Touch.inc"

Include                      "TftLib\Touch\XPT2046.inc"

'================ SPRITES ===================

$define SpritesUsed          1

$define SpriteBufferSize     910

$define SpriteBufferNumber   3

Include                      "TftLib\Sprites\Sprites.inc"

Include                      "TftLib\Sprites\Sprites_SPI_V2.inc"

'=============== SND FONT ===================

$define FontSNDUsed          1

Include                      "TftLib\Fonts\SND\F0_SND_8x8_Basic.inc"

$define FontSmooth           0

$define FontMaxSpace         8

$define FontMaxPixels        8

Include                      "TftLib\Fonts\SND.inc"

Include                      "TftLib\Fonts\SND_SPI_V1.inc"

'=============== BDF FONT ===================

$define FontBDFUsed          0

Symbol LED = PORTC.0 : Output LED : Low LED

Symbol BT = PORTA.0 : Input BT

'Generated with Excel table

$define TickMenu_List_Front         0

$define TickMenu_List_Back          1

$define TickMenu_List_Kitchen       2

$define TickMenu_List_Porch         3

$define TickMenu_List_All           4

$define TickMenu_Mark_Empty_Front   5

$define TickMenu_Mark_Empty_Back    6

$define TickMenu_Mark_Empty_Kitchen 7

$define TickMenu_Mark_Empty_Porch   8

$define TickMenu_Mark_Empty_All     9

$define Button_Up_Set               10

$define TickMenu_List_Front_Erase   11

$define TickMenu_List_Back_Erase    12

$define TickMenu_List_Kitchen_Erase 13

$define TickMenu_List_Porch_Erase   14

$define TickMenu_List_All_Erase     15

$define TickMenu_Mark_Check_Front   16

$define TickMenu_Mark_Check_Back    17

$define TickMenu_Mark_Check_Kitchen 18

$define TickMenu_Mark_Check_Porch   19

$define TickMenu_Mark_Check_All     20

$define Button_Down_Set             21

$define Tree_TickMenu_Show          22

$define Tree_Button_Door_Show       23

$define Button_Down_Lock            24

$define Button_Down_Unlock          25

$define Button_Down_Door            26

$define Tree_TickMenu_Hide          27

$define Tree_Button_Door_Hide       28

$define Button_Up_Door              29

$define Button_Up_Lock              30

$define Button_Up_Unlock            31

$define Button_Hide_Lock            32

$define Button_Hide_Unlock          33

$define Button_Hide_Set             34

$define MainScreen                  35

$define Message_Clear               36

Dim sFileName As String * 12

Dim bCounter1 As Byte

Dim bCounter2 As Byte

Dim wBitVariable As Word

Dim ButtonDoor As wBitVariable.0

Dim ButtonLock As wBitVariable.1    = 1

Dim ButtonUnlock As wBitVariable.2  = 0

Dim ButtonSet As wBitVariable.3

Dim TickFront As wBitVariable.4

Dim TickBack As wBitVariable.5

Dim TickKitchen As wBitVariable.6

Dim TickPorch As wBitVariable.7

Dim TickAll As wBitVariable.8

Main:

Clear

SetCrystal()

SetPins()

TftBmpMemSet()

TftSetSndFont(0,0)

TftSetUp(0,0)

TftResetScreen(BLACK)

TransferFilesToFlash()

TftTouchCalibration(3)

'Mask full screen transfer lag by switching off the screen during transfer

TftDisplayOff()

TftBmpFromMemIndex(MainScreen, 0, 0)

TftDisplayOn()

While 1 = 1

'Touch IRQ triggered

If T_IRQ = 0 Then

'if touch ADC values are within valid range

If TftTouchGetCoordinates(1) = 1 Then

'check if valid menu has been selected

ClickMenu(wTouchToPointX, wTouchToPointY)

'Debounce

DelayMS 300

EndIf

EndIf

Wend

End

Proc TransferFilesToFlash()

Dim wTemp As Dword

bCounter1 = 0

Do

If File_Init() = cErrOK Then Break

Inc bCounter1

DelayMS 10

Loop Until bCounter1 = 255

If bCounter1 = 255 Then

'Sd Card initialization fail

TftPrintSndString("SD FAIL", 1, 5,13,1, GREEN,BLACK,0)

While 1 = 1 : Wend

EndIf

'Some delay to avoid accidental FLASH erasure

TftPrintSndString("File transfer in  ", 1, 5,13,1, GREEN,BLACK,0)

For bCounter1 = 4 DownTo 0

TftPrintSndInteger(bCounter1,1, 1, 23,13,1, GREEN,BLACK,0)

DelayMS 1000

Next

TftPrintSndString("Format memory start", 1, 5,13,1, GREEN,BLACK,0)

TftBmpMemFormat()

TftPrintSndString("Format memory done ", 1, 5,13,1, GREEN,BLACK,0)

DelayMS 1000

bCounter2 = 0

'Generate file names as in SD card and transfer

For bCounter1 = 0 To 36

sFileName = "P" + Str$(Dec3 bCounter1) + ".BMP"

TftPrintSndString(sFileName, 1, 5,12,1, GREEN,BLACK,0)

TftPrintSndString("                ", 1, 14,12,1, GREEN,BLACK,0)

Inc bCounter2

Select TftBmpSdToMem(sFileName)

Case 0

Dec bCounter2

Case 1

TftPrintSndString("SD NO RESPONSE  ", 1, 14,12,1, GREEN,BLACK,0)

DelayMS 1000

Case 2

TftPrintSndString("NO FAT16/FAT32  ", 1, 14,12,1, GREEN,BLACK,0)

DelayMS 1000

Case 3

TftPrintSndString("FILE NOT FOUND  ", 1, 14,12,1, GREEN,BLACK,0)

DelayMS 1000

Case 4

TftPrintSndString("FILE IN USE     ", 1, 14,12,1, GREEN,BLACK,0)

DelayMS 1000

Case 5

TftPrintSndString("READ/WRITE ERROR", 1, 14,12,1, GREEN,BLACK,0)

DelayMS 1000

Case 6

TftPrintSndString("MEMORY ERROR    ", 1, 14,12,1, GREEN,BLACK,0)

DelayMS 1000

Case 7

TftPrintSndString("NO FREE SPACE   ", 1, 14,12,1, GREEN,BLACK,0)

DelayMS 1000

Case Else

TftPrintSndString("UNKNOWN ERROR   ", 1, 14,12,1, GREEN,BLACK,0)

DelayMS 1000

EndSelect

Next

TftPrintSndString("Done with " + Str$(Dec3 bCounter2) + " errors", 1, 5,11,1, GREEN,BLACK,0)

DelayMS 1000

EndProc

Proc ClickMenu(wPointX As Word, wPointY As Word)

'Button door

If wPointX > 17 And wPointX < 106 And wPointY > 189 And wPointY < 221 Then

Toggle ButtonDoor

ButtonDoor_Change()

ExitProc

EndIf

'Button lock

If wPointX > 127 And wPointX < 216 And wPointY > 189 And wPointY < 221 Then

If ButtonDoor = 1 Then

Toggle ButtonLock

ButtonLock_Change()

EndIf

ExitProc

EndIf

'Button unlock

If wPointX > 127 And wPointX < 216 And wPointY > 145 And wPointY < 177 Then

If ButtonDoor = 1 Then

Toggle ButtonUnlock

ButtonUnlock_Change()

EndIf

ExitProc

EndIf

'Tick front

If wPointX > 233 And wPointX < 265 And wPointY > 194 And wPointY < 219 Then

If ButtonDoor = 1 Then

Toggle TickFront

TickFront_Change()

EndIf

ExitProc

EndIf

'Tick back

If wPointX > 233 And wPointX < 265 And wPointY > 163 And wPointY < 188 Then

If ButtonDoor = 1 Then

Toggle TickBack

TickBack_Change()

EndIf

ExitProc

EndIf

'Tick kitchen

If wPointX > 233 And wPointX < 265 And wPointY > 134 And wPointY < 159 Then

If ButtonDoor = 1 Then

Toggle TickKitchen

TickKitchen_Change()

EndIf

ExitProc

EndIf

'Tick porch

If wPointX > 233 And wPointX < 265 And wPointY > 104 And wPointY < 129 Then

If ButtonDoor = 1 Then

Toggle TickPorch

TickPorch_Change()

EndIf

ExitProc

EndIf

'Tick all

If wPointX > 233 And wPointX < 265 And wPointY > 74 And wPointY < 99 Then

If ButtonDoor = 1 Then

Toggle TickAll

TickAll_Change()

EndIf

ExitProc

EndIf

'Button Set

If wPointX > 233 And wPointX < 318 And wPointY > 12 And wPointY < 45 Then

If ButtonDoor = 1 Then

TickButtonSet_Change()

EndIf

ExitProc

EndIf

EndProc

Proc TickButtonSet_Change()

TftBmpFromMemIndex(Button_Down_Set, 233, 12)

DelayMS 1000

TftBmpFromMemIndex(Button_Up_Set, 233, 12)

If ButtonLock = 1 Then

TftBmpFromMemIndex(Message_Clear, 59, 221)

TftPrintSndString("Door LOCK ... Done", 1,10,28,1, CARDINAL, BLACK,1)

Else

TftBmpFromMemIndex(Message_Clear, 59, 221)

TftPrintSndString("Door UNLOCK ... Done", 1,9,28,1, CARDINAL, BLACK,1)

EndIf

EndProc

Proc TickAll_Change()

If TickAll = 0 Then

TftBmpFromMemIndex(TickMenu_Mark_Empty_All, 233, 74)

wBitVariable = wBitVariable & %1111111100001111

TickPorch_Change()

TickKitchen_Change()

TickBack_Change()

TickFront_Change()

Else

TftBmpFromMemIndex(TickMenu_Mark_Check_All, 233, 74)

wBitVariable = wBitVariable | %0000000011110000

TickPorch_Change()

TickKitchen_Change()

TickBack_Change()

TickFront_Change()

EndIf

EndProc

Proc TickPorch_Change()

If TickPorch = 0 Then

TftBmpFromMemIndex(TickMenu_Mark_Empty_Porch, 233, 104)

TftBmpFromMemIndex(TickMenu_Mark_Empty_All, 233, 74)

TickAll = 0

Else

TftBmpFromMemIndex(TickMenu_Mark_Check_Porch, 233, 104)

If (wBitVariable & %0000000011110000) = %11110000 Then

TftBmpFromMemIndex(TickMenu_Mark_Check_All, 233, 74)

EndIf

EndIf

EndProc

Proc TickKitchen_Change()

If TickKitchen = 0 Then

TftBmpFromMemIndex(TickMenu_Mark_Empty_Kitchen, 233, 134)

TftBmpFromMemIndex(TickMenu_Mark_Empty_All, 233, 74)

TickAll = 0

Else

TftBmpFromMemIndex(TickMenu_Mark_Check_Kitchen, 233, 134)

If (wBitVariable & %0000000011110000) = %11110000 Then

TftBmpFromMemIndex(TickMenu_Mark_Check_All, 233, 74)

EndIf

EndIf

EndProc

Proc TickBack_Change()

If TickBack = 0 Then

TftBmpFromMemIndex(TickMenu_Mark_Empty_Back, 233, 163)

TftBmpFromMemIndex(TickMenu_Mark_Empty_All, 233, 74)

TickAll = 0

Else

TftBmpFromMemIndex(TickMenu_Mark_Check_Back, 233, 163)

If (wBitVariable & %0000000011110000) = %11110000 Then

TftBmpFromMemIndex(TickMenu_Mark_Check_All, 233, 74)

EndIf

EndIf

EndProc

Proc TickFront_Change()

If TickFront = 0 Then

TftBmpFromMemIndex(TickMenu_Mark_Empty_Front, 233, 194)

TftBmpFromMemIndex(TickMenu_Mark_Empty_All, 233, 74)

TickAll = 0

Else

TftBmpFromMemIndex(TickMenu_Mark_Check_Front, 233, 194)

If (wBitVariable & %0000000011110000) = %11110000 Then

TftBmpFromMemIndex(TickMenu_Mark_Check_All, 233, 74)

EndIf

EndIf

EndProc

Proc ButtonUnlock_Change()

If ButtonUnlock = 0 Then

ButtonLock = 1

TftBmpFromMemIndex(Button_Up_Unlock, 127, 145)

TftBmpFromMemIndex(Button_Down_Lock, 127, 189)

Else

ButtonLock = 0

TftBmpFromMemIndex(Button_Down_Unlock, 127, 145)

TftBmpFromMemIndex(Button_Up_Lock, 127, 189)

EndIf

EndProc

Proc ButtonLock_Change()

If ButtonLock = 0 Then

ButtonUnlock = 1

TftBmpFromMemIndex(Button_Down_Unlock, 127, 145)

TftBmpFromMemIndex(Button_Up_Lock, 127, 189)

Else

ButtonUnlock = 0

TftBmpFromMemIndex(Button_Up_Unlock, 127, 145)

TftBmpFromMemIndex(Button_Down_Lock, 127, 189)

EndIf

EndProc

Proc ButtonDoor_Change()

If ButtonDoor = 0 Then

TftBmpFromMemIndex(Button_Hide_Set, 233, 12)

TftBmpFromMemIndex(TickMenu_List_All_Erase, 233, 74)

TftBmpFromMemIndex(TickMenu_List_Porch_Erase, 233, 104)

TftBmpFromMemIndex(TickMenu_List_Kitchen_Erase, 233, 134)

TftBmpFromMemIndex(Button_Hide_Unlock, 127, 145)

TftBmpFromMemIndex(TickMenu_List_Back_Erase, 233, 163)

TftBmpFromMemIndex(Tree_TickMenu_Hide, 216, 87)

TftBmpFromMemIndex(Tree_Button_Door_Hide, 106, 162)

TftBmpFromMemIndex(Button_Hide_Lock, 127, 189)

TftBmpFromMemIndex(TickMenu_List_Front_Erase, 233, 194)

TftBmpFromMemIndex(Button_Up_Door, 17, 189)

TftBmpFromMemIndex(Message_Clear, 59, 221)

Else

TftBmpFromMemIndex(Button_Down_Door, 17, 189)

TftBmpFromMemIndex(Tree_Button_Door_Show, 106, 162)

If ButtonLock = 0 Then

TftBmpFromMemIndex(Button_Up_Lock, 127, 189)

Else

TftBmpFromMemIndex(Button_Down_Lock, 127, 189)

EndIf

If ButtonUnlock = 0 Then

TftBmpFromMemIndex(Button_Up_Unlock, 127, 145)

Else

TftBmpFromMemIndex(Button_Down_Unlock, 127, 145)

EndIf

TftBmpFromMemIndex(Tree_TickMenu_Show, 216, 87)

If TickFront = 0 Then

TftBmpFromMemIndex(TickMenu_Mark_Empty_Front, 233, 194)

Else

TftBmpFromMemIndex(TickMenu_Mark_Check_Front, 233, 194)

EndIf

TftBmpFromMemIndex(TickMenu_List_Front, 264, 201)

If TickBack = 0 Then

TftBmpFromMemIndex(TickMenu_Mark_Empty_Back, 233, 163)

Else

TftBmpFromMemIndex(TickMenu_Mark_Check_Back, 233, 163)

EndIf

TftBmpFromMemIndex(TickMenu_List_Back, 264, 166)

If TickKitchen = 0 Then

TftBmpFromMemIndex(TickMenu_Mark_Empty_Kitchen, 233, 134)

Else

TftBmpFromMemIndex(TickMenu_Mark_Check_Kitchen, 233, 134)

EndIf

TftBmpFromMemIndex(TickMenu_List_Kitchen, 264, 136)

If TickPorch = 0 Then

TftBmpFromMemIndex(TickMenu_Mark_Empty_Porch, 233, 104)

Else

TftBmpFromMemIndex(TickMenu_Mark_Check_Porch, 233, 104)

EndIf

TftBmpFromMemIndex(TickMenu_List_Porch, 264, 106)

If TickAll = 0 Then

TftBmpFromMemIndex(TickMenu_Mark_Empty_All, 233, 74)

Else

TftBmpFromMemIndex(TickMenu_Mark_Check_All, 233, 74)

EndIf

TftBmpFromMemIndex(TickMenu_List_All, 264, 75)

TftBmpFromMemIndex(Button_Up_Set, 233, 12)

EndIf

EndProc

'Set Fosc

Proc SetCrystal()

Clear

'Crystal = 16 MHz --> PLLDIV = 68 for 140MHz / PLLDIV = 73 For 150MHz

CLKDIV = %0000000000000010 'PLLPRE = 2 ; PLLPOST = 0

PLLFBD.Byte0 = 73 '--> 150MHz Fp

'Wait for oscillator PLL lock

While OSCCON.5 = 0 : Wend

DelayMS 100

EndProc

Proc SetPins()

'Set all digital

ANSELA = 0

ANSELB = 0

ANSELC = 0

'RP55 to SCK2 / RP54 To SDO2 / RPI53 to SDI2

RPOR5.Byte1 = %00001001     'RP55

RPOR5.Byte0 = %00001000     'RP54

RPINR22.Byte0 = %00110101   'SDI2

RPINR22.Byte1 = %00110111   'SCK2

SPI2CON1 = 0x033B        '8b / SPRE[2:0] 2:1 / PPRE[1:0] 1:1

SPI2STAT = 0x8000

SPI1CON1 = 0x033B        '8b / SPRE[2:0] 2:1 / PPRE[1:0] 1:1

SPI1STAT = 0x8000

EndProc

Config FICD = ICS_PGD1, JTAGEN_OFF

Config FPOR = ALTI2C1_OFF, ALTI2C2_OFF, WDTWIN_WIN25

Config FWDT = FWDTEN_OFF, PLLKEN_ON, WDTPOST_PS16384, WDTPRE_PR128, WINDIS_OFF

Config FOSC = FCKSM_CSECMD, IOL1WAY_OFF, OSCIOFNC_OFF, POSCMD_HS

Config FOSCSEL = FNOSC_PRIPLL, IESO_ON, PWMLOCK_OFF

Config FGS = GCP_OFF, GWRP_OFF

Created with the Personal Edition of HelpNDoc: Maximize Your CHM Help File Capabilities with HelpNDoc