Übersetzungen dieser Seite:

Meine Lösung zur Aufgabe: LCD Numbers

Dieser code ist nur eine Übung und löst die Quiz-Frage zumindest teilweise. Keine Garantien. Lief ok mit gForth im Terminal des Mac OSX. Viel Vergnügen. Michael

\ LCD Numbers
 
\ Simulates an LCD display with 4 digits on terminal, no-scale.
 
[IFDEF] mycode mycode [ENDIF] marker mycode   \ Forget mycode and try again
 
vocabulary test   test definitions  decimal
 
 
\ As there is no way to find out cursor position at terminal,
\ I have to keep track of the displayed digits.
 
variable pos-x
variable pos-y
 
: pos! ( x y -- )
  pos-y !  pos-x !  ;
 
: pos@ ( -- x y )
  pos-x @ pos-y @ ;
 
: pos+ ( -- ) \ set position to next line in same row
  1 pos-y +!  pos@ at-xy ;
 
: .bl ( -- )
  pos+ ."     "
  pos+ ."     "
  pos+ ."     " ;
 
: .0 ( -- )
  pos+ ."  _  "
  pos+ ." | | "
  pos+ ." |_| " ;
 
: .1 ( -- )
  pos+ ."     "
  pos+ ."   | "
  pos+ ."   | " ;
 
: .2 ( -- )
  pos+ ."  _  "
  pos+ ."  _| "
  pos+ ." |_  " ;
 
: .3 ( -- )
  pos+ ."  _  "
  pos+ ."  _| "
  pos+ ."  _| " ;
 
: .4 ( -- )
  pos+ ."     "
  pos+ ." |_| "
  pos+ ."   | " ;
 
: .5 ( -- )
  pos+ ."  _  "
  pos+ ." |_  "
  pos+ ."  _| " ;
 
: .6 ( -- )
  pos+ ."  _  "
  pos+ ." |_  "
  pos+ ." |_| " ;
 
: .7 ( -- )
  pos+ ."  _  "
  pos+ ."   | "
  pos+ ."   | " ;
 
: .8 ( -- )
  pos+ ."  _  "
  pos+ ." |_| "
  pos+ ." |_| " ;
 
: .9 ( -- )
  pos+ ."  _  "
  pos+ ." |_| "
  pos+ ."   | " ;
 
 
\ "LCD" Display with 4 digits
 
: pos0 ( -- ) \ 0. position in display
  12 0 pos! ;
: pos1 ( -- ) \ 1. position in display
   8 0 pos! ;
: pos2 ( -- ) \ 2. position in display
   4 0 pos! ;
: pos3 ( -- ) \ 3. position in display
   0 0 pos! ;
 
: display-digit ( i -- )  \ i is a digit
  CASE 
  0 OF .0 ENDOF 
  1 OF .1 ENDOF 
  2 OF .2 ENDOF 
  3 OF .3 ENDOF 
  4 OF .4 ENDOF 
  5 OF .5 ENDOF 
  6 OF .6 ENDOF 
  7 OF .7 ENDOF 
  8 OF .8 ENDOF 
  9 OF .9 ENDOF 
       .bl
  ENDCASE ; 
 
: display ( i3 i2 i1 i0 -- ) \ display 4 digits
  pos0 display-digit
  pos1 display-digit
  pos2 display-digit
  pos3 display-digit ;
 
: n>i ( n - i3 i2 i1 i0 ) \ convert number to 4 digits, drop upper digits.
  >r
  r@ 1000 / 10 mod
  r@  100 / 10 mod
  r@   10 / 10 mod
  r@        10 mod
  r> drop ;
 
: .lcd  ( n -- ) \ display number to "LCD"
  page 0 0 pos! 
  n>i display
  cr cr ;
quiz/lcd/mka.txt · Zuletzt geändert: 2010/12/29 18:12 (Externe Bearbeitung)
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: CC Attribution-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki