;**************************************************************** ;number keyboard scan ;**************************************************************** ldi YH, high(buffer) ;buffer address to Z-ptr ldi YL, low(buffer) SCANn: rcall KBSCN1 ;call keyboard scan routine mov temp0, butnum ;store butnum in temp0 cpi butnum,16 ;compare butnum to 16 breq SCANn ;if equal, try again ;second scan, ensure same button is still pressed, SCANn2: rcall KBSCN1 ;call keyboard scan routine cp temp0, butnum ;compare temp to butnum brne SCANn ;if not equal, debounce fail but_dn: rcall KBSCN1 ;call keyboard scan routine cp temp0,butnum ;compare temp to butnum breq but_dn ;if equal, goto but_dn mov butnum, temp0 ;move temp0 to butnum cpi butnum,13 ;key 13? brne del1 ;no, goto del1 rjmp BEGIN ;yes, goto BEGIN, clears LCD and Y pointer del1: cpi butnum, 14 ;key 14? brne del2 ;no, goto del2 ldi butnum, '.' ;yes, load decimal point into buffer, inc Y st Y+,butnum inc nchar ;inc nchar mov wreg,butnum ;send character to number LCD rcall LCDput rjmp SCANn ;goto SCANn del2: cpi butnum, 15 ;key 15? brne del3 ;no, goto del3 ldi butnum, '-' ;yes, load minus sign into buffer, inc Y st Y+,butnum inc nchar ;inc nchar mov wreg,butnum ;send character to number LCD rcall LCDput rjmp SCANn ;goto SCANn del3: cpi butnum,12 ;key 12? brne del5 ;no, goto del5 rcall ENTER ;yes, call ENTER push numblo ;push number on stack push numbhi inc entflag ;inc entflag mov temp,entflag cpi temp,2 ;entflag = 2? brne BEGIN ;no, goto BEGIN rcall lcdclr ;yes, clear LCD, entflag, and goto SCANf clr entflag rjmp SCANf del5: cpi butnum, 0 ;key 0? brne del6 ;no, goto del6 ldi butnum, 1 ;yes, store 1 in buffer, inc Y st Y+, butnum inc nchar ;inc nchar ldi temp, azero ;send character to number LCD add butnum, temp mov wreg, butnum rcall LCDput rjmp SCANn ;goto SCANn del6: cpi butnum, 4 ;key 4? brne del7 ;no, goto del7 ldi butnum, 2 ;yes, store 2 in buffer, inc Y st Y+, butnum inc nchar ;inc nchar ldi temp, azero ;send character to number LCD add butnum, temp mov wreg, butnum rcall LCDput rjmp SCANn ;goto SCANn del7: cpi butnum, 8 ;key 8? brne del8 ;no, goto del8 ldi butnum, 3 ;yes, store 3 in buffer, inc Y st Y+, butnum inc nchar ;inc nchar ldi temp, azero ;send character to number LCD add butnum, temp mov wreg, butnum rcall LCDput rjmp SCANn ;goto SCANn del8: cpi butnum, 1 ;key 1? brne del9 ;no, goto del9 ldi butnum, 4 ;yes, store 4 in buffer, inc Y st Y+, butnum inc nchar ;inc nchar ldi temp, azero ;send character to number LCD add butnum, temp mov wreg, butnum rcall LCDput rjmp SCANn ;goto SCANn del9: cpi butnum, 5 ;key 5? brne del10 ;no, goto del10 st Y+, butnum ;yes, store 5 in buffer, inc Y inc nchar ;inc nchar ldi temp, azero ;send character to number LCD add butnum, temp mov wreg, butnum rcall LCDput rjmp SCANn ;goto SCANn del10: cpi butnum, 9 ;key 9? brne del11 ;no, goto del11 ldi butnum, 6 ;yes, store 6 in buffer, inc Y st Y+, butnum inc nchar ;inc nchar ldi temp, azero ;send character to number LCD add butnum, temp mov wreg, butnum rcall LCDput rjmp SCANn ;goto SCANn del11: cpi butnum, 2 ;key 2? brne del12 ;no, goto del12 ldi butnum, 7 ;yes, store 7 in buffer, inc Y st Y+, butnum inc nchar ;inc nchar ldi temp, azero ;send character to number LCD add butnum, temp mov wreg, butnum rcall LCDput rjmp SCANn ;goto SCANn del12: cpi butnum, 6 ;key 6? brne del13 ;no, goto del13 ldi butnum, 8 ;yes, store 8 in buffer, inc Y st Y+, butnum inc nchar ;inc nchar ldi temp, azero ;send character to number LCD add butnum, temp mov wreg, butnum rcall LCDput rjmp SCANn ;goto SCANn del13: cpi butnum, 10 ;key 10? brne del14 ;no, goto del14 ldi butnum, 9 ;yes, store 9 in buffer, inc Y st Y+, butnum inc nchar ;inc nchar ldi temp, azero ;send character to number LCD add butnum, temp mov wreg, butnum rcall LCDput rjmp SCANn ;goto SCANn del14: cpi butnum, 7 ;key 7? brne del15 ;no, goto del15 ldi butnum, 0 ;yes, store 0 in buffer, inc Y st Y+, butnum inc nchar ;inc nchar ldi temp, azero ;send character to number LCD add butnum, temp mov wreg, butnum rcall LCDput del15: rjmp SCANn ;goto SCANn