
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
||
![]() ' =========================================================================== ' Demoprogramm: Labyrinth von H.J. WINDT konvertiert auf die Open-Maxi ' In OCBASIC 1.12a_e1 für Open-Maxi von Dietmar Harlos am 28. Mai 2022 ' =========================================================================== '***********************************************************************' '* WINDT SYSTEMS *' '* MAZE GAME v1.0 for CC1M2.01 with CC1AB2.0 *' '* H.J. WINDT *' '* 2004 *' '***********************************************************************' ' http://ccintern.dharlos.de/forum/lesen.php?eintrag=2885 '---------------------------------------------------------------------------- ' FINDE DEINEN WEG AUS DEM LABYRINTH! ' Drücke im Terminalprogramm TERMINAL32.EXE Tasten, um Dich zu bewegen. ' Taste 8 = Hoch ' Taste 4 = Links ' Taste 6 = Rechts ' Taste 2 = Unten ' HAVE FUN! '---------------------------------------------------------------------------- ' Die Ausgaben erscheinen auf dem I²C-Text-LCD der Open-Maxi. ' Verwendet wird das 4-zeilige "LCD 204B LED" von Reichelt. Dort gibt es auch ' das Datenblatt DS_4X20.pdf zum LCD. Es können maximal 8 Zeichen selbst ' definiert werden. ' In der Bedienungsanleitung zur Open-Macro und Open-Maxi ist beschrieben, ' wie das LCD mittels Portexpander PCF8574 mit dem I²C-Bus der Open-Maxi ' zu verbinden ist: ' http://om.dharlos.de/doku_omax/index.html ' Dieses Beispielprogramm setzt einen I2C-Portexpander PCF8574A voraus, mit ' dessen Hilfe das LCD angesprochen wird. Bei einem PCF8574 muß das "&h70" ' in ein "&h40" geändert werden. ' Leider gibt es nur eine sehr begrenzte Ansicht von 4x2 Zeichen. ' Mit folgender Eingabe kann man aus dem Labyrinth herausfinden: ' 22222262222668666888886668862224442222666666222444444444442266662 ' Das Programm zeigt dann an, daß 65 Schritte benötigt wurden. ' Das Originalprogramm in CCBASIC belegte 1655 Byte Programmspeicher. Diese ' in OCBASIC geschriebene Variante dagegen nur 978 Bytes. ' --- Definitionen für das System ------------------------------------------- INCLUDE "omax.def" 'Definitionen für die Open-Maxi ' --- Definitionen des Anwenders -------------------------------------------- DIM area_build_data BYTE DIM bottom_wall BIT[1] OF area_build_data DIM right_wall BIT[2] OF area_build_data DIM top_wall BIT[3] OF area_build_data DIM left_wall BIT[4] OF area_build_data DIM adr BYTE DIM dat BYTE DIM player_position BYTE DIM last_player_position BYTE DIM in_key BYTE DIM steps WORD ' --- Hauptprogramm --------------------------------------------------------- ' Setup: End2Host=ON POKE i2clcdadr,&h70 'Für PCF8574A mit Adreßpins A2:A1:A0 gleich 0:0:0 'POKE i2clcdadr,&h40 'Für PCF8574 mit Adreßpins A2:A1:A0 gleich 0:0:0 ' I²C-LCD ansprechen und initialisieren: PAUSE 2 'Vorgeschriebene Verzögerung für das LCD LcdLight=ON 'Die Hintergrundbeleuchtung könnte invertiert sein LCDINIT 'Setzt LcdErr auf OFF bei ACK vom PCF8574, IF LcdErr THEN ' sonst auf ON PRINT "NoAck vom I2C-LCD" END END IF LCDCLS 'Löscht den Bildschirm 'LCDCMD &b00001111 '"Display on", "Cursor on" & "Blinking on" LCDLOCATE 0,0 'Position im 4*20-LCD GOSUB initialize_lcd BEEP 4,2,4 BEEP 4,2,4 player_position = 0 ' Program: WHILE TRUE LOOKTABBYTE maze, player_position, area_build_data GOSUB print_maze_on_display IF player_position = 246 THEN GOTO is_out GOSUB get_player_direction WEND #is_out PAUSE 50 LCDCLS 'Löscht den Bildschirm LCDPRINT" YOU ARE OUT!!!"; LCDLOCATE 1,1 LCDPRINT"IN "; LCDPRINT steps; LCDPRINT" STEPS"; BEEP 1,10,4:BEEP 2,9,4:BEEP 3,8,4:BEEP 4,7,4:BEEP 5,6,4:BEEP 6,5,4:BEEP 7,4,4:BEEP 8,3,4:BEEP 9,2,4:BEEP 10,1,4 END ' --- Subroutines ----------------------------------------------------------- PROCEDURE get_player_direction GET in_key 'Tastendruck aus dem Terminalprogramm TERMINAL32.EXE IF top_wall = 0 THEN IF in_key=ASC("8") THEN SUB player_position,16 IF left_wall = 0 THEN IF in_key=ASC("4") THEN SUB player_position,1 IF right_wall = 0 THEN IF in_key=ASC("6") THEN ADD player_position,1 IF bottom_wall = 0 THEN IF in_key=ASC("2") THEN ADD player_position,16 IF last_player_position <> player_position THEN BEEP 4,2,4 IF last_player_position <> player_position THEN ADD steps,1 last_player_position = player_position RETURN END PROCEDURE PROCEDURE print_maze_on_display LCDLOCATE 0,0 IF left_wall THEN LCDPUT &h0b ELSE LCDPUT &h0e IF top_wall THEN LCDPUT &h0a ELSE LCDPUT &h0f IF top_wall THEN LCDPUT &h0a ELSE LCDPUT &h0e IF right_wall THEN LCDPUT &h09 ELSE LCDPUT &h0f LCDPRINT" Steps Taken:" LCDLOCATE 1,0 IF left_wall THEN LCDPUT &h0b ELSE LCDPUT &h0c IF bottom_wall THEN LCDPUT &h08 ELSE LCDPUT &h0d IF bottom_wall THEN LCDPUT &h08 ELSE LCDPUT &h0c IF right_wall THEN LCDPUT &h09 ELSE LCDPUT &h0d LCDPRINT " "; LCDPRINT steps; RETURN END PROCEDURE PROCEDURE initialize_lcd LCDCMD &b01000000 '"Set CG-RAM address" FOR adr = 0 TO 63 LOOKTABBYTE characterbuild, adr, dat LCDPUT dat NEXT RETURN END PROCEDURE ' --- Data ------------------------------------------------------------------ TABLE characterbuild BYTE &b00000000 &b00000000 &b00000000 &b00000000 &b00000000 &b00000000 &b00011111 &b00011111 &b00011000 &b00011000 &b00011000 &b00011000 &b00011000 &b00011000 &b00011000 &b00011000 &b00011111 &b00011111 &b00000000 &b00000000 &b00000000 &b00000000 &b00000000 &b00000000 &b00000011 &b00000011 &b00000011 &b00000011 &b00000011 &b00000011 &b00000011 &b00000011 &b00000000 &b00000000 &b00000000 &b00000000 &b00000000 &b00000000 &b00000011 &b00000011 &b00000000 &b00000000 &b00000000 &b00000000 &b00000000 &b00000000 &b00011000 &b00011000 &b00000011 &b00000011 &b00000000 &b00000000 &b00000000 &b00000000 &b00000000 &b00000000 &b00011000 &b00011000 &b00000000 &b00000000 &b00000000 &b00000000 &b00000000 &b00000000 TABEND TABLE maze BYTE 12 5 5 4 5 5 6 12 5 5 5 5 5 5 5 6 10 13 6 10 12 5 3 10 13 5 5 5 4 5 5 3 10 14 10 10 10 12 5 0 5 4 4 5 0 4 4 6 8 1 3 10 10 10 13 3 15 10 8 7 10 9 3 10 10 13 5 3 10 10 12 5 5 3 8 6 8 5 5 2 10 14 12 5 3 10 10 12 5 5 3 10 10 13 6 10 9 0 1 5 5 3 10 10 12 6 15 10 9 6 10 11 14 10 12 4 5 6 10 10 10 8 5 3 12 3 10 14 10 10 10 10 13 3 10 10 9 1 5 5 1 7 10 10 10 10 11 8 5 5 3 9 5 5 5 5 5 6 10 10 8 1 5 2 12 4 5 5 7 13 4 5 5 2 8 2 10 12 7 11 11 10 13 5 5 5 1 5 7 10 10 10 10 8 4 5 5 1 5 5 4 5 5 5 5 0 3 10 10 10 8 5 5 5 5 5 2 14 12 5 5 1 7 11 10 10 9 5 5 5 4 7 10 9 1 5 5 5 5 6 11 9 5 5 5 7 0 13 1 5 5 5 5 5 5 3 TABEND ' --- Programmende ---------------------------------------------------------- Passender Link: Infosite zu den OM-Mikrocontrollern Meine Homepage: http://ccintern.dharlos.de |
| Antwort schreiben |