Stap 6: De Code.
'****************************************************************' * Naam: UNTITLED. BAS *
' * Auteur: Matthew Reid *
' * Aankondiging: Copyright (c) 2012 [Selecteer weergave... EDITOROPTIES] *
' *: Alle rechten voorbehouden *
'* Date : 9/5/2012 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
onderbreken van 300
omvatten "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, _VREGEN_OFF_2L & _BOR_ON_2L & _BORV_3_2L
__CONFIG _CONFIG2H, _WDT_ON_2H & _WDTPS_256_2H
__CONFIG _CONFIG3H, _MCLRE_OFF_3H & _PBADEN_OFF_3H
__CONFIG _CONFIG4L, _STVREN_ON_4L, _DEBUG_OFF_4L & _LVP_OFF_4L & _XINST_OFF_4L
#endconfig
definiëren van OSC 20
OSCCON = % 00001000
' hardware seriële poort instellen
HSER_RCSTA 90H definiëren
HSER_TXSTA 24H definiëren
HSER_BAUD 31250 definiëren
' i2c poorten
SDA var PORTB.2
SCL var PORTB.1
' knop variabelen
' kolom 1 variabelen
buttonval1 var byte
bouncecheck1 var byte
buttonstate1 var bits [4]
Ik var byte
waarde1 var byte
' kolom 2 variabelen
buttonval2 var byte
bouncecheck2 var byte
buttonstate2 var bits [4]
waarde2 var byte
' kolom 3 variabelen
buttonval3 var byte
bouncecheck3 var byte
buttonstate3 var bits [4]
Waarde3 var byte
' kolom 4variables
buttonval4 var byte
bouncecheck4 var byte
buttonstate4 var bits [4]
Waarde4 var byte
' bankchange variabele
Upstate var bits
Downstate var bits
j var byte: j = 1
c var byte
' variabelen voor een tot en met d (IC2)
een var byte [8]
twee var byte [8]
drie var woord [8]: drie = 0
drempel var woord: drempel = 50
prevpotval var byte [8]
prevadval var woord [8]
currentadval var woord [8]
' variabelen voor een tot en met d (IC1)
one1 var byte [8]
two1 var byte [8]
three1 var woord [8]: drie = 0
prevpotval1 var byte [8]
prevadval1 var woord [8]
currentadval1 var woord [8]
' poort van richting
trisa = % 00000000
trisb = % 00000001
trisc = % 10110110
' RC4 en RC5 inschakelen
Ucon.3 = 0
ucfg.3 = 1
' uitschakelen interne A tot en met D
adcon0 = % 00111100
adcon1 = % 00001111
' zet lcd en selecteer helderheid tot max
onderbreken van 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"]
' flash intro
' rood
Porta.0 = 1
Porta.1 = 0
Porta.2 = 0
onderbreken van 400
' groen
Porta.0 = 0
Porta.1 = 1
Porta.2 = 0
onderbreken van 400
' blauw
Porta.0 = 0
Porta.1 = 0
Porta.2 = 1
onderbreken van 400
' paars
Porta.0 = 1
Porta.1 = 0
Porta.2 = 1
onderbreken van 400
' witte
Porta.0 = 1
Porta.1 = 1
Porta.2 = 1
onderbreken van 400
' cyaan
Porta.0 = 0
Porta.1 = 1
Porta.2 = 1
onderbreken van 400
'_________________________
' bank van de eeprom leest
Lees 5, j
mainloop:
GOSUB bankchange
GOSUB ToetsIndrukken (KeyPress)
GOSUB potread
GOSUB RGB
goto mainloop
bankchange:
' bank omhoog
Als portc.2 = 1 & upstate = 1 then
j = j + 1
als j > 8 dan
j = 1
endif
' Schakel alle notities
voor i = 0 tot 128
hserout [$92, ik, 0]
volgende ik
' schrijven van bank veranderen naar eeprom
schrijven van 5, j
Upstate = 0
endif
Als portc.2 = 0 & upstate = 0 then
Upstate = 1
endif
' bank neer
Als portc.1 = 1 & downstate = 1 then
j = j - 1
als j < 1 dan
j = 8
endif
' Schakel alle notities
voor i = 0 tot 128
hserout [$92, ik, 0]
volgende ik
' schrijven van bank veranderen naar eeprom
schrijven van 5, j
Downstate = 0
endif
Als portc.1 = 0 & downstate = 0 then
Downstate = 1
endif
' bank weergeven
serout PORTB.3, N9600, [$Fe, $c0]
serout PORTB.3, N9600, ["BANK", "", #j, ""]
als j = 1 then
c = 0
endif
als j = 2 then
c = 16
endif
als j = 3 then
c = 32
endif
als j = 4 then
c = 48
endif
als j = 5 then
c = 64
endif
als j = 6 then
c = 80
endif
als j = 7 then
c = 96
endif
als j = 8 then
c = 112
endif
terugkeer
potread:
"adc potentiometer spullen---
' Lees ic2
voor i = 1 tot en met 8
drie [i] = 0
Als ik = 1 then
i2cwrite SDA, SCL, % 00010000, [10001100%]
endif
Als ik = 2 then
i2cwrite SDA, SCL, % 00010000, [11001100%]
endif
Als ik dan 3 =
i2cwrite SDA, SCL, % 00010000, [10011100%]
endif
Als ik dan 4 =
i2cwrite SDA, SCL, % 00010000, [11011100%]
endif
Als ik vervolgens 5 =
i2cwrite SDA, SCL, % 00010000, [10101100%]
endif
Als ik vervolgens 6 =
i2cwrite SDA, SCL, % 00010000, [11101100%]
endif
Als ik vervolgens 7 =
i2cwrite SDA, SCL, % 00010000, [10111100%]
endif
Als ik = 8 then
i2cwrite SDA, SCL, % 00010000, [11111100%]
endif
' deze pauze is belangrijk om te voorkomen dat de adc springen rond
onderbreken van 4
i2cread SDA, SCL, % 00010001, [een [i], twee [i]]
drie [i] = één [i] | drie [i]
drie [i] = drie [i] << 4
twee [i] = twee [i] >> 4
drie [i] = twee [i] | drie [i]
currentadval [i] = drie [i]
' onderbreken van 10
drie [i] = drie [i] * 128
drie [i] = div32 4095
Als abs (currentadval [i] - prevadval[i]) > = drempel then
hserout [$B2, 13 + i, drie [i]]
prevpotval [i] = drie [i]
prevadval [i] = currentadval [i]
' weer een d waarde
serout PORTB.3, N9600, [$Fe, $80]
serout PORTB.3, N9600, [#178, "", #(13+i), "", #three [i], ""]
endif
volgende ik
' Lees ic1
voor i = 1 tot en met 8
three1 [i] = 0
Als ik = 1 then
i2cwrite SDA, SCL, % 00010100, [10001100%]
endif
Als ik = 2 then
i2cwrite SDA, SCL, % 00010100, [11001100%]
endif
Als ik dan 3 =
i2cwrite SDA, SCL, % 00010100, [10011100%]
endif
Als ik dan 4 =
i2cwrite SDA, SCL, % 00010100, [11011100%]
endif
Als ik vervolgens 5 =
i2cwrite SDA, SCL, % 00010100, [10101100%]
endif
Als ik vervolgens 6 =
i2cwrite SDA, SCL, % 00010100, [11101100%]
endif
Als ik vervolgens 7 =
i2cwrite SDA, SCL, % 00010100, [10111100%]
endif
Als ik = 8 then
i2cwrite SDA, SCL, % 00010100, [11111100%]
endif
' deze pauze is belangrijk om te voorkomen dat de adc springen rond
onderbreken van 4
% 00010101, SDA, SCL, i2cread [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]
' onderbreken van 10
three1 [i] = three1 [i] * 128
three1 [i] = div32 4095
Als abs (currentadval1 [i] - prevadval1[i]) > = drempel then
hserout [$B2, 13 + i, three1 [i]]
prevpotval1 [i] = three1 [i]
prevadval1 [i] = currentadval1 [i]
' weer een d waarde
serout PORTB.3, N9600, [$Fe, $80]
serout PORTB.3, N9600, [#178, "", #(21+i), "", #three1 [i], ""]
endif
volgende ik
terugkeer
ToetsIndrukken (KeyPress):
' knop 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
onderbreken van 1
bouncecheck1.0 = portc.4
bouncecheck1.1 = portc.5
bouncecheck1.2 = portc.7
bouncecheck1.3 = portb.0
Als buttonval1 = bouncecheck1 then
voor i = 0 tot 3' telling van 0 tot 3
waarde1 = buttonval1 >> ik
Als 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
Als 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
volgende ik
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
onderbreken van 1
bouncecheck2.0 = portc.4
bouncecheck2.1 = portc.5
bouncecheck2.2 = portc.7
bouncecheck2.3 = portb.0
Als buttonval2 = bouncecheck2 then
voor i = 0 tot 3' telling van 0 tot 3
waarde2 = buttonval2 >> ik
Als 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
Als 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
volgende ik
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
onderbreken van 1
bouncecheck3.0 = portc.4
bouncecheck3.1 = portc.5
bouncecheck3.2 = portc.7
bouncecheck3.3 = portb.0
Als buttonval3 = bouncecheck3 then
voor i = 0 tot 3' telling van 0 tot 3
Waarde3 = buttonval3 >> ik
Als 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
Als 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
volgende ik
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
onderbreken van 1
bouncecheck4.0 = portc.4
bouncecheck4.1 = portc.5
bouncecheck4.2 = portc.7
bouncecheck4.3 = portb.0
Als buttonval4 = bouncecheck4 then
voor i = 0 tot 3' telling van 0 tot 3
Waarde4 = buttonval4 >> ik
Als 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
Als 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
volgende ik
endif
terugkeer
RGB:
als j = 1 then
' geel
Porta.1 = 0
pauseus 200
Porta.0 = 1
Porta.1 = 1
Porta.2 = 0
endif
als j = 2 then
' rood
Porta.0 = 1
Porta.1 = 0
Porta.2 = 0
endif
als j = 3 then
' groen
Porta.0 = 0
Porta.1 = 1
Porta.2 = 0
endif
als j = 4 then
' blauw
Porta.0 = 0
Porta.1 = 0
Porta.2 = 1
endif
als j = 5 then
' paars
Porta.0 = 1
Porta.1 = 0
Porta.2 = 1
endif
als j = 6 then
' witte
Porta.0 = 1
Porta.1 = 1
Porta.2 = 1
endif
als j = 7 then
' cyaan
Porta.0 = 0
Porta.1 = 1
Porta.2 = 1
endif
als j = 8 then
' blauw
Porta.0 = 0
Porta.1 = 0
Porta.2 = 1
endif
keren