Hi all

In a part of the project I am busy building I would like to type in a few numbers using a 4x4 matrix keypad ..for example the number 123

The keypad portion works well so far (I am using the example from mister_e in the code examples area of the forums)

What I am battling with is how to get the digits that are typed in to display on the LCD and then send them only after a # or * is keyed in.
This operation is very similar to the way a calculator or code entry system acts.

So let's say for example I type in the number 123#
If a mistake is made the * key could backspace or clear the display with a prompt to try again (I haven't yet worked out whether to use and array or a select case statement or a bunch of if then statements)
I would like all digits typed in to be displayed on the LCD (just like a calculator/phone/code entry system)
I store the 3 digits in an array datatx[3]
Then I add the three digits datatx[0]+datatx[1]+datatx[2]
(This should give me a single binary number right ?)
once I have that number I would like to send it to the PC using HSEROUT
Here's the code I have so far,
Code:
'*************************************
'Keypress display on LCD and TX to wherever
'*************************************

'Ocsillator selections here
        OSCCON = $70            'Int CLK 8MHz
        OSCTUNE.6 = 1           'PLL 4x
        ADCON1= %00001111       '$0F = disable A/D converter
        cmcon   =   7 
        INTCON2.7 = 0     'switch pull-ups ON
'END of oscillator selections
  'timer/oscillator defines 
        DEFINE OSC 32            '4x 8MHz
'END of timer/oscillator defines

'Port IO directions and presets for port pins begin here
'TRISX = %76543210   << tris bit order numbering
'TRISA = %11111111       'All pins are outputs
'// Define port pins as inputs and outputs ...
        TRISA  = %00000000 'example only - TRISB = %00001111 ;Make B4-B7 outputs, B0-B3 inputs, 
        TRISB = %11111111  'for 4x4 keypad all input
        TRISC = %10010000
        TRISD = %00000000
        TRISE.0 = 0
        TRISE.1 = 0
        TRISE.2 = 0
'End of Port IO directions and presets for port pins begin here

                   
'variables begin here
        A0 var byte
        myvar var byte
        datatx var byte [3]
        datarx var byte
        counter var byte
        'net var byte
'end of variables

'LCD defines begin here   
        DEFINE LCD_BITS 4 	'defines the number of data interface lines (4 or 8) 
        DEFINE LCD_DREG PORTD 	'defines the port where data lines are connected to
        DEFINE LCD_DBIT 4 	'defines the position of data lines for 4-bit interface (0 or 4)
        DEFINE LCD_RSREG PORTD 	'defines the port where RS line is connected to
        DEFINE LCD_RSBIT 2 	'defines the pin where RS line is connected to 
        DEFINE LCD_EREG PORTD 	'defines the port where E line is connected to 
        DEFINE LCD_EBIT 3 	'defines the pin where E line is connected 
        'DEFINE LCD_RWREG 0 	'defines the port where R/W line is connected to (set to 0 if not used)
        'DEFINE LCD_RWBIT 0 	'defines the pin where R/W line is connected to (set to 0 if not used)
        DEFINE LCD_COMMANDUS 2000 	'defines the delay after LCDOUT statement 
        DEFINE LCD_DATAUS 200 		'delay in micro seconds
'END of LCD DEFINES

'includes begin here
        INCLUDE "modedefs.bas"
        include "c:\pbp\samples\keypad.bas"
'end of includes

DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 20h ' Enable transmit, BRGH = 0
DEFINE HSER_SPBRG 207 ' 2400 Baud @ 32MHz, 0.17%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically

'Keypad code begins here
        DEFINE KEYPAD_ROW        4        ' 4 ROW keypad       
        DEFINE KEYPAD_ROW_PORT   PORTB    ' ROW port = PORTB
        DEFINE KEYPAD_ROW_BIT    0        ' ROW0 = PORTB.4
        DEFINE KEYPAD_COL        4        ' 4 COL keypad
        DEFINE KEYPAD_COL_PORT   PORTB    ' COL port = PORTB
        DEFINE KEYPAD_COL_BIT    4        ' COL0 = PORTB.0
        DEFINE KEYPAD_DEBOUNCEMS 200      ' debounce delay = 200 mSec
        DEFINE KEYPAD_AUTOREPEAT 1        ' use auto-repeat feature
'end keypad code

 
    
        'keypad capture code begins here
        
    
           Pause 2000       ' Wait for LCD to startup
    start:   'mister_e's keypad code
       lcdout "1=send 2=program 3=
       for counter = 0 to 3
        @ READKEYPAD _myvar  'read keypress variable 
        LOOKUP myvar,[0,"123A456B789C*0#D"],myvar 'use lookup table to diplay proper keypress
        datatx = myvar 'pass the variable to solve strange character problem
        lcdout "begin is ", dec datatx(0),dec datatx(1),dec datatx(2),dec datatx(3) 'display the variable on the LCD
            if datatx = "#" then goto TX
            'if datatx = "*" then goto clearkeys
        pause 1000
        Lcdout $fe,1
       next counter
       if counter = 3 then goto clearkeys 
       
        goto start
  
  TX:
    hserout ["i got this string of numbers",$0d,$0a]
    HSEROUT ["1st digit ", dec datatx(0),$0d,$0a]
    HSEROUT ["2nd digit ", dec datatx(1), $0d,$0a]
    HSEROUT ["3rd digit ", dec datatx(2), $0d,$0a]
     
    goto start
  
  clearkeys:
   datatx = 0
   goto start 
    end
At this stage:
The LCD shows the 3 digits but only the first one ever changes
Hserout sends the data to the PC but the values are always the same.

I would really appreciate it if someone could help point out where I am going wrong

Kind regards
Dennis