'$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.0 = Input 'ali zelimo kalibracijo?
If Pind.0 = 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:
Y = 0
For J = 0 To 15 'beri touch
Config Porta.3 = Output 'pin1 (Y+)
Config Porta.1 = Output ' PIN3 (Y-)
Set Porta.3 'PIN2 (Y-)
Reset Porta.1 'PIN4 (Y+)
Config Pina.2 = Input ' (X-)postavi kot vhod
Config Pina.0 = Input ' (X+)
Waitus 1 'pocakaj, da se port stabilizira
Y1 = Getadc(2) ' (X-)
Y2 = 1024 - Y1
Y = Y2 + Y 'preberi vrednost A/D
Next
Y = Y / 15
X = 0
For J = 0 To 15 'jo invertiraj
Config Porta.2 = Output 'ponovi isto za X koordinato
Config Porta.0 = Output '
Reset Porta.2
Set Porta.0
Config Pina.1 = Input
Config Pina.3 = Input
Waitms 1
X1 = Getadc(1) '
X2 = 1024 - X1
X = X2 + X
Next
X = 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
I = 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"