Przy kawie napisałem coś takiego i nagrałem filmik. Zanim napisałem post już miałem kilka nowych pomysłów łącznie z polifonią ahahahaha
Teraz wciśnięcie innego przycisku dopóki jeden gra skutkuje tym że dalej gra ten sam dźwięk a można by zapamiętywać poprzedni stan, porównywać i ewentualnie dźwięk zmienić
Pobawiłem się i wracam do swoich zadań ahahahaha Przypomniały mi się te pierwsze organki elektroniczne
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- $regfile = "m16def.dat"
- $crystal = 8000000
- $hwstack = 40
- $swstack = 16
- $framesize = 64
- Config Portd = Input : Portd = 255
- Dim Stan_sw As Byte
- Config Timer1 = Timer , Prescale = 1 , Compare_a = Disconnect , Compare_b = Disconnect , Clear_timer = 1
- Do
- Stan_sw = Pind 'sprawdź czy wciśnięto jakiś przycisk
- If Stan_sw <> 255 Then
- Select Case Stan_sw
- Case &B11111110
- Compare1a = 3819 '1047Hz @8MHz
- Case &B11111101
- Compare1a = 2999 '1000Hz @8MHz
- Case &B11111011
- Compare1a = 7999 '500Hz @8MHz
- Case &B11110111
- Compare1a = 6665 '600Hz @8MHz
- End Select
- Config Timer1 = Timer , Prescale = 1 , Compare_a = Toggle , Compare_b = Disconnect , Clear_timer = 1 'włącz wyjście Timera
- Gosub Trzymaj_dzwiek 'skocz do podprogramu
- End If
- Loop
- Trzymaj_dzwiek:
- 'dzwięk odtwarzany jest przez Timer sprzętowo bez uzycia przerwań
- 'odtwarzany jest tak długo jak wciśnięty jest jakiś przycisk ;)
- Do
- Stan_sw = Pind
- Loop Until Stan_sw = 255
- 'tutaj już po zwolnieniu przycisku, odłącz wyjście Timera1 od pinu OC1A
- Config Timer1 = Timer , Prescale = 1 , Compare_a = Disconnect , Compare_b = Disconnect , Clear_timer = 1
- Return