Welcome to my personal webpage.     |   home
LCD code
LCD code
*PRELAB 4
* 3/17/02
*RYAN SWANSON & NIMA MOSHTAGH

     ORG     $0000
PORTC     EQU     $1003
PRICE     EQU     75
TEMP     RMB     1
ROWCT     RMB     1
PAID     RMB     1
BCD1     RMB     1
BCD2     RMB     1
BCD3     RMB     1

SPAID     FCC     'PAID: '         ;PLACE PAID
ASCII1    RMB    1
ASCII2    RMB    1
ASCII3    RMB    1            ; 3 ASCII characters
    FCB    #$04            ; end of string
WELMSG    FCC    'Personalize'        ; Welcome message
    FCB    #$04            ; end of string
DISP    FCC    'Dispensing'
    FCB    #$04
MOREMON    FCC    'Need more money'
    FCB    #$04

LCDINIT    EQU    $B603
LCDWRT    EQU    $B69F
LCDCLR    EQU    $B6CA
W100US    EQU    $B6EA
W5MS    EQU    $B6F7
W230MS    EQU    $B704
W4S    EQU    $B711

*************************** MAIN CODE ****************************
    ORG    $0100
    CLR     PAID
    CLR    ROWCT
    CLRA
    JSR    LCDINIT
    JSR    W4S
    LDX    #WELMSG        ; display welcome message
    JSR    LCDWRT
    JSR    W4S        ; wait 4 seconds
    JSR    LCDCLR        ; clear display

    LDX    #PORTC            
START    JSR    READKEY            ;READ IN THE KEYPAD
    STAA    ROWCT            ;ROWCT HOLDS THE NUMBER OF THE DEPRESSED KEY
    BNE    READ            ;IF A KEY IS PUSHED, THEN READ IT TO GET ITS VALUE
    JSR    W5MS            ;IF NO KEY IS PUSHED THEN WAIT A BIT
    BRA    START            ;AND READ THE KEYPAD AGAIN

READ    JSR    W230MS            ;WAIT TO GET RID OF SWITCH BOUNCES
    CLRA
    JSR    READKEY
    CMPA    ROWCT            ;REGISTER A CONTAINS THE NEW VALUE OF INPUT
    BEQ    READ            ;IF SAME DATA, THEN CHECK AGAIN TILL KEY IS RELEASED
    JSR    W5MS            ;KEY IS RELEASED HERE. WAIT FOR SWITCH BOUNCES
    CMPA    #$04
    BEQ    DRINK            ;IF DRINK HAS BEEN SELECTED, CHECK THE PAID MONEY
    JSR    ADDIT            ;ADD THE COINS TO THE TOTAL
    JSR     HEX2BCD            ;CONVERT THE HEX NUMBER TO BCD
    JSR    BCD2ASC            ;CONVERT THE BCD # TO ASCII
    LDX    SPAID            ;POINT TO THE ADDRESS OF PAID
    JSR    LCDWRT            ;DISPLAY THE PAID AMOUNT
    JSR    W4S
    JSR    LCDCLR
    BRA    START            ;AND WAIT FOR THE NEXT OPERATION
DRINK    JSR     CHOICE            ;SEE IF THERE IS EITHER ENOUGH OR EXTRA MONEY
    BRA    START            

************************** READKEY **************************

READKEY    EQU    *
    BRSET    0,X $10    ROW1        ;PC4= QUARTER
    BRSET    0,X $20    ROW2        ;PC5 = DIME
    BRSET    0,X $40    ROW3        ;PC6 = NICKEL
    BRSET    0,X $08    ROW4        ;PC3 =DRINK SELECTION
    BRA    NONE            ;IF NONE, THEN EXIT
ROW4    INCA
ROW3    INCA                ;IN THE END A WOULD BE 3
ROW2    INCA                ;IN THE END A WOULD BE 2
ROW1    INCA
NONE    RTS

*************************** ADDIT **************************

ADDIT    EQU    *
    LDAA    PAID
    BRSET    ROWCT $01 QUARTER    ;IF QUARTER IS DROPPED ADD 25
    BRSET    ROWCT $02 DIME        ;IF DIME IS DROPPED ADD 10
    BRSET    ROWCT $03 NICKEL    ;IF NICKEL IS DROPPED ADD 5    
NICKEL    ADDA    #$05            ;ADD 5 CENTS TO TOTAL
    BRA    DONE
DIME    ADDA    #$0A            ;ADD 10 CENTS TO TOTAL
    BRA    DONE
QUARTER    ADDA    #$19            ;ADD 25 CENTS TO TOTAL
DONE    STAA    PAID    
    RTS

**************************CHOICE*******************************

CHOICE    EQU    *
    LDAA    PAID
    CMPA    #PRICE            ;IF PAID MORE THAN PRICE
    BHS    DSPNS            ;THEN DISPENSE THE EXTRA MONEY
    JSR    DS_MORE            ;IF NOT ENOUGH MONEY IS DROPED, THEN ASK FOR MORE MONEY
    BRA    EXIT1            ;AND GO OUT TO GET MONEY
DSPNS    JSR    DISPENS            ;DISPENSE THE EXTRA MONEY
EXIT1    RTS

*************************hex2bcd*******************************

HEX2BCD    EQU    *
    CLRA
    LDAB    PAID    ;PUT PAID INTO D
    LDX    #$64    ;PUT 100 INTO X
    IDIV
    STAB    TEMP    ;PUT REMAINDER INTO TEMP
    XGDX        ;PUT NUMBER OF DOLLARS INTO D
    STAB    BCD1    ;STORE DOLLARS AT BCD1
    LDAB    TEMP    ;GET REMAINDER
    LDX    #$0A    ;LOAD 10 INTO X
    IDIV
    STAB    BCD3    ;PUT REMAINDER INTO TEMP
    XGDX        ;PUT NUMBER OF DOLLARS INTO D
    STAB    BCD2    ;STORE DIMES AT BCD1
    RTS

***************************BCD2ASCII***************************
BCD2ASC     EQU    *
    LDAA    BCD1
    ADDA    #$30
    STAA    ASCII1
    LDAA    BCD2
    ADDA    #$30
    STAA    ASCII2
    LDAA    BCD3
    ADDA    #$30
    STAA    ASCII3
    RTS    

*************************** DS_MORE ****************************

DS_MORE    EQU    *
    LDX    MOREMON            ; ASK FOR MORE MONEY
    JSR    LCDWRT            
    JSR    W4S
    JSR    LCDCLR    
    RTS
*************************** DISPENS ************************
DISPENS    EQU    *
    
    LDX    DISP
    JSR    LCDWRT            ;DISPLAY ''Dispensing
    JSR    W4S
    JSR    LCDCLR
    CLR     PAID
    CLR    ROWCT
    RTS


*****************************END***************************