Knight Rider Lauflicht mit Dimm-Effekt

  1. 'Lauflicht mit Knight-Rider-Effekt.
  2. 'LEDs werden per Software-PWM über Timer1 ausgedimmt.
  3. 'http://www.youtube.com/watch?v=yFvASu5q8dU
  4. 'für STK500
  5. 'Dieser Quelltext steht unter der CC-Lizenz
  6. 'http://creativecommons.org/licenses/by-nc-sa/3.0/de/
  7. 'Namensnennung-Keine kommerzielle Nutzung-Weitergabe unter gleichen Bedingungen
  8. 'Michael Kinz
  9. $regfile = "m16def.dat"
  10. $crystal = 8000000
  11. $hwstack = 32
  12. $swstack = 24
  13. $framesize = 16
  14. Ddrc = 255
  15. Portc = 255
  16. Dim A As Byte
  17. Dim B As Byte
  18. Dim Z As Byte
  19. Dim X As Byte
  20. Dim Zeit As Word
  21. Dim Richtung As Bit
  22. Dim Led(8) As Byte
  23. Config Timer0 = Timer , Prescale = 64
  24. Enable Timer0
  25. Enable Interrupts
  26. On Timer0 Timer0_interrupt
  27. A = 1
  28. Portc = 0
  29. Waitms 200
  30. Do
  31. 'nächste LED alle 0,1 sec
  32. If Zeit > 50 Then
  33. Led(a) = 255 'LED "aufladen"
  34. If Richtung = 0 Then
  35. A = A + 1
  36. If A = 8 Then
  37. Richtung = 1
  38. End If
  39. Else
  40. A = A - 1
  41. If A = 1 Then
  42. Richtung = 0
  43. End If
  44. End If
  45. Zeit = 1
  46. End If
  47. Z = Z + 1
  48. 'Soft PWM
  49. 'Vergleich zwischen frei laufendem Zähler Z und LED()-Wert
  50. For B = 1 To 8
  51. If Led(b) > Z Then
  52. B = B - 1
  53. Portc.b = 0
  54. Else
  55. B = B - 1
  56. Portc.b = 1
  57. End If
  58. B = B + 1
  59. Next
  60. Loop
  61. End
  62. '----------------
  63. Timer0_interrupt:
  64. Timer0 = 6
  65. ' Prescale = 64 + Timer0 = 6 = 500Hz
  66. ' Bei LED-Startwert von 255 ist nach 0,51 Sekunden ausgedimmt
  67. Zeit = Zeit + 1
  68. For X = 1 To 8
  69. If Led(x) > 0 Then
  70. Led(x) = Led(x) - 1 'LEDs "entladen"
  71. End If
  72. Next
  73. Return