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***************************
|
||