1. eepromba tárolom a változók kezdeti értékét
2. megszakításnál megnézem mi volt megnyomva eltárolom egy bitben
3.select case-el eldöntöm mi volt megnyomva és közben beolvasom a ledek állását egy databól aztán léptetek egyett (futófény)
Kód: Egész kijelölése
$regfile = "m8def.dat"
$crystal = 8000000
'portok beállítása (direkt nincs konfigolva az input csak a megszakítás)
Config Portd.4 = Output
Config Portd.1 = Output
Config Portd.2 = Output
Config Portd.3 = Output
Config Portd.7 = Output
Config Portd.0 = Output
Config Portd.3 = Input
Config Portb = Output
Config Portc = Output
Config Int1 = Low Level
Dim Rogzit As Byte
Dim Led As Byte
Dim Pvzled As Byte
Dim V As Byte
Dim Ledpoz As Byte
Dim Speed As Byte
Dim Gomb As Bit
Dim Sig As Bit
Dim Ledaddress As Integer
'adatok beolvasása
Waitms 250
Readeeprom Ledaddress , &H1F0
Waitms 10
Readeeprom Rogzit , &H1F1
Waitms 10
Readeeprom Pvzled , &H1F2
Waitms 10
Readeeprom Speed , &H1F3
Waitms 10
'itt majd lessz egy konfigurálási lehetőség ha bekapcsoláskor valaki benyomva tartja a gombot
If Pind.6 = 0 Then Gosub Beallit
'megszakítás konfigja
On Int1 Lekerdez Nosave
Enable Interrupts
Enable Int1
'a főprogram!
Res:
'az eepromba eltárolva vannak a Data szegmensei
Readeeprom Ledpoz , Ledaddress
Waitms 10
'itt gombnyomásra ugrik egyett a beállítás
If Gomb = 1 Then
Portd.2 = 0
Portd.0 = 0
Portd.7 = 0
Portd.1 = 0
Portb = 0
Portc = 0
Select Case Pvzled
Case 3
Pvzled = 1
Case 2
Pvzled = 3
Case 1
Pvzled = 2
End Select
Incr Ledaddress
Gomb = 0
End If
'itt egy másik bemenetre véletlenszerűen kezd villogni a futófény
If Rogzit = 0 Then
If Sig = 1 Then
Pvzled = Rnd(3) + 1
Ledaddress = Rnd(24) + 1
Sig = 0
End If
End If
'8x2 led futófény főprogramja itt direkt címezve a portlábak de kicsit
keverve hogy a led byteba el legyen tárolva igy egy ledállás
For V = 1 To 8
Led = Lookup(ledpoz , Leddata)
Waitms 5
Select Case Pvzled
Case 1
Portc.1 = Led.0
Portb.4 = Led.1
Portb.2 = Led.2
Portb.0 = Led.3
Portd.2 = Led.4
Portd.0 = Led.5
Portc.5 = Led.6
Portc.3 = Led.7
Case 2
Portb.5 = Led.0
Portb.3 = Led.1
Portb.1 = Led.2
Portd.7 = Led.3
Portd.1 = Led.4
Portc.6 = Led.5
Portc.4 = Led.6
Portc.2 = Led.7
Case 3
Portc.1 = Led.0
Portb.5 = Led.0
Portb.4 = Led.1
Portb.3 = Led.1
Portb.2 = Led.2
Portb.1 = Led.2
Portb.0 = Led.3
Portd.7 = Led.3
Portd.2 = Led.4
Portd.1 = Led.4
Portd.0 = Led.5
Portc.6 = Led.5
Portc.5 = Led.6
Portc.4 = Led.6
Portc.3 = Led.7
Portc.2 = Led.7
End Select
'sebesség beállítása
Waitms Speed
'következő ledállás
Incr Ledpoz
Next V
Waitms 10
Restore Leddata
Goto Res
'ledállások a flasht nem terheli mega 8 nál eepromba nem férne el
Leddata:
Data 1 , 2 , 4 , 8 , 16 , 32 , 64 , 128
Data 128 , 64 , 32 , 16 , 8 , 4 , 2 , 1
Data 3 , 6 , 12 , 24 , 48 , 96 , 192 , 129
Data 129 , 192 , 96 , 48 , 24 , 12 , 6 , 3
Data 7 , 14 , 28 , 56 , 112 , 224 , 193 , 131
Data 131 , 193 , 224 , 112 , 56 , 28 , 14 , 7
Data 15 , 30 , 60 , 120 , 240 , 225 , 195 , 135
Data 135 , 195 , 225 , 240 , 120 , 60 , 30 , 15
Data 31 , 62 , 124 , 248 , 241 , 227 , 199 , 143
Data 143 , 199 , 227 , 241 , 248 , 124 , 62 , 31
Data 63 , 126 , 252 , 249 , 243 , 231 , 207 , 159
Data 159 , 207 , 231 , 243 , 249 , 252 , 126 , 63
Data 127 , 254 , 252 , 251 , 247 , 239 , 223 , 191
Data 191 , 223 , 239 , 247 , 251 , 252 , 254 , 127
Data 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255
Data 17 , 34 , 68 , 136 , 17 , 34 , 68 , 136
Data 136 , 68 , 34 , 17 , 136 , 68 , 34 , 17
Data 238 , 221 , 187 , 119 , 238 , 221 , 187 , 119
Data 119 , 187 , 221 , 238 , 119 , 187 , 221 , 238
Data 85 , 170 , 85 , 170 , 85 , 170 , 85 , 170
Data 1 , 3 , 7 , 15 , 31 , 63 , 127 , 255
Data 255 , 127 , 63 , 31 , 15 , 7 , 3 , 1
Data 0 , 255 , 0 , 255 , 0 , 255 , 0 , 255
'ez itt a megszakítás
Lekerdez:
If Pind.6 = 0 Then Gomb = 1
If Pind.5 = 0 Then Sig = 1
Return
' ez még nincs kész ez lesz a beállító menü
Beallit:
Do
Portc.1 = 1
Waitms 50
Portc.1 = 0
If Pind.6 = 0 Then Goto Proba
Loop