quiz:lcd:mka

# 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: 2013-06-06 21:27 (Externe Bearbeitung)