quiz:lcd:bernd_paysan
7-Segment-Emulation
Der Ansatz ist eine 7-Segment-Emulation. Das Array 7seg wandelt Ziffern in 7-Segment-Codes, und lines gibt an, welches Bit wo schaltet.
\ 5
\ 7 2
\ 4
\ 6 1
\ 30
Create 7seg $EE c, $06 c, $7C c, $3E c, $96 c,
$BA c, $FA c, $26 c, $FE c, $BE c,
Create lines 0 c, $20 c, 0 c,
$80 c, 0 c, 4 c,
0 c, $10 c, 0 c,
$40 c, 0 c, 2 c,
0 c, 8 c, 1 c,
2 value size
: >size ( line -- size ) 1 and IF size ELSE 1 THEN ;
: set? ( digit i -- digit i flag ) 2dup lines + c@ and ;
: .seg| ( digit i -- digit i' )
set? IF '| ELSE bl THEN emit 1+ ;
: .seg- ( digit i -- digit i' )
set? IF '- ELSE bl THEN emit 1+ ;
: 7seg-line ( dig line -- )
7seg + c@ swap 3 * .seg| size 0 ?DO .seg- 1- LOOP 1+ .seg| space 2drop ;
: .lcd-line ( addr u -- addr u )
cr >r 2dup r> -rot bounds ?DO
dup I c@ '0 - 7seg-line
LOOP ;
: .lcd-lines ( addr u line -- addr u )
dup >size
0 ?DO .lcd-line LOOP drop ;
: .lcd-string ( addr u -- )
5 0 DO I .lcd-lines LOOP 2drop ;
: .lcd ( x -- )
0 <# #s #> .lcdstring ;
quiz/lcd/bernd_paysan.txt · Zuletzt geändert: 2013-06-06 21:27 von 127.0.0.1