Touch Panel Library
The mikroBasic PRO for dsPIC30/33 and PIC24 provides a library for working with Touch Panel.
Library Dependency Tree

External dependencies of Touch Panel Library
The following variables must be defined in all projects using Touch Panel Library: | Description : | Example : |
---|---|---|
dim DriveA as sbit sfr external |
DriveA line. | dim DriveA as sbit at LATC13_bit |
dim DriveB as sbit sfr external |
DriveB line. | dim DriveB as sbit at LATC14_bit |
dim DriveA_Direction as sbit sfr external |
Direction of the DriveA pin. | dim DriveA_Direction as sbit at TRISC13_bit |
dim DriveB_Direction as sbit sfr external |
Direction of the DriveB pin. | dim DriveB_Direction as sbit at TRISC14_bit |
Library Routines
- TP_Init
- TP_Set_ADC_Threshold
- TP_Press_Detect
- TP_Get_Coordinates
- TP_Calibrate_Bottom_Left
- TP_Calibrate_Upper_Right
- TP_Get_Calibration_Consts
- TP_Set_Calibration_Consts
TP_Init
Prototype |
sub procedure TP_Init(dim display_width as word, dim display_height as word, dim readX_ChNo as byte, dim readY_ChNo as byte) |
---|---|
Description |
Initialize touch panel display. Default touch panel ADC threshold value is set to 3900. |
Parameters |
|
Returns |
Nothing. |
Requires |
Before calling this function initialize ADC module. |
Example |
ADC1_Init() ' Initalize ADC module TP_Init(128, 64, 6, 7) ' Initialize touch panel, dimensions 128x64 |
Notes |
None. |
TP_Set_ADC_Threshold
Prototype |
sub procedure TP_Set_ADC_Threshold(dim threshold as word) |
---|---|
Description |
Set custom ADC threshold value, call this function after |
Parameters |
|
Returns |
Nothing. |
Requires |
|
Example |
TP_Set_ADC_Threshold(3900) ' Set touch panel ADC threshold |
Notes |
None. |
TP_Press_Detect
Prototype |
sub function TP_Press_Detect() as byte |
---|---|
Description |
Detects if the touch panel has been pressed. |
Parameters |
None. |
Returns |
|
Requires |
Global variables :
|
Example |
' Touch Panel module connections dim DriveA as sbit at LATC13_bit DriveB as sbit at LATC14_bit DriveA_Direction as sbit at TRISC13_bit DriveB_Direction as sbit at TRISC14_bit ' End Touch Panel module connections if (TP_Press_Detect() <> 0) then ... end if |
Notes |
None. |
TP_Get_Coordinates
Prototype |
sub function TP_Get_Coordinates(dim byref x_coordinate as word, dim byref y_coordinate as word) as byte |
---|---|
Description |
Get touch panel coordinates and store them in |
Parameters |
|
Returns |
|
Requires |
Nothing. |
Example |
if (TP_Get_Coordinates(@x_coord, @y_coord) = 0) then ... end if |
Notes |
None. |
TP_Calibrate_Bottom_Left
Prototype |
sub procedure TP_Calibrate_Bottom_Left() |
---|---|
Description |
Calibrate bottom left corner of the touch Panel. |
Parameters |
None. |
Returns |
Nothing. |
Requires |
Nothing. |
Example |
TP_Calibrate_Bottom_Left() ' Calibration of bottom left corner |
Notes |
None. |
TP_Calibrate_Upper_Right
Prototype |
sub procedure TP_Calibrate_Upper_Right() |
---|---|
Description |
Calibrate upper right corner of the touch Panel. |
Parameters |
None. |
Returns |
Nothing. |
Requires |
Nothing. |
Example |
TP_Calibrate_Upper_Right() ' Calibration of upper right corner |
Notes |
None. |
TP_Get_Calibration_Consts
Prototype |
sub procedure TP_Get_Calibration_Consts(dim byref x_min as word, dim byref x_max as word, dim byref y_min as word, dim byref y_max as word) |
---|---|
Description |
Gets calibration constants after calibration is done and stores them in |
Parameters |
|
Returns |
Nothing. |
Requires |
Nothing. |
Example |
TP_Get_Calibration_Consts(@x_min, @y_min, @x_max, @y_max) ' Get calibration constants |
Notes |
None. |
TP_Set_Calibration_Consts
Prototype |
sub procedure TP_Set_Calibration_Consts(dim x_min as word, dim x_max as word, dim y_min as word, dim y_max as word) |
---|---|
Description |
Sets calibration constants. |
Parameters |
|
Returns |
Nothing. |
Requires |
Nothing. |
Example |
TP_Set_Calibration_Consts(148, 3590, 519, 3370) ' Set calibration constants |
Notes |
None. |
Library Example
The following drawing demo tests routines of the Touch Panel library :
program TouchPanelCalibrationAndWrite ' Glcd module connections dim GLCD_D7 as sbit at RD3_bit GLCD_D6 as sbit at RD2_bit GLCD_D5 as sbit at RD1_bit GLCD_D4 as sbit at RD0_bit GLCD_D3 as sbit at RB3_bit GLCD_D2 as sbit at RB2_bit GLCD_D1 as sbit at RB1_bit GLCD_D0 as sbit at RB0_bit GLCD_D7_Direction as sbit at TRISD3_bit GLCD_D6_Direction as sbit at TRISD2_bit GLCD_D5_Direction as sbit at TRISD1_bit GLCD_D4_Direction as sbit at TRISD0_bit GLCD_D3_Direction as sbit at TRISB3_bit GLCD_D2_Direction as sbit at TRISB2_bit GLCD_D1_Direction as sbit at TRISB1_bit GLCD_D0_Direction as sbit at TRISB0_bit dim GLCD_CS1 as sbit at LATB4_bit GLCD_CS2 as sbit at LATB5_bit GLCD_RS as sbit at LATF0_bit GLCD_RW as sbit at LATF1_bit GLCD_EN as sbit at LATF4_bit GLCD_RST as sbit at LATF5_bit dim GLCD_CS1_Direction as sbit at TRISB4_bit GLCD_CS2_Direction as sbit at TRISB5_bit GLCD_RS_Direction as sbit at TRISF0_bit GLCD_RW_Direction as sbit at TRISF1_bit GLCD_EN_Direction as sbit at TRISF4_bit GLCD_RST_Direction as sbit at TRISF5_bit ' eEnd Glcd module connections ' Touch Panel module connections dim DriveA as sbit at LATC13_bit DriveB as sbit at LATC14_bit DriveA_Direction as sbit at TRISC13_bit DriveB_Direction as sbit at TRISC14_bit ' end Touch Panel module connections dim write_erase as bit pen_size as byte x_coord, y_coord as word write_msg, clear_msg, erase_msg as char[5] ' GLCD menu messages sub procedure Initialize() ADPCFG = 0xFF3F ' set AN6 and AN7 channel pins as analog DriveA_Direction = 0 ' Set DriveA pin as output DriveB_Direction = 0 ' Set DriveB pin as output Glcd_Init() ' Initialize GLCD Glcd_Fill(0) ' Clear GLCD ADC1_Init() ' Initialize ADC TP_Init(128, 64, 6, 7) ' Initialize touch panel TP_Set_ADC_Threshold(3900) ' Set touch panel ADC threshold end sub sub procedure Calibrate() Glcd_Dot(0,63,1) ' Draw bottom left dot Glcd_Write_Text("TOUCH BOTTOM LEFT",12,3,1) TP_Calibrate_Bottom_Left() ' Calibration of bottom left corner Delay_ms(1000) Glcd_Dot(0,63,0) ' Clear bottom left dot Glcd_Dot(127,0,1) ' Draw upper right dot Glcd_Write_Text(" ",12,3,1) Glcd_Write_Text("TOUCH UPPER RIGHT",12,4,1) TP_Calibrate_Upper_Right() ' Calibration of upper right corner Delay_ms(1000) end sub main: write_msg = "WRITE" clear_msg = "CLEAR" erase_msg = "ERASE" Initialize() Glcd_Fill(0) ' Clear GLCD Glcd_Write_Text("CALIBRATION",12,3,1) Delay_ms(1000) Glcd_Fill(0) ' Clear GLCD Calibrate() Glcd_Fill(0) Glcd_Write_Text("WRITE ON SCREEN", 20, 5, 1) Delay_ms(1000) Glcd_Fill(0) Glcd_V_Line(0,7,0,1) Glcd_Write_Text(clear_msg,1,0,0) Glcd_V_Line(0,7,97,1) Glcd_Write_Text(erase_msg,98,0,0) ' Pen Menu: Glcd_Rectangle(41,0,52,9,1) Glcd_Box(45,3,48,6,1) Glcd_Rectangle(63,0,70,7,1) Glcd_Box(66,3,67,4,1) Glcd_Rectangle(80,0,86,6,1) Glcd_Dot(83,3,1) write_erase = 1 pen_size = 1 while (TRUE) if (TP_Press_Detect() <> 0) then ' After a PRESS is detected read X-Y and convert it to 128x64 space if (TP_Get_Coordinates(@x_coord, @y_coord) = 0) then if ((x_coord < 31) and (y_coord < 8)) then Glcd_Fill(0) ' Pen Menu: Glcd_Rectangle(41,0,52,9,1) Glcd_Box(45,3,48,6,1) Glcd_Rectangle(63,0,70,7,1) Glcd_Box(66,3,67,4,1) Glcd_Rectangle(80,0,86,6,1) Glcd_Dot(83,3,1) Glcd_V_Line(0,7,0,1) Glcd_Write_Text(clear_msg,1,0,0) Glcd_V_Line(0,7,97,1) if (write_erase) then Glcd_Write_Text(erase_msg,98,0,0) else Glcd_Write_Text(write_msg,98,0,0) end if end if ' If write/erase is pressed if ((x_coord > 96) and (y_coord < 8)) then if (write_erase) then write_erase = 0 Glcd_Write_Text(write_msg,98,0,0) Delay_ms(500) else write_erase = 1 Glcd_Write_Text(erase_msg,98,0,0) Delay_ms(500) end if end if ' If pen size is selected if ((x_coord >= 41) and (x_coord <= 52) and (y_coord <= 9)) then pen_size = 3 end if if ((x_coord >= 63) and (x_coord <= 70) and (y_coord <= 7)) then pen_size = 2 end if if ((x_coord >= 80) and (x_coord <= 86) and (y_coord <= 6)) then pen_size = 1 end if if (y_coord < 11) then continue end if select case pen_size case 1 if ( (x_coord >= 0) and (y_coord >= 0) and (x_coord <= 127) and (y_coord <= 63) ) then Glcd_Dot(x_coord, y_coord, write_erase) end if case 2 if ( (x_coord >= 0) and (y_coord >= 0) and (x_coord <= 127-1) and (y_coord <= 63-1) ) then Glcd_Box(x_coord, y_coord, x_coord + 1, y_coord + 1, write_erase) end if case 3 if ( (x_coord >= 1) and (y_coord >= 1) and (x_coord <= 127-2) and (y_coord <= 63-2) ) then Glcd_Box(x_coord-1, y_coord-1, x_coord + 2, y_coord + 2, write_erase) end if end select end if end if wend end.
What do you think about this topic ? Send us feedback!