Touch Panel Library
The mikroBasic PRO for PIC 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 RC0_bit |
dim DriveB as sbit sfr external |
DriveB line. | dim DriveB as sbit at RC1_bit |
dim DriveA_Direction as sbit sfr external |
Direction of the DriveA pin. | dim DriveA_Direction as sbit at TRISC0_bit |
dim DriveB_Direction as sbit sfr external |
Direction of the DriveB pin. | dim DriveB_Direction as sbit at TRISC1_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 |
ADC_Init() ' Initalize ADC module TP_Init(128, 64, 6, 7) ' Initialize touch panel, dimensions 128x64 |
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 |
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 RC0_bit
DriveB as sbit at RC1_bit
DriveA_Direction as sbit at TRISC0_bit
DriveB_Direction as sbit at TRISC1_bit
' end Touch Panel module connections
if (TP_Press_Detect() <> 0) then
...
end if
|
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 |
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 |
Library Example
The following drawing demo tests routines of the Touch Panel library :
program TouchPanelCalibrationAndWrite
' Glcd module connections
dim GLCD_DataPort as byte at PORTD
dim GLCD_CS1 as sbit at RB0_bit
GLCD_CS2 as sbit at RB1_bit
GLCD_RS as sbit at RB2_bit
GLCD_RW as sbit at RB3_bit
GLCD_EN as sbit at RB4_bit
GLCD_RST as sbit at RB5_bit
GLCD_CS1_Direction as sbit at TRISB0_bit
GLCD_CS2_Direction as sbit at TRISB1_bit
GLCD_RS_Direction as sbit at TRISB2_bit
GLCD_RW_Direction as sbit at TRISB3_bit
GLCD_EN_Direction as sbit at TRISB4_bit
GLCD_RST_Direction as sbit at TRISB5_bit
' End Glcd module connections
' Touch Panel module connections
dim DriveA as sbit at RC0_bit
DriveB as sbit at RC1_bit
DriveA_Direction as sbit at TRISC0_bit
DriveB_Direction as sbit at TRISC1_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()
DriveA_Direction = 0 ' Set DriveA pin as output
DriveB_Direction = 0 ' Set DriveB pin as output
ANSEL = 3 ' Configure AN0 and AN1 pins as analog inputs
ANSELH = 0 ' and other AN pins as digital I/O
TRISA = 3
C1ON_bit = 0 ' Disable comparators
C2ON_bit = 0
Glcd_Init() ' Initialize GLCD
Glcd_Fill(0) ' Clear GLCD
ADC_Init() ' Initialize ADC
TP_Init(128, 64, 0, 1) ' Initialize touch panel
TP_Set_ADC_Threshold(900) ' 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",32,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!




