Touch Menu

Code Examples ›› TFT ››
 visits
Parent Previous Next

DEMO TOUCH MENU FROM FLASH MEMORY

(Download)

Device = 18F67K22

Declare Xtal = 64

Declare Auto_Heap_Arrays = On

Declare Auto_Heap_Strings = On

Declare Auto_Variable_Bank_Cross = On

Declare Watchdog = OFF

Declare Warnings = Off

Declare Optimiser_Level = 3

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

$define McuType              0

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

$define TFT_IC               ST7789V

$define TftScreenWidth       320

$define TftScreenHeight      240

$define TftWidthOffset       0

$define TftHeightOffset      0

$define TftPixelCheck        0

$define TFT_COM              SPI_1

$define TFT_COM_Slow

$define TFT_COM_Fast

$define TFT_RESET            PORTC.7

$define TFT_CS               PORTF.7

$define TFT_DC               PORTC.2

$define TFT_MOSI             PORTC.5

$define _TFT_MOSI            _PORTC.5

$define TFT_MISO             PORTC.4

$define _TFT_MISO            _PORTC.4

$define TFT_SCLK             PORTC.3

$define _TFT_SCLK            _PORTC.3

Include                      "TftLib\TFT_Graphic_Lib.inc"

Include                      "TftLib\Colors\Colors.inc"

Include                      "TftLib\Drivers\Drivers.inc"

Include                      "TftLib\Drivers\ST7789V.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_2

$define SD_CS                PORTG.3

$define SD_SDO               PORTD.4

$define _SD_SDO              _PORTD.4

$define SD_SDI               PORTD.5

$define _SD_SDI              _PORTD.5

$define SD_CLK               PORTD.6

$define _SD_CLK              _PORTD.6

Include                      "TftLib\SdCard\SdCard.inc"

Include                      "TftLib\SdCard\Fat.inc"

'Include                      "TftLib\SdCard\NoFat.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_2

$define MEM_CS               PORTA.2

$define MEM_MOSI             PORTD.4

$define _MEM_MOSI            _PORTD.4

$define MEM_MISO             PORTD.5

$define _MEM_MISO            _PORTD.5

$define MEM_SCLK             PORTD.6

$define _MEM_SCLK            _PORTD.6

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                 PORTG.1

$define T_IRQ                PORTA.5

$define T_MOSI               PORTC.5

$define _T_MOSI              _PORTC.5

$define T_MISO               PORTC.4

$define _T_MISO              _PORTC.4

$define T_SCLK               PORTC.3

$define _T_SCLK              _PORTC.3

Include                      "TftLib\Touch\Touch.inc"

Include                      "TftLib\Touch\XPT2046.inc"

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

$define SpritesUsed          0

'=============== 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

'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

'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 2000

Case 2

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

DelayMS 2000

Case 3

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

DelayMS 2000

Case 4

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

DelayMS 2000

Case 5

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

DelayMS 2000

Case 6

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

DelayMS 2000

Case 7

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

DelayMS 2000

Case Else

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

DelayMS 2000

EndSelect

Next

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

DelayMS 2000

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

OSCTUNE.6 = 1

DelayMS 100

EndProc

Proc SetPins()

'Set all digital

ANCON0 = 0

ANCON1 = 0

ANCON2 = 0

SSP1STAT.6 = 1

SSP1CON1 = %00100000

SSP2STAT.6 = 1

SSP2CON1 = %00100000

EndProc

Config_Start

RETEN = On        ;Enabled

INTOSCSEL = Low        ;LF-INTOSC in Low-power mode during Sleep

SOSCSEL = Dig        ;digital

XINST = OFF        ;Disabled

FOSC = EC2        ;HS oscillator (High power, 16 MHz - 25 MHz)

PLLCFG = On        ;Enabled

FCMEN = OFF        ;Disabled

IESO = OFF        ;Disabled

PWRTEN = OFF        ;Disabled

BOREN = OFF        ;Disabled in hardware, SBOREN disabled

BORV = 0        ;3.0V

BORPWR = High        ;BORMV set to high power level

WDTEN = OFF        ;WDT disabled in hardware; SWDTEN bit disabled

WDTPS = 1048576        ;1:1048576

RTCOSC = SOSCREF        ;RTCC uses SOSC

CCP2MX = PORTBE        ;RC1

MSSPMSK = MSK7        ;7 Bit address masking mode

MCLRE = On        ;MCLR Enabled, RG5 Disabled

STVREN = On        ;Enabled

BBSIZ = BB2K        ;2K word Boot Block size

Debug = OFF        ;Disabled

Cp0 = OFF        ;Disabled

CP1 = OFF        ;Disabled

CP2 = OFF        ;Disabled

CP3 = OFF        ;Disabled

CP4 = OFF        ;Disabled

CP5 = OFF        ;Disabled

CP6 = OFF        ;Disabled

CP7 = OFF        ;Disabled

CPB = OFF        ;Disabled

CPD = OFF        ;Disabled

WRT0 = OFF        ;Disabled

WRT1 = OFF        ;Disabled

WRT2 = OFF        ;Disabled

WRT3 = OFF        ;Disabled

WRT4 = OFF        ;Disabled

WRT5 = OFF        ;Disabled

WRT6 = OFF        ;Disabled

WRT7 = OFF        ;Disabled

WRTC = OFF        ;Disabled

WRTB = OFF        ;Disabled

WRTD = OFF        ;Disabled

EBRT0 = OFF        ;Disabled

EBRT1 = OFF        ;Disabled

EBRT2 = OFF        ;Disabled

EBRT3 = OFF        ;Disabled

EBRT4 = OFF        ;Disabled

EBRT5 = OFF        ;Disabled

EBRT6 = OFF        ;Disabled

EBRT7 = OFF        ;Disabled

EBRTB = OFF        ;Disabled

Config_End

Created with the Personal Edition of HelpNDoc: Generate EPub eBooks with ease