'$sim
'narisemo tipke in prikljucimo Touch panel
'ta program uporabljamo za definicijo touch panela
'novi Touch Panel
' s kalibracijo

$regfile = "m32def.DAT"
'$regfile = "m16def.DAT"
'$crystal = 14456800
$crystal = 11059200
'$crystal = 20000000
'$baud = 19200
'$eepleave
'$loadersize = 512
'$hwstack = 100
'$swstack = 75
'$framesize = 40
$lib "glcdKS108.lib"                                        'Include the library for the KS-108 controler
'$lib "glcd.lib"

Config Graphlcd = 128 * 64sed , Dataport = Portb , Controlport = Portc , Ce = 0 , Ce2 = 1 , Cd = 2 , Rd = 3 , Reset = 5 , Enable = 4 , Mode = 8
'The dataport is the portname that is connected to the data lines of the LCD
'The controlport is the portname which pins are used to control the lcd
'CE =CS1  Chip select
'CE2=CS2  Chip select second chip
'CD=Data/instruction
'RD=Read
'RESET = reset
'ENABLE= Chip Enable
 Cls

Config Adc = Single , Prescaler = Auto , Reference = Avcc   'Setting up the a/d convertor

Showpic 0 , 0 , Logose
Wait 1
Cls

Config Portb = Output
Portb = 255


Dim X As Word , Y As Word , I As Byte , Y1 As Word , Y2 As Word , X1 As Word , X2 As Word , Xa As Word , Xb As Word , Xc As Word , Xd As Word,
Dim Ya As Word , Yb As Word , Yc As Word , Yd As Word , Narejeno As Bit , Tempx As Word , Tempy As Word

Dim Xy(16) As Word , Yx(16) As Word , Tabela As Word , I1 As Byte , J As Byte , Ind As Byte

'******** Funkcija, ki nam pove, če je odčitana pozicija v dovoljenem območju okrog neke točke ******
'******** Če je, se vrne z vrednostjo 1, drugače z vrednostjo 0 ******
'******** Funkciji podamo X in Y iskane točke, sama izračuna dovoljena odstopanja od te točke v x in y smeri *****
'******** Pred tem preberemo vrednosti pritiska X in Y  in ju zapišemo v Prebrano_x in Prebrano_y
'**** Izračunamo koordinate štirih točk, ki obkrožajo dano točko *****
      Dim Min_x As Word , Max_x As Word
      Dim Min_y As Word , Max_y As Word


Declare Function Znotraj_obmocja(byval Ind As Byte) As Byte



'**** Prebrane odčitke pritiska shranimo v ti dve spremenljivki ****
'**** Kasneje jih beremo v funkciji Znotraj_območja, kjer raziščemo, ali je tipka pritisnjena ali ne
'Dim Prebrano_x As Word
'Dim Prebrano_y As Word
Const Offset_x = 6                                          ' +/- vrednosti odstopanja "X" za dovoljeno območje
'Const Offset_y = 4                                          ' +/- vrednost odstopanja "Y" za dovoljeno območje
Dim Pritisnjeno As Byte                                     '0, ce ni pritisnjena tipka

'Dim Tipka(17,2) As Word                                   'koordinate točk tipk

Dim Tipkax(17) As Eram Word
Dim Tipkay(17) As Eram Word
            '17 zato, da imam eno pom vr.
'Const Korak = 4

Config Portd.= Input                                      'ali zelimo kalibracijo?
If Pind.= 0 Then                                          'ce pritisnemo tipko
   Narejeno = 0                                             'postavimo sprenljivko na 0>> naredi kalibracijo
   Else
   Narejeno = 1
End If
'narejeno doloca, ali smo ze naredili kalibracijo, Narejeno=0: kalibracija ni bila narejena

Setfont Font8x8
Start Adc                                                   ' Start the ad convertor
' =====Main=====

Do
Portb = 255
  If Narejeno = 0 Then
   Gosub Kalibracija
  End If

 Gosub Prit_tipke
Loop                                                        ' Read the touch cordinates

End



'----------------------------------------------------------------------------------------------------
'******** Funkcija, ki nam pove, če je odčitana pozicija v dovoljenem območju okrog neke točke ******

Function Znotraj_obmocja(byval Ind As Byte) As Byte
           'zbrišem dosedanjo vrednost te funkcije
          Znotraj_obmocja = 0
           Min_x = Tipkax(ind) - 20                         'Offsetx
           Max_x = Tipkax(ind) + 20                         'Offset_x
           Min_y = Tipkay(ind) - 20                         'Offset_y
           Max_y = Tipkay(ind) + 20                         'Offset_y

           '** Ali x ustreza ? ****
           If X >= Min_x And X <= Max_x Then
                   '** Ali ustreza tudi y? ****
                   If Y >= Min_y And Y <= Max_y Then
                   Znotraj_obmocja = 1
                   Else
                   Znotraj_obmocja = 0
                   End If
           End If

End Function
'--------------------------------------------------------------------------------------------------



Readtouch:
= 0
For J = 0 To 15                                             'beri touch
Config Porta.= Output                                     'pin1 (Y+)
Config Porta.= Output                                     ' PIN3 (Y-)
Set Porta.3                                                 'PIN2 (Y-)
Reset Porta.1                                               'PIN4 (Y+)
Config Pina.= Input                                       ' (X-)postavi kot vhod
Config Pina.= Input                                       ' (X+)
Waitus 1                                                    'pocakaj, da se port stabilizira
Y1 = Getadc(2)                                              ' (X-)
Y2 = 1024 - Y1
= Y2 + Y                                                  'preberi vrednost A/D
Next
= Y / 15
= 0
For J = 0 To 15                                             'jo invertiraj
Config Porta.= Output                                     'ponovi isto za X koordinato
Config Porta.= Output                                     '
Reset Porta.2
Set Porta.0
Config Pina.= Input
Config Pina.= Input
Waitms 1
X1 = Getadc(1)                                              '
X2 = 1024 - X1
= X2 + X
Next
= X / 15

Return

'---------------------------------------------------------------------
Kalibracija:
I1 = 4

Lcdat 1 , 1 , "KALIBRACIJA"                                 ' ; Y ;
Wait 1
Cls
                                                      'samo pri kalibraciji=4
For I = 1 To 16 Step 1                                      ' Step 4                                      'Step 4                                      'Step 4


Ponovi:
   Select Case I                                            'izpisujemo 4 slike da dobimo 4 kalibracijske tocke

   Case 1 : Showpic 0 , 0 , Tabela11
   Case 2 : Showpic 0 , 0 , Tabela12
   Case 3 : Showpic 0 , 0 , Tabela13
   Case 4 : Showpic 0 , 0 , Tabela14

   Case 5 : Showpic 0 , 0 , Tabela21
   Case 6 : Showpic 0 , 0 , Tabela22
   Case 7 : Showpic 0 , 0 , Tabela23
   Case 8 : Showpic 0 , 0 , Tabela24

   Case 9 : Showpic 0 , 0 , Tabela31
   Case 10 : Showpic 0 , 0 , Tabela32
   Case 11 : Showpic 0 , 0 , Tabela33
   Case 12 : Showpic 0 , 0 , Tabela34

   Case 13 : Showpic 0 , 0 , Tabela41
   Case 14 : Showpic 0 , 0 , Tabela42
   Case 15 : Showpic 0 , 0 , Tabela43
   Case 16 : Showpic 0 , 0 , Tabela44

   End Select
   Wait 1

   Gosub Readtouch
   Lcdat 3 , 30 , "X= " ; X                                 ' ; Y ;
   Lcdat 5 , 30 , "Y= " ; Y                                 ' ; Y ;

   If X < 10 And Y < 10 Then
         Showpic 0 , 0 , Tabela_ni_ok
         Waitms 100
      Goto Ponovi


      Showpic 0 , 0 , Tabela_ni_ok
      Waitms 200
      Else
      Showpic 0 , 0 , Tabela_ok
      Wait 1
   End If

   Tipkax(i) = X
   Tipkay(i) = Y

   Wait 1

   Waitms 200
Next I



 Narejeno = 1
Cls


= 0
Return



'----------------------------------------------------------------------------------
'Pritisnjena tipka

Prit_tipke:

'Showpic 0 , 0 , Tabela_v1


Gosub Readtouch


If X > 10 And Y > 10 Then

For I = 1 To 16


Pritisnjeno = Znotraj_obmocja(i)



If Pritisnjeno = 1 Then

Select Case I


Case 1 : Showpic 0 , 0 , Tabela11
Case 2 : Showpic 0 , 0 , Tabela12
Case 3 : Showpic 0 , 0 , Tabela13
Case 4 : Showpic 0 , 0 , Tabela14
Case 5 : Showpic 0 , 0 , Tabela21
Case 6 : Showpic 0 , 0 , Tabela22
Case 7 : Showpic 0 , 0 , Tabela23
Case 8 : Showpic 0 , 0 , Tabela24
Case 9 : Showpic 0 , 0 , Tabela31
Case 10 : Showpic 0 , 0 , Tabela32
Case 11 : Showpic 0 , 0 , Tabela33
Case 12 : Showpic 0 , 0 , Tabela34
Case 13 : Showpic 0 , 0 , Tabela41
Case 14 : Showpic 0 , 0 , Tabela42
Case 15 : Showpic 0 , 0 , Tabela43
Case 16 : Showpic 0 , 0 , Tabela44

End Select

Exit For
End If

Next


Pritisnjeno = 0
End If
'Waitms 100
Return






End




$include "font8x8.font"
Logose:
$bgf "logose.bgf"

Tipke:
$bgf "Tipke.bgf"



Tabela_v1:
$bgf "Tabela_v1.bgf"

Tabela11:
$bgf "Tabela11.bgf"

Tabela12:
$bgf "Tabela12.bgf"

Tabela13:
$bgf "Tabela13.bgf"

Tabela14:
$bgf "Tabela14.bgf"

Tabela_ok:
$bgf "Tabela_OK.bgf"

Tabela_ni_ok:
$bgf "Tabela_NI_OK.bgf"


Tabela21:
$bgf "Tabela21.bgf"

Tabela22:
$bgf "Tabela22.bgf"

Tabela23:
$bgf "Tabela23.bgf"

Tabela24:
$bgf "Tabela24.bgf"

Tabela31:
$bgf "Tabela31.bgf"

Tabela32:
$bgf "Tabela32.bgf"

Tabela33:
$bgf "Tabela33.bgf"

Tabela34:
$bgf "Tabela34.bgf"

Tabela41:
$bgf "Tabela41.bgf"

Tabela42:
$bgf "Tabela42.bgf"

Tabela43:
$bgf "Tabela43.bgf"

Tabela44:
$bgf "Tabela44.bgf"