Étape 6: Le Code.
'****************************************************************' * Nom : sans titre. BAS *
' * Auteur : Matthew Reid *
' * Avis : Copyright (c) 2012 [sélectionnez affichage... OPTIONS DE L’ÉDITEUR] *
' *: Tous droits réservés *
'* Date : 9/5/2012 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
faire une pause 300
inclure « modedefs.bas »
#CONFIG
__CONFIG _CONFIG1L, _PLLDIV_5_1L & _CPUDIV_OSC1_PLL2_1L & _USBDIV_2_1L
__CONFIG _CONFIG1H, _FOSC_HS_1H & _FCMEN_ON_1H & _IESO_ON_1H
__CONFIG _CONFIG2L, _PWRT_ON_2L & _BOR_ON_2L & _BORV_3_2L & _VREGEN_OFF_2L
_WDTPS_256_2H, _WDT_ON_2H & __CONFIG _CONFIG2H
_PBADEN_OFF_3H, _MCLRE_OFF_3H & __CONFIG _CONFIG3H
__CONFIG _CONFIG4L, _STVREN_ON_4L & _LVP_OFF_4L & _XINST_OFF_4L & _DEBUG_OFF_4L
#endconfig
définir les OSC 20
OSCCON = % 00001000
"mettre en place les serial port matériel
définir HSER_RCSTA 90H
définir HSER_TXSTA 24h
définir HSER_BAUD 31250
« ports i2c
SDA var PORTB.2
SCL var PORTB.1
' bouton variables
' variables de la colonne 1
buttonval1 var octets
bouncecheck1 var octets
buttonstate1 var bit [4]
J’ai var octets
valeur1 var octets
' variables de la colonne 2
buttonval2 var octets
bouncecheck2 var octets
buttonstate2 var bit [4]
value2 var octets
' variables de la colonne 3
buttonval3 var octets
bouncecheck3 var octets
buttonstate3 var bit [4]
value3 var octets
' colonne 4variables
buttonval4 var octets
bouncecheck4 var octets
buttonstate4 var bit [4]
Value4 var octets
' bankchange variable
bit var hors de la ville
var Downstate bit
octet de var j: j = 1
var c octets
' variables d’a à d (IC2)
un octet var [8]
var deux octets [8]
trois mots var [8]: trois = 0
mot de seuil var : seuil = 50
prevpotval var octet [8]
prevadval var mot [8]
currentadval var mot [8]
' variables d’a à d (IC1)
One1 var octet [8]
deux1 var octet [8]
three1 var mot [8]: trois = 0
prevpotval1 var octet [8]
prevadval1 var mot [8]
currentadval1 var mot [8]
' port direction
TRISA = % 00000000
trisb = % 00000001
trisc = % 10110110
« activer la RC4 et RC5
UCON.3 = 0
ucfg.3 = 1
« désactiver interne A à D
adcon0 = % 00111100
adcon1 = % 00001111
« lcd s’allume et régler la luminosité au maximum
faire une pause 1000
serout PORTB.3, N9600, [$ 1 b, 2 a$, $FF]
serout PORTB.3,N9600,[$1b,$30]
serout PORTB.3,N9600,[$1b,$2a,200]
serout PORTB.3,N9600,[$1b,$46]
serout PORTB.3,N9600,[$fe,$80]
serout PORTB.3,N9600,["Midi Pad v1_1"]
serout PORTB.3,N9600,[$fe,$c0]
serout PORTB.3,N9600,["Matt Reid 2012"]
"intro flash
"rouge
Porta.0 = 1
Porta.1 = 0
Porta.2 = 0
faire une pause 400
' vert
Porta.0 = 0
Porta.1 = 1
Porta.2 = 0
faire une pause 400
' bleu
Porta.0 = 0
Porta.1 = 0
Porta.2 = 1
faire une pause 400
' purple
Porta.0 = 1
Porta.1 = 0
Porta.2 = 1
faire une pause 400
' blanc
Porta.0 = 1
Porta.1 = 1
Porta.2 = 1
faire une pause 400
"cyan
Porta.0 = 0
Porta.1 = 1
Porta.2 = 1
faire une pause 400
'_________________________
« lire Banque d’eeprom
lu 5, j
mainloop :
GoSub bankchange
GoSub keypress
GoSub potread
GoSub RVB
Goto mainloop
bankchange :
"la Banque vers le haut
Si portc.2 = 1 & Nord = 1 then
j = j + 1
Si j > 8 puis
j = 1
endif
' effacer toutes les notes
pour i = 0 à 128
hserout [$92, i, 0]
prochaine je
« écrire banque changement d’eeprom
écrire 5, j
Upstate = 0
endif
Si portc.2 = 0 & upstate = 0 then
Upstate = 1
endif
"la Banque vers le bas
Si portc.1 = 1 & downstate = 1 then
j = j - 1
Si j < 1 puis
j = 8
endif
' effacer toutes les notes
pour i = 0 à 128
hserout [$92, i, 0]
prochaine je
« écrire banque changement d’eeprom
écrire 5, j
Downstate = 0
endif
Si portc.1 = 0 & downstate = 0 then
Downstate = 1
endif
« afficher les Banque
serout PORTB.3, N9600, [$Fe, $c0]
serout PORTB.3, N9600, [« Banque », « », #j, ""]
Si j = 1 then
c = 0
endif
Si j = 2 then
c = 16
endif
Si j = 3 then
c = 32
endif
Si j = 4 then
c = 48
endif
Si j = 5 then
c = 64
endif
Si j = 6 then
c = 80
endif
Si j = 7 then
c = 96
endif
Si j = 8 puis
c = 112
endif
retour
potread :
« trucs de potentiomètre adc---
« lire ic2
pour i = 1 à 8
trois [i] = 0
Si j’ai = 1 then
i2cwrite SDA, SCL, % 00010000, [% 10001100]
endif
Si j’ai = 2 then
i2cwrite SDA, SCL, % 00010000, [% 11001100]
endif
Si j’ai = 3 then
i2cwrite SDA, SCL, % 00010000, [% 10011100]
endif
Si j’ai = 4 then
i2cwrite SDA, SCL, % 00010000, [% 11011100]
endif
Si j’ai = 5 then
i2cwrite SDA, SCL, % 00010000, [% 10101100]
endif
Si j’ai = 6 then
i2cwrite SDA, SCL, % 00010000, [% 11101100]
endif
Si j’ai = 7 then
i2cwrite SDA, SCL, % 00010000, [% 10111100]
endif
Si j’ai = 8 puis
i2cwrite SDA, SCL, % 00010000, [% 11111100]
endif
"cette pause est importante de garder l’adc de sauter partout
Pause 4
i2cread SDA, SCL, % 00010001, [un [i], deux [i]]
trois [i] = un [i] | trois [i]
trois [i] = trois [i] << 4
deux [i] = deux [i] >> 4
trois [i] = deux [i] | trois [i]
currentadval [i] = trois [i]
« faire une pause 10
trois [i] = trois [i] * 128
trois [i] = div32 4095
si abs (currentadval [i] - prevadval[i]) > = seuil puis
hserout [$B2, 13 + i, trois [i]]
prevpotval [i] = trois [i]
prevadval [i] = currentadval [i]
« afficher une valeur d
serout PORTB.3, N9600, [$Fe, 80 $]
serout PORTB.3, N9600, [#178, "", #(13+i), "", #three [i], ""]
endif
prochaine je
« lire ic1
pour i = 1 à 8
three1 [i] = 0
Si j’ai = 1 then
i2cwrite SDA, SCL, % 00010100, [% 10001100]
endif
Si j’ai = 2 then
i2cwrite SDA, SCL, % 00010100, [% 11001100]
endif
Si j’ai = 3 then
i2cwrite SDA, SCL, % 00010100, [% 10011100]
endif
Si j’ai = 4 then
i2cwrite SDA, SCL, % 00010100, [% 11011100]
endif
Si j’ai = 5 then
i2cwrite SDA, SCL, % 00010100, [% 10101100]
endif
Si j’ai = 6 then
i2cwrite SDA, SCL, % 00010100, [% 11101100]
endif
Si j’ai = 7 then
i2cwrite SDA, SCL, % 00010100, [% 10111100]
endif
Si j’ai = 8 puis
i2cwrite SDA, SCL, % 00010100, [% 11111100]
endif
"cette pause est importante de garder l’adc de sauter partout
Pause 4
i2cread SDA, SCL, % 00010101, [one1 [i], deux1 [i]]
three1 [i] = one1 [i] | three1 [i]
three1 [i] = three1 [i] << 4
deux1 [i] = deux1 [i] >> 4
three1 [i] = deux1 [i] | three1 [i]
currentadval1 [i] = three1 [i]
« faire une pause 10
three1 [i] = three1 [i] * 128
three1 [i] = div32 4095
si abs (currentadval1 [i] - prevadval1[i]) > = seuil puis
hserout [$B2, 13 + i, three1 [i]]
prevpotval1 [i] = three1 [i]
prevadval1 [i] = currentadval1 [i]
« afficher une valeur d
serout PORTB.3, N9600, [$Fe, 80 $]
serout PORTB.3, N9600, [#178, "", #(21+i), "", #three1 [i], ""]
endif
prochaine je
retour
KeyPress :
' bouton code
'set column 1--------------------------------------------------------------------
PORTB.4 = 0
PORTB.5 = 1
PORTB.6 = 1
PORTB.7 = 1
buttonval1 = 0
bouncecheck1 = 0
buttonval1.0 = portc.4
buttonval1.1 = portc.5
buttonval1.2 = portc.7
buttonval1.3 = portb.0
faire une pause 1
bouncecheck1.0 = portc.4
bouncecheck1.1 = portc.5
bouncecheck1.2 = portc.7
bouncecheck1.3 = portb.0
Si buttonval1 = bouncecheck1 then
pour i = 0 à 3' compter de 0 à 3
valeur1 = buttonval1 >> je
si value1.0 = 1 & buttonstate1 [i] = 1 then
hserout [92$, c + i, 0]
serout PORTB.3, N9600, [$Fe, 80 $]
serout PORTB.3, N9600, [#146,"", #(c + i), "", #0, ""]
buttonstate1 [i] = 0
endif
si value1.0 = 0 & buttonstate1 [i] = 0 then
hserout [92$, c + i, 100]
serout PORTB.3, N9600, [$Fe, 80 $]
serout PORTB.3, N9600, [#146,"", #(c + i), "", #100, ""]
buttonstate1 [i] = 1
endif
prochaine je
endif
'set column 2--------------------------------------------------------------------
PORTB.4 = 1
PORTB.5 = 0
PORTB.6 = 1
PORTB.7 = 1
buttonval2 = 0
bouncecheck2 = 0
buttonval2.0 = portc.4
buttonval2.1 = portc.5
buttonval2.2 = portc.7
buttonval2.3 = portb.0
faire une pause 1
bouncecheck2.0 = portc.4
bouncecheck2.1 = portc.5
bouncecheck2.2 = portc.7
bouncecheck2.3 = portb.0
Si buttonval2 = bouncecheck2 then
pour i = 0 à 3' compter de 0 à 3
value2 = buttonval2 >> je
Si value2.0 = 1 & buttonstate2 [i] = 1 then
hserout [92$, c + 4 + i, 0]
serout PORTB.3, N9600, [$Fe, 80 $]
serout PORTB.3, N9600, [#146,"", #(c + 4 + i), "", #0, ""]
buttonstate2 [i] = 0
endif
Si value2.0 = 0 & buttonstate2 [i] = 0 then
hserout [92$, c + 4 + i, 100]
serout PORTB.3, N9600, [$Fe, 80 $]
serout PORTB.3, N9600, [#146,"", #(c + 4 + i), "", #100, ""]
buttonstate2 [i] = 1
endif
prochaine je
endif
'set column 3--------------------------------------------------------------------
PORTB.4 = 1
PORTB.5 = 1
PORTB.6 = 0
PORTB.7 = 1
buttonval3 = 0
bouncecheck3 = 0
buttonval3.0 = portc.4
buttonval3.1 = portc.5
buttonval3.2 = portc.7
buttonval3.3 = portb.0
faire une pause 1
bouncecheck3.0 = portc.4
bouncecheck3.1 = portc.5
bouncecheck3.2 = portc.7
bouncecheck3.3 = portb.0
Si buttonval3 = bouncecheck3 then
pour i = 0 à 3' compter de 0 à 3
value3 = buttonval3 >> je
Si value3.0 = 1 & buttonstate3 [i] = 1 then
hserout [92$, c + 8 + i, 0]
serout PORTB.3, N9600, [$Fe, 80 $]
serout PORTB.3, N9600, [#146,"", #(c + 8 + i), "", #0, ""]
buttonstate3 [i] = 0
endif
Si value3.0 = 0 & buttonstate3 [i] = 0 then
hserout [92$, c + 8 + i, 100]
serout PORTB.3, N9600, [$Fe, 80 $]
serout PORTB.3, N9600, [#146,"", #(c + 8 + i), "", #100, ""]
buttonstate3 [i] = 1
endif
prochaine je
endif
'set column 4--------------------------------------------------------------------
PORTB.4 = 1
PORTB.5 = 1
PORTB.6 = 1
PORTB.7 = 0
buttonval4 = 0
bouncecheck4 = 0
buttonval4.0 = portc.4
buttonval4.1 = portc.5
buttonval4.2 = portc.7
buttonval4.3 = portb.0
faire une pause 1
bouncecheck4.0 = portc.4
bouncecheck4.1 = portc.5
bouncecheck4.2 = portc.7
bouncecheck4.3 = portb.0
Si buttonval4 = bouncecheck4 then
pour i = 0 à 3' compter de 0 à 3
Value4 = buttonval4 >> je
Si value4.0 = 1 & buttonstate4 [i] = 1 then
hserout [92$, c + 12 + i, 0]
serout PORTB.3, N9600, [$Fe, 80 $]
serout PORTB.3, N9600, [#146,"", #(c + 12 + i), "", #0, ""]
buttonstate4 [i] = 0
endif
Si value4.0 = 0 & buttonstate4 [i] = 0 then
hserout [92$, c + 12 + i, 100]
serout PORTB.3, N9600, [$Fe, 80 $]
serout PORTB.3, N9600, [#146,"", #(c + 12 + i), "", #100, ""]
buttonstate4 [i] = 1
endif
prochaine je
endif
retour
RGB :
Si j = 1 then
' jaune
Porta.1 = 0
pauseus 200
Porta.0 = 1
Porta.1 = 1
Porta.2 = 0
endif
Si j = 2 then
"rouge
Porta.0 = 1
Porta.1 = 0
Porta.2 = 0
endif
Si j = 3 then
' vert
Porta.0 = 0
Porta.1 = 1
Porta.2 = 0
endif
Si j = 4 then
' bleu
Porta.0 = 0
Porta.1 = 0
Porta.2 = 1
endif
Si j = 5 then
' purple
Porta.0 = 1
Porta.1 = 0
Porta.2 = 1
endif
Si j = 6 then
' blanc
Porta.0 = 1
Porta.1 = 1
Porta.2 = 1
endif
Si j = 7 then
"cyan
Porta.0 = 0
Porta.1 = 1
Porta.2 = 1
endif
Si j = 8 puis
' bleu
Porta.0 = 0
Porta.1 = 0
Porta.2 = 1
endif
retour