Hemgjord MPC stil MIDI controller (6 / 6 steg)
Steg 6: Koden.
'****************************************************************' * Namn: UNTITLED. BAS *
' * Författare: Matthew Reid *
' * Meddelande: Copyright (c) 2012 [Välj Visa... REDIGERINGSALTERNATIV] *
' *: Alla rättigheter reserverade *
' * Datum: 9/5/2012 *
' * Version: 1.0 *
' * Anteckningar: *
'* : *
'****************************************************************
Pausa 300
inkludera "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
__CONFIG _CONFIG2H, _WDT_ON_2H & _WDTPS_256_2H
__CONFIG _CONFIG3H, _MCLRE_OFF_3H & _PBADEN_OFF_3H
__CONFIG _CONFIG4L, _STVREN_ON_4L & _LVP_OFF_4L & _XINST_OFF_4L & _DEBUG_OFF_4L
#endconfig
definiera OSC 20
OSCCON = % 00001000
"ställa in hårdvaran seriell port
definiera HSER_RCSTA 90H
definiera HSER_TXSTA 24H
definiera HSER_BAUD 31250
"i2c portar
SDA var PORTB.2
SCL-värdet var PORTB.1
"knappen variabler
"kolumn 1 variabler
buttonval1 var byte
bouncecheck1 var byte
buttonstate1 var lite [4]
Jag var byte
värde1 var byte
"kolumn 2 variabler
buttonval2 var byte
bouncecheck2 var byte
buttonstate2 var lite [4]
värde2 var byte
"kolumn 3 variabler
buttonval3 var byte
bouncecheck3 var byte
buttonstate3 var lite [4]
value3 var byte
"kolumn 4variables
buttonval4 var byte
bouncecheck4 var byte
buttonstate4 var lite [4]
value4 var byte
"bankchange variabel
norra var lite
downstate var lite
j var byte: j = 1
c var byte
"variabler för en till d (IC2)
en var byte [8]
två var byte [8]
tre var ordet [8]: tre = 0
tröskel var ordet: tröskel = 50
prevpotval var byte [8]
prevadval var ordet [8]
currentadval var ordet [8]
"variabler för en till d (IC1)
one1 var byte [8]
two1 var byte [8]
three1 var ordet [8]: tre = 0
prevpotval1 var byte [8]
prevadval1 var ordet [8]
currentadval1 var ordet [8]
"port riktning
trisa = % 00000000
trisb = % 00000001
trisc = % 10110110
"aktiverar RC4 och RC5
Ucon.3 = 0
ucfg.3 = 1
"inaktivera inre A-D
adcon0 = % 00111100
adcon1 = % 00001111
"slå på lcd och Ställ in ljusstyrkan till max
Pausa 1000
serout PORTB.3, N9600, [$1b, $2a, $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
"röd
Porta.0 = 1
Porta.1 = 0
Porta.2 = 0
Pausa 400
"grön
Porta.0 = 0
Porta.1 = 1
Porta.2 = 0
Pausa 400
"blå
Porta.0 = 0
Porta.1 = 0
Porta.2 = 1
Pausa 400
"lila
Porta.0 = 1
Porta.1 = 0
Porta.2 = 1
Pausa 400
"vit
Porta.0 = 1
Porta.1 = 1
Porta.2 = 1
Pausa 400
"cyan
Porta.0 = 0
Porta.1 = 1
Porta.2 = 1
Pausa 400
'_________________________
"Läs bank från eeprom
Läs 5, j
mainloop:
GOSUB bankchange
GOSUB knapptryckning
GOSUB potread
GOSUB RGB
gå till mainloop
bankchange:
"bank
om portc.2 = 1 & upstate = 1 då
j = j + 1
om j > 8 sedan
j = 1
endif
"rensa alla anteckningar
för i = 0 till 128
hserout [$92, jag, 0]
Nästa jag
' Skriv bank change till eeprom
Skriv 5, j
Upstate = 0
endif
om portc.2 = 0 & upstate = 0 då
Upstate = 1
endif
"bank ner
om portc.1 = 1 & downstate = 1 då
j = j - 1
om j < 1 sedan
j = 8
endif
"rensa alla anteckningar
för i = 0 till 128
hserout [$92, jag, 0]
Nästa jag
' Skriv bank change till eeprom
Skriv 5, j
downstate = 0
endif
om portc.1 = 0 & downstate = 0 då
downstate = 1
endif
"Visa bank
serout PORTB.3, N9600, [$Fe, $c0]
serout PORTB.3, N9600, ["BANK", "", #j, ""]
om j = 1 då
c = 0
endif
om j = 2 då
c = 16
endif
om j = 3 då
c = 32
endif
om j = 4 då
c = 48
endif
om j = 5 sedan
c = 64
endif
om j = 6 då
c = 80
endif
om j = 7 då
c = 96
endif
om j = 8 då
c = 112
endif
returnera
potread:
' adc potentiometer saker---
"Läs ic2
för i = 1 till 8
tre [i] = 0
om jag = 1 då
i2cwrite SDA, SCL, % 00010000, [10001100] %
endif
om jag = 2 då
i2cwrite SDA, SCL, % 00010000, [11001100] %
endif
om jag = 3 då
i2cwrite SDA, SCL, % 00010000, [10011100] %
endif
om jag sedan = 4
i2cwrite SDA, SCL, % 00010000, [11011100] %
endif
om jag sedan = 5
i2cwrite SDA, SCL, % 00010000, [10101100] %
endif
om jag = 6 då
i2cwrite SDA, SCL, % 00010000, [11101100] %
endif
om jag sedan = 7
i2cwrite SDA, SCL, % 00010000, [10111100] %
endif
om jag = 8 då
i2cwrite SDA, SCL, % 00010000, [11111100] %
endif
"denna paus är viktigt att hålla adc från hoppa runt
Pausa 4
i2cread SDA, SCL, % 00010001, [ett [i], två [i]]
tre [i] = en [i] | tre [i]
tre [i] = tre [i] << 4
två [i] = två [i] >> 4
tre [i] = två [i] | tre [i]
currentadval [i] = tre [i]
"pausa 10
tre [i] = tre [i] * 128
tre [i] = div32 4095
om abs (currentadval [i] - prevadval[i]) > = tröskel då
hserout [$B2, 13 + i, tre [i]]
prevpotval [i] = tre [i]
prevadval [i] = currentadval [i]
"Visa en till d-värde
serout PORTB.3, N9600, [$Fe, $80]
serout PORTB.3, N9600, [#178, "", #(13+i), "", #three [i], ""]
endif
Nästa jag
"Läs ic1
för i = 1 till 8
three1 [i] = 0
om jag = 1 då
i2cwrite SDA, SCL, % 00010100, [10001100] %
endif
om jag = 2 då
i2cwrite SDA, SCL, % 00010100, [11001100] %
endif
om jag = 3 då
i2cwrite SDA, SCL, % 00010100, [10011100] %
endif
om jag sedan = 4
i2cwrite SDA, SCL, % 00010100, [11011100] %
endif
om jag sedan = 5
i2cwrite SDA, SCL, % 00010100, [10101100] %
endif
om jag = 6 då
i2cwrite SDA, SCL, % 00010100, [11101100] %
endif
om jag sedan = 7
i2cwrite SDA, SCL, % 00010100, [10111100] %
endif
om jag = 8 då
i2cwrite SDA, SCL, % 00010100, [11111100] %
endif
"denna paus är viktigt att hålla adc från hoppa runt
Pausa 4
i2cread SDA, SCL, % 00010101, [one1 [i], two1 [i]]
three1 [i] = one1 [i] | three1 [i]
three1 [i] = three1 [i] << 4
two1 [i] = two1 [i] >> 4
three1 [i] = two1 [i] | three1 [i]
currentadval1 [i] = three1 [i]
"pausa 10
three1 [i] = three1 [i] * 128
three1 [i] = div32 4095
om abs (currentadval1 [i] - prevadval1[i]) > = tröskel då
hserout [$B2, 13 + i, three1 [i]]
prevpotval1 [i] = three1 [i]
prevadval1 [i] = currentadval1 [i]
"Visa en till d-värde
serout PORTB.3, N9600, [$Fe, $80]
serout PORTB.3, N9600, [#178, "", #(21+i), "", #three1 [i], ""]
endif
Nästa jag
returnera
knapptryckning:
"knappen kod
'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
paus 1
bouncecheck1.0 = portc.4
bouncecheck1.1 = portc.5
bouncecheck1.2 = portc.7
bouncecheck1.3 = portb.0
om buttonval1 = bouncecheck1 sedan
för i = 0 till 3' räknas från 0 till 3
värde1 = buttonval1 >> jag
om value1.0 = 1 & buttonstate1 [i] = 1 då
hserout [$92, c + i, 0]
serout PORTB.3, N9600, [$Fe, $80]
serout PORTB.3, N9600, [#146,"", #(c + i), "", #0, ""]
buttonstate1 [i] = 0
endif
om value1.0 = 0 & buttonstate1 [i] = 0 då
hserout [$92, c + i, 100]
serout PORTB.3, N9600, [$Fe, $80]
serout PORTB.3, N9600, [#146,"", #(c + i), "", #100, ""]
buttonstate1 [i] = 1
endif
Nästa jag
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
paus 1
bouncecheck2.0 = portc.4
bouncecheck2.1 = portc.5
bouncecheck2.2 = portc.7
bouncecheck2.3 = portb.0
om buttonval2 = bouncecheck2 sedan
för i = 0 till 3' räknas från 0 till 3
value2 = buttonval2 >> jag
om value2.0 = 1 & buttonstate2 [i] = 1 då
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
om value2.0 = 0 & buttonstate2 [i] = 0 då
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
Nästa jag
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
paus 1
bouncecheck3.0 = portc.4
bouncecheck3.1 = portc.5
bouncecheck3.2 = portc.7
bouncecheck3.3 = portb.0
om buttonval3 = bouncecheck3 sedan
för i = 0 till 3' räknas från 0 till 3
value3 = buttonval3 >> jag
om value3.0 = 1 & buttonstate3 [i] = 1 då
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
om value3.0 = 0 & buttonstate3 [i] = 0 då
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
Nästa jag
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
paus 1
bouncecheck4.0 = portc.4
bouncecheck4.1 = portc.5
bouncecheck4.2 = portc.7
bouncecheck4.3 = portb.0
om buttonval4 = bouncecheck4 sedan
för i = 0 till 3' räknas från 0 till 3
value4 = buttonval4 >> jag
om value4.0 = 1 & buttonstate4 [i] = 1 då
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
om value4.0 = 0 & buttonstate4 [i] = 0 då
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
Nästa jag
endif
returnera
RGB:
om j = 1 då
"gul
Porta.1 = 0
pauseus 200
Porta.0 = 1
Porta.1 = 1
Porta.2 = 0
endif
om j = 2 då
"röd
Porta.0 = 1
Porta.1 = 0
Porta.2 = 0
endif
om j = 3 då
"grön
Porta.0 = 0
Porta.1 = 1
Porta.2 = 0
endif
om j = 4 då
"blå
Porta.0 = 0
Porta.1 = 0
Porta.2 = 1
endif
om j = 5 sedan
"lila
Porta.0 = 1
Porta.1 = 0
Porta.2 = 1
endif
om j = 6 då
"vit
Porta.0 = 1
Porta.1 = 1
Porta.2 = 1
endif
om j = 7 då
"cyan
Porta.0 = 0
Porta.1 = 1
Porta.2 = 1
endif
om j = 8 då
"blå
Porta.0 = 0
Porta.1 = 0
Porta.2 = 1
endif
återgå