Explodierende Zeichen auf einer Matrixanzeige

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Also tingel-tangel-bob kenn ich wirklich nicht, der kam wohl in der Zeit, nachdem wir den Fernseher aus dem Wohnzimmer geschmissen hatten. Die letzte Serie, die wir sahen, war das


      @stefanhamburg stimmt, ist mehr was für die Schießbude. Ich arbeite ja noch dran.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Bisschen weiter programmiert. Die Ziffern fallen jetzt unabhängig von den Nachbarn herunter und zerplatzen nach einer leicht zufälligen Zeit. Diesen Effekt will ich bei der angepeilten Uhr auch haben, wenn sich mehrere Ziffern ändern. Was jetzt noch fehlt sind die 'Unfälle' beim Runterfallen und halt überhaupt die Uhrfunktion.
      Dateien
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Jetzt bin ich bei 50msec/Bild, soviel hatte ich Anfangs auch (bis auf die Zeitlupe). Langsamer ist ja leicht möglich. Wahrscheinlich auch nötig, wenn die Ziffern nicht einfach runter fallen, sondern, wenn sie unten aufschlagen, bisschen gestaucht werden und dadurch wieder bisschen hoch hopsen. 'Wackelpuddingziffern'.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Hier mal ein elastischer Fall

      Das Programm zeige ich noch nicht, ist ein Graus <X und noch viel zu aufgebläht. Außerdem gibt es 'Phantomexplosionen', noch keine Ahnung, woran das wieder liegt :cursing:
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • tschoeatsch schrieb:

      Das Programm zeige ich noch nicht, ist ein Graus
      Jetzt kann ich's mal zeigen:
      Das Hauptprogramm

      BASCOM-Quellcode

      1. 'Explosionsprogramm V0.06
      2. $regfile = "m32def.dat"
      3. $crystal = 16000000
      4. $hwstack = 64
      5. $swstack = 100
      6. $framesize = 60
      7. Config Base = 0
      8. Const Timer1reload = 3125
      9. config timer1=timer,prescale = 256
      10. load timer1 , Timer1Reload
      11. on ovf1 Timer1_isr
      12. enable timer1
      13. start timer1
      14. Enable Interrupts
      15. 'Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Noss = 1 , Clockrate = 16
      16. Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Noss = 1 , Clockrate = 16
      17. Config Portb.4 = Output
      18. Config Portb.2 = Output : Cs Alias Portb.2
      19. 'Mosi (B.5)>Din, SCK(B.7)>Clk
      20. Spiinit
      21. Wait 1
      22. Const Anzahl_module = 12
      23. Dim Modul As Byte
      24. Dim Bildsp(48) As Word
      25. Dim Explsp(48) As Word
      26. Dim Display_digit As Byte , Display_daten As Byte
      27. Dim N As Byte , Nn As Byte
      28. Dim Zeile As Byte , Zeile_ As Byte , Zeile_2 As Byte , Spalte As Byte , Byte_ As Byte , Bit_ As Byte
      29. Dim Std_z As Byte , Std_e As Byte , Min_z As Byte , Min_e As Byte
      30. Dim Hilfsbit As Bit
      31. Dim Zifferbyte(5) As Byte
      32. Dim Weiter As Bit
      33. Dim Ex_zaehler(4) As Byte , Setz_zaehler(4) As Byte , Ziffer_neu(4)as Byte , Ziffer_alt(4)as Byte
      34. Dim Pos(4) As Byte
      35. Dim Fertiggesetzt As Byte , Fertigexplodiert As Byte
      36. Pos(0) = 7
      37. Pos(1) = 13
      38. Pos(2) = 22
      39. Pos(3) = 28
      40. Declare Sub Trenner
      41. Declare Sub Explosion(byval Position As Byte , Byval Bildnummer As Byte)
      42. Declare Sub Fallende_ziffer(byval Ziffer As Byte , Byval Position As Byte , Byval Bildnummer As Byte)
      43. Declare Sub Aktion()
      44. Declare Sub Fallende_ziffer_staucher(byval Ziffer As Byte , Byval Position As Byte , Byval Bildnummer As Byte)
      45. Gosub Init_max7219
      46. Wait 1
      47. Do
      48. For N = 0 To 3
      49. If Ex_zaehler(n) = 0 And Setz_zaehler(n) = 0 Then
      50. If Ziffer_neu(n) < 9 Then
      51. Incr Ziffer_neu(n)
      52. Else
      53. Ziffer_neu(n) = 0
      54. End If
      55. Setz_zaehler(n) = 29 ' + Rnd(50)
      56. Ex_zaehler(n) = 23 + Rnd(50)
      57. Ex_zaehler(n) = Ex_zaehler(n) + Setz_zaehler(n)
      58. End If
      59. Next N
      60. Call Aktion
      61. Loop
      62. End
      63. 'subs
      64. Timer1_isr:
      65. Load Timer1 , Timer1reload
      66. Weiter = 1
      67. return
      68. Sub Aktion
      69. Local Z As Byte
      70. For Z = 0 To 39 'Explosionsbildspeicher löschen
      71. Explsp(z) = 0
      72. Next Z
      73. For Z = 0 To 3
      74. If Setz_zaehler(z) > 0 Then
      75. Call Fallende_ziffer_staucher(ziffer_neu(z) , Pos(z) , Setz_zaehler(z))
      76. Decr Setz_zaehler(z)
      77. Fertiggesetzt.z = 1
      78. Else
      79. Fertiggesetzt.z = 0
      80. End If
      81. If Ex_zaehler(z) > 0 Then
      82. Call Explosion(pos(z) , Ex_zaehler(z))
      83. Decr Ex_zaehler(z)
      84. Fertigexplodiert.z = 1
      85. Else
      86. Fertigexplodiert.z = 0
      87. End If
      88. Next Z
      89. Gosub Anzeige
      90. Bitwait Weiter , Set
      91. Weiter = 0
      92. End Sub
      93. Sub Fallende_ziffer(byval Ziffer As Byte , Byval Position As Byte , Byval Bildnummer As Byte)
      94. Local Z As Byte
      95. Local Tabellenstelle As Byte
      96. Tabellenstelle = Ziffer * 5 'Übertragen der Ziffer-data in Hilfsbytes
      97. For Z = 0 To 4
      98. Zifferbyte(z) = Lookup(tabellenstelle , Font )
      99. Incr Tabellenstelle
      100. Next Z
      101. If Bildnummer < 14 Then 'ab jetzt werden Teile der Ziffer angezeigt
      102. If Bildnummer > 6 Then
      103. Z = Bildnummer - 7
      104. Shift Bildsp(position) , Left , 1
      105. Shift Bildsp(position + 1) , Left , 1
      106. Shift Bildsp(position + 2) , Left , 1
      107. Shift Bildsp(position + 3) , Left , 1
      108. Shift Bildsp(position + 4) , Left , 1
      109. Bildsp(position).0 = Zifferbyte(0).z
      110. Bildsp(position + 1).0 = Zifferbyte(1).z
      111. Bildsp(position + 2).0 = Zifferbyte(2).z
      112. Bildsp(position + 3).0 = Zifferbyte(3).z
      113. Bildsp(position + 4).0 = Zifferbyte(4).z
      114. Else
      115. Shift Bildsp(position) , Left , 1
      116. Shift Bildsp(position + 1) , Left , 1
      117. Shift Bildsp(position + 2) , Left , 1
      118. Shift Bildsp(position + 3) , Left , 1
      119. Shift Bildsp(position + 4) , Left , 1
      120. End If
      121. End If
      122. End Sub
      123. Sub Explosion(byval Position As Byte , Byval Bildnummer As Byte)
      124. Local Startspalte As Byte
      125. Local Z As Byte , X As Word , Tabellenstelle As Word
      126. If Bildnummer < 24 Then
      127. Tabellenstelle = 23 - Bildnummer
      128. Tabellenstelle = Tabellenstelle * 19 'Beginn der Tabelle für das aktuelle Explosionsbild
      129. Startspalte = Position - 7
      130. For Z = 1 To 19
      131. X = Lookup(tabellenstelle , Explosion_v1)
      132. Explsp(startspalte) = Explsp(startspalte) Or X 'ein Bild der Explosion wird in den Explosionsbildspeicher kopiert
      133. Incr Startspalte
      134. Incr Tabellenstelle
      135. Next Z
      136. If Bildnummer = 19 Then 'nach dem 5. Explosionsbild wird die Ziffer gelöscht
      137. Bildsp(position) = 0
      138. Bildsp(position + 1) = 0
      139. Bildsp(position + 2) = 0
      140. Bildsp(position + 3) = 0
      141. Bildsp(position + 4) = 0
      142. End If
      143. End If
      144. End Sub
      145. Sub Trenner
      146. Bildsp(19) = &B0100100000000
      147. Bildsp(20) = &B0100100000000
      148. End Sub
      149. Init_max7219: ' Initialisieren des MAX7219
      150. For Modul = 1 To Anzahl_module
      151. Display_digit = &H0C : Display_daten = &H00 ' Shutdown On
      152. Spiout Display_digit , 1
      153. Spiout Display_daten , 1
      154. Next Modul
      155. Cs = 0
      156. Cs = 1
      157. Waitms 50
      158. For Modul = 1 To Anzahl_module
      159. Display_digit = &H09 : Display_daten = &H00 ' kein decode "B" für alle Digits
      160. Spiout Display_digit , 1
      161. Spiout Display_daten , 1
      162. Next Modul
      163. Cs = 0
      164. Cs = 1
      165. Waitms 50
      166. For Modul = 1 To Anzahl_module
      167. Display_digit = &H0A : Display_daten = &H05 ' Helligkeit 0-F
      168. Spiout Display_digit , 1
      169. Spiout Display_daten , 1
      170. Next Modul
      171. Cs = 0
      172. Cs = 1
      173. Waitms 50
      174. For Modul = 1 To Anzahl_module
      175. Display_digit = &H0B : Display_daten = 7 ' Anzahl Digits 8
      176. Spiout Display_digit , 1
      177. Spiout Display_daten , 1
      178. Next Modul
      179. Cs = 0
      180. Cs = 1
      181. Waitms 50
      182. For Modul = 1 To Anzahl_module
      183. Display_digit = &H0F : Display_daten = 0 ' Test Off
      184. Spiout Display_digit , 1
      185. Spiout Display_daten , 1
      186. Next Modul
      187. Cs = 0
      188. Cs = 1
      189. Waitms 50
      190. For Modul = 1 To Anzahl_module
      191. Display_digit = &H0C : Display_daten = 1 ' Shutdown Off
      192. Spiout Display_digit , 1
      193. Spiout Display_daten , 1
      194. Next Modul
      195. Cs = 0
      196. Cs = 1
      197. Waitms 50
      198. Return
      199. Anzeige:
      200. For Zeile = 0 To 7
      201. Spalte = 0
      202. For Byte_ = 0 To 5
      203. For Bit_ = 7 To 0 Step -1
      204. Hilfsbit = Bildsp(spalte).zeile Or Explsp(spalte).zeile
      205. Display_daten.bit_ = Hilfsbit
      206. Incr Spalte
      207. Next Bit_
      208. Zeile_ = Zeile + 1
      209. Spiout Zeile_ , 1
      210. Spiout Display_daten , 1
      211. Next Byte_
      212. Spalte = 0
      213. Zeile_2 = Zeile + 8
      214. For Byte_ = 6 To 11
      215. For Bit_ = 7 To 0 Step -1
      216. Hilfsbit = Bildsp(spalte).zeile_2 Or Explsp(spalte).zeile_2
      217. Display_daten.bit_ = Hilfsbit
      218. Incr Spalte
      219. Next Bit_
      220. Zeile_ = Zeile + 1
      221. Spiout Zeile_ , 1
      222. Spiout Display_daten , 1
      223. Next Byte_
      224. Cs = 0
      225. Cs = 1
      226. Next Zeile
      227. Return
      228. Font:
      229. 'Ziffer 0
      230. Data &B0111110
      231. Data &B1000001
      232. Data &B1000001
      233. Data &B1000001
      234. Data &B0111110
      235. 'Ziffer 1
      236. Data &B0000000
      237. Data &B1000010
      238. Data &B1111111
      239. Data &B1000000
      240. Data &B0000000
      241. 'Ziffer 2
      242. Data &B1100010
      243. Data &B1010001
      244. Data &B1010001
      245. Data &B1001001
      246. Data &B1000110
      247. 'Ziffer 3
      248. Data &B0100010
      249. Data &B1000001
      250. Data &B1001001
      251. Data &B1001001
      252. Data &B0110110
      253. 'Ziffer 4
      254. Data &B0111000
      255. Data &B0100100
      256. Data &B0100010
      257. Data &B1111111
      258. Data &B0100000
      259. 'Ziffer 5
      260. Data &B0101111
      261. Data &B1001001
      262. Data &B1001001
      263. Data &B1001001
      264. Data &B0110001
      265. 'Ziffer 6
      266. Data &B0111110
      267. Data &B1001001
      268. Data &B1001001
      269. Data &B1001001
      270. Data &B0110010
      271. 'Ziffer 7
      272. Data &B0000001
      273. Data &B0000001
      274. Data &B1111001
      275. Data &B0000101
      276. Data &B0000011
      277. 'Ziffer 8
      278. Data &B0110110
      279. Data &B1001001
      280. Data &B1001001
      281. Data &B1001001
      282. Data &B0110110
      283. 'Ziffer 9
      284. Data &B0100110
      285. Data &B1001001
      286. Data &B1001001
      287. Data &B1001001
      288. Data &B0111110
      289. 'Leerzeichen zum Löschen von Ziffern
      290. Data 0
      291. Data 0
      292. Data 0
      293. Data 0
      294. Data 0
      295. $include Explosion.bas
      296. $include Staucher_1.bas
      Alles anzeigen


      Das include Explosion, sind nur data-Zeilen
      Explosion.bas
      Die subs, die für das Herabfallen der Ziffern zuständig sind
      staucher_1.bas
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------