so ich habe mir mal kurz zeit genommen den code ein bisschen zu kommentieren... und ihn zu veröffentlichen... viel spass beim durchlesenist vielleicht ein bisschen umständlich programmiert
gruss bluesmashCode:$regfile = "m8def.dat" $crystal = 8000000 '$framesize = 512 '$swstack = 512 '$hwstack = 512 Config Timer1 = Timer , Prescale = 1 On Timer1 Timer_irq Const Timervorgabe = 65219 Enable Timer1 Config Rc5 = Pinb.6 Dim Address As Byte , Command As Byte Enable Interrupts Config Portc.0 = Output Config Portc.1 = Output Config Portc.2 = Output Config Portc.3 = Output Config Portc.4 = Output Config Portc.5 = Output Config Portd.0 = Output Config Portd.1 = Output Config Portd.2 = Output Config Portd.3 = Output Config Portd.4 = Output Config Portd.5 = Output Config Portd.6 = Output Config Portd.7 = Output Config Portb.0 = Output Config Portb.1 = Output Config Portb.2 = Output 'Variabeln für 3 Farben pro LED und insgesamt 5 LED's Dim Ledr(5) As Byte Dim Ledg(5) As Byte Dim Ledb(5) As Byte 'Variabeln für zufalszahlen Dim Zufall_1 As Byte Dim Zufall_2 As Byte Dim Zufall_3 As Byte Zufall_1 = 60 Zufall_2 = 130 Zufall_3 = 200 'Temp variabel für diverse zwischenspeicherungen Dim Temp As Word 'Variabeln im eram für dauerhafte speicherung Dim Speicher(90) As Eram Byte Dim Zeiger As Byte 'Zählervariabel für Pwm Dim Pwm As Byte Pwm = 100 'Variabel für laufender fliessender Farbübergang Dim Tim As Long Dim Zaehler As Byte Dim Progst(5) As Byte Dim Prog6 As Bit 'Zählervariabel für diverse Schlaufen Dim I As Byte 'Variabeln für Farbprogrammierung Dim Progmod As Bit Dim Rot As Bit Dim Gruen As Bit Dim Blau As Bit Dim Led As Byte Dim Tempr As Byte Dim Tempg As Byte Dim Tempb As Eram Byte Dim Aktprog As Byte Dim Aktprogtemp As Byte 'Bei Start die ersten Farbwerte laden Zeiger = 0 For I = 1 To 5 Incr Zeiger Ledr(i) = Speicher(zeiger) Incr Zeiger Ledg(i) = Speicher(zeiger) Incr Zeiger Ledb(i) = Speicher(zeiger) Next I Dim Geschw As Long Geschw = 1000 Do 'Standbymodus alle Led's aus If Aktprog = 99 Then Aktprogtemp = 99 For I = 1 To 5 Ledr(i) = 0 Ledg(i) = 0 Ledb(i) = 0 Next End If 'Infrarotempfang Getrc5(address , Command) If Address = 0 Then Command = Command And 127 End If '**********Abspielmodus****************** If Progmod = 0 Then 'die 2 Status LED's Ausschalten Portb.1 = 0 Portb.2 = 0 'Infrarotempfang und Programm zuweisung If Command = 60 And Aktprog <> 99 And Aktprog <> 6 Then Progmod = 1 If Command = 12 Then Aktprog = 99 If Command = 1 Then Aktprog = 0 If Command = 2 Then Aktprog = 1 If Command = 3 Then Aktprog = 2 If Command = 4 Then Aktprog = 3 If Command = 5 Then Aktprog = 4 If Command = 6 Then Aktprog = 5 If Command = 7 Then Aktprog = 6 If Command = 8 Then Aktprog = 7 If Command = 9 Then Aktprog = 8 'Programme für feste Farbwerte If Aktprog = 0 Or Aktprog = 1 Or Aktprog = 2 Or Aktprog = 3 Or Aktprog = 4 Or Aktprog = 5 Then Prog6 = 0 If Aktprog <> Aktprogtemp Then Aktprogtemp = Aktprog Zeiger = Aktprog * 15 For I = 1 To 5 Incr Zeiger Ledr(i) = Speicher(zeiger) Incr Zeiger Ledg(i) = Speicher(zeiger) Incr Zeiger Ledb(i) = Speicher(zeiger) Next I End If End If 'Zufalsfarben für einzelne LED nacheinander If Aktprog = 7 Then Aktprogtemp = Aktprog Prog6 = 0 If Command = 32 Then Geschw = Geschw + 2000 Portb.1 = 1 Portb.2 = 1 Waitms 2 Portb.1 = 0 Portb.2 = 0 End If If Command = 33 Then Geschw = Geschw - 2000 Portb.1 = 1 Portb.2 = 1 Waitms 2 Portb.1 = 0 Portb.2 = 0 End If If Geschw < 3000 Then Geschw = 3000 Portb.1 = 1 Waitms 100 Portb.2 = 1 Waitms 100 Portb.1 = 0 Portb.2 = 0 End If If Geschw > 500000 Then Geschw = 500000 Portb.1 = 1 Waitms 100 Portb.2 = 1 Waitms 100 Portb.1 = 0 Portb.2 = 0 End If If Tim > Geschw Then Tim = 0 Incr I If I >= 5 Then I = 0 Temp = Zufall_1 And Zufall_2 Temp = Temp * 100 Temp = Temp / 255 Ledr(i) = Temp Temp = Zufall_1 And Zufall_3 Temp = Temp * 100 Temp = Temp / 255 Ledg(i) = Temp Temp = Zufall_3 And Zufall_2 Temp = Temp * 100 Temp = Temp / 255 Ledb(i) = Temp End If End If 'Zufallsfarben für alle LED's miteinander If Aktprog = 8 Then Aktprogtemp = Aktprog Prog6 = 0 If Command = 32 Then Geschw = Geschw + 2000 Portb.1 = 1 Portb.2 = 1 Waitms 2 Portb.1 = 0 Portb.2 = 0 End If If Command = 33 Then Geschw = Geschw - 2000 Portb.1 = 1 Portb.2 = 1 Waitms 2 Portb.1 = 0 Portb.2 = 0 End If If Geschw < 3000 Then Geschw = 3000 Portb.1 = 1 Waitms 100 Portb.2 = 1 Waitms 100 Portb.1 = 0 Portb.2 = 0 End If If Geschw > 500000 Then Geschw = 500000 Portb.1 = 1 Waitms 100 Portb.2 = 1 Waitms 100 Portb.1 = 0 Portb.2 = 0 End If If Tim > Geschw Then Tim = 0 Incr I If I >= 5 Then I = 0 Temp = Zufall_1 And Zufall_2 Temp = Temp * 100 Temp = Temp / 255 Ledr(1) = Temp Ledr(2) = Temp Ledr(3) = Temp Ledr(4) = Temp Ledr(5) = Temp Temp = Zufall_1 And Zufall_3 Temp = Temp * 100 Temp = Temp / 255 Ledg(1) = Temp Ledg(2) = Temp Ledg(3) = Temp Ledg(4) = Temp Ledg(5) = Temp Temp = Zufall_3 And Zufall_2 Temp = Temp * 100 Temp = Temp / 255 Ledb(1) = Temp Ledb(2) = Temp Ledb(3) = Temp Ledb(4) = Temp Ledb(5) = Temp End If End If 'Laufender Farbübergang If Aktprog = 6 Then Aktprogtemp = Aktprog If Prog6 = 0 Then Prog6 = 1 For I = 1 To 5 Progst(i) = I Ledr(i) = 0 Ledg(i) = 0 Ledb(i) = 0 Next Ledg(2) = 50 Ledr(3) = 100 Ledr(4) = 50 End If 'If Tim > Geschw Then Incr Zaehler For I = 1 To 5 If Progst(i) = 1 Then Ledr(i) = 100 Ledg(i) = Ledg(i) + 1 Ledb(i) = 0 End If If Progst(i) = 2 Then Ledr(i) = 100 Ledg(i) = Ledg(i) + 1 Ledb(i) = 0 End If If Progst(i) = 3 Then Ledg(i) = 100 Ledr(i) = Ledr(i) - 1 Ledb(i) = 0 End If If Progst(i) = 4 Then Ledg(i) = 100 Ledr(i) = Ledr(i) - 1 Ledb(i) = 0 End If If Progst(i) = 5 Then Ledg(i) = 100 Ledb(i) = Ledb(i) + 1 Ledr(i) = 0 End If If Progst(i) = 6 Then Ledg(i) = 100 Ledb(i) = Ledb(i) + 1 Ledr(i) = 0 End If If Progst(i) = 7 Then Ledb(i) = 100 Ledg(i) = Ledg(i) - 1 Ledr(i) = 0 End If If Progst(i) = 8 Then Ledb(i) = 100 Ledg(i) = Ledg(i) - 1 Ledr(i) = 0 End If If Progst(i) = 9 Then Ledb(i) = 100 Ledr(i) = Ledr(i) + 1 Ledg(i) = 0 End If If Progst(i) = 10 Then Ledb(i) = 100 Ledr(i) = Ledr(i) + 1 Ledg(i) = 0 End If If Progst(i) = 11 Then Ledr(i) = 100 Ledb(i) = Ledb(i) - 1 Ledg(i) = 0 End If If Progst(i) = 12 Then Ledr(i) = 100 Ledb(i) = Ledb(i) - 1 Ledg(i) = 0 End If Next I If Zaehler = 50 Then Zaehler = 0 For I = 1 To 5 Incr Progst(i) If Progst(i) = 13 Then Progst(i) = 1 Next I End If End If 'End If End If '*********** Programmiermodus ************ If Progmod = 1 Then Portb.1 = 1 Portb.2 = 1 'Speichern der Programmierten Farben im Eram If Command = 41 Then Progmod = 0 Zeiger = Aktprog * 15 For I = 1 To 5 Incr Zeiger Speicher(zeiger) = Ledr(i) Incr Zeiger Speicher(zeiger) = Ledg(i) Incr Zeiger Speicher(zeiger) = Ledb(i) Next I End If 'Farbauswahl = Rot If Command = 55 Then Rot = 1 Gruen = 0 Blau = 0 End If 'Farbauswahl = grün If Command = 54 Then Rot = 0 Gruen = 1 Blau = 0 End If 'Farbauswahl = Blau If Command = 52 Then Rot = 0 Gruen = 0 Blau = 1 End If 'Ledauswahl erhöhen If Command = 17 Then Waitms 100 If Led < 5 Then Incr Led Tempr = Ledr(led) Tempg = Ledg(led) Tempb = Ledb(led) Ledr(led) = 0 Ledg(led) = 0 Ledb(led) = 0 Waitms 200 Ledr(led) = Tempr Ledg(led) = Tempg Ledb(led) = Tempb End If 'Led auswahl erniedrigen If Command = 16 Then Waitms 100 If Led > 1 Then Decr Led Tempr = Ledr(led) Tempg = Ledg(led) Tempb = Ledb(led) Ledr(led) = 0 Ledg(led) = 0 Ledb(led) = 0 Waitms 200 Ledr(led) = Tempr Ledg(led) = Tempg Ledb(led) = Tempb End If 'Bei der Ausgewählten LED die Ausgewälte Farbe erhöhen und bei erreichen des Maximums 3maliges blinken der LED If Command = 32 Then If Rot = 1 And Ledr(led) < 101 Then Incr Ledr(led) If Gruen = 1 And Ledg(led) < 101 Then Incr Ledg(led) If Blau = 1 And Ledb(led) < 101 Then Incr Ledb(led) If Ledr(led) = 101 Or Ledg(led) = 101 Or Ledb(led) = 101 Then For I = 1 To 3 Tempr = Ledr(led) Tempg = Ledg(led) Tempb = Ledb(led) Ledr(led) = 0 Ledg(led) = 0 Ledb(led) = 0 Waitms 100 Ledr(led) = Tempr Ledg(led) = Tempg Ledb(led) = Tempb Waitms 100 Next I If Rot = 1 And Ledr(led) > 0 Then Decr Ledr(led) If Gruen = 1 And Ledg(led) > 0 Then Decr Ledg(led) If Blau = 1 And Ledb(led) > 0 Then Decr Ledb(led) End If End If 'Bei der Ausgewählten LED die Ausgewälte Farbe erniedrigen If Command = 33 Then If Rot = 1 And Ledr(led) > 0 Then Decr Ledr(led) If Gruen = 1 And Ledg(led) > 0 Then Decr Ledg(led) If Blau = 1 And Ledb(led) > 0 Then Decr Ledb(led) End If 'Alle Farben der Ausgewählten LED auf 0 setzen If Command = 13 Then Ledr(led) = 0 Ledg(led) = 0 Ledb(led) = 0 End If End If Loop Timer_irq: 'Timervorgabe laden Timer1 = Timervorgabe 'Diverse Variabeln erhöhen Incr Tim Incr Zufall_1 Incr Zufall_2 Incr Zufall_3 'Zähler für pwm erniedrigen Decr Pwm 'bei einem durchlauf der PWM variabel alle ports Ausschalten If Pwm = 0 Then Portd = 0 Portc = 0 Portb.0 = 0 Pwm = 100 End If 'Ports je nach Farbintensität einschalten If Pwm <= Ledg(1) Then Portc.0 = 1 If Pwm <= Ledb(1) Then Portc.1 = 1 If Pwm <= Ledr(1) Then Portc.2 = 1 If Pwm <= Ledg(2) Then Portc.3 = 1 If Pwm <= Ledb(2) Then Portc.4 = 1 If Pwm <= Ledr(2) Then Portc.5 = 1 If Pwm <= Ledg(3) Then Portd.0 = 1 If Pwm <= Ledb(3) Then Portd.1 = 1 If Pwm <= Ledr(3) Then Portd.2 = 1 If Pwm <= Ledg(4) Then Portd.3 = 1 If Pwm <= Ledb(4) Then Portd.4 = 1 If Pwm <= Ledr(4) Then Portd.5 = 1 If Pwm <= Ledg(5) Then Portd.6 = 1 If Pwm <= Ledb(5) Then Portd.7 = 1 If Pwm <= Ledr(5) Then Portb.0 = 1 Return







Zitieren

Lesezeichen