Calculator 9S12DP256 Lab 2
\ Convert counted string at addr1 to double number ud2 \ ud1 normally zero to begin with \ addr2 points to first invalid character : >NUMBER ( ud1 addr1 -- ud2 addr2 ) \Calculator (add) LOAD lcd256.whp LOAD keypad12.whp VARIABLE ptr VARIABLE first VARIABLE kbuf 20 ALLOT : init( -- ) kbuf ptr ! SPI.INIT init.key lcd.init TRUE first ! ; kbufptr
\ Convert counted string at addr1 to double number ud2 \ ud1 normally zero to begin with \ addr2 points to first invalid character : >NUMBER ( ud1 addr1 -- ud2 addr2 ) kbuf ptr : display( n -- ) if first digit IF init\ clear display FALSE first ! THEN hex2asc DUP >data8\ display digit 1 ptr +! \ update ptr C! ; Enter decimal number 123
\ Convert counted string at addr1 to double number ud2 \ ud1 normally zero to begin with \ addr2 points to first invalid character : >NUMBER ( ud1 addr1 -- ud2 addr2 ) kbuf ptr : enter( n -- d ) DROP kbuf - \ get no. of chars kbuf C!\ make counted string 1 ptr +! 0 C!\ make asciiz string 0 0 kbuf \ convert ascii string >NUMBER DROP\ to double number TRUE first ! ; Press E 3 0
: add( d1 n -- d2 ) clear.lcd enter D+ 2DUP (D.) type.lcd ; : calc( -- ) init BEGIN wait.for.keyup getkey DUP 14 =\ E key IF enter ELSE DUP 10 =\ A key IF add ELSE DUP 12 =\ C key IF init ELSE display THEN AGAIN ;