Hi there

I'm at wit's end ...

I have been battling to get my matrix keypad(s) working, I have both a 4x3 and a 4x4 keypad.
Two nights ago I stunbled across some postings and code in the forums which looked like they may be what I am looking for (with a few changes perhaps).

After trying out both (namely the one from mister e and Steve) I still have not come right and can't understand what I am doing wrong.

Please see my other posts on mister e's keypad code pages here
http://www.picbasic.co.uk/forum/show...?t=3250&page=3
as well as Steve's on this post(hope cross posting is ok):

http://www.picbasic.co.uk/forum/show...0999#post80999.

With Steve's implemetation I get only a "||" character on the LCD.

Attached is my code.

I am almost convinced I am not setting the registers correctly or calling a variable correctly :-( I was quite happy working with a 16f628 but now that I've re-kindled PIC's as hobby again I decided to go with an 18F series and it's taking some getting used to.

If some kind soul would help me I would really appreciate it.
Comments and suggestion or tips and tricks would be more than welcomed too.

Kind regards

Dennis
Code:
'*************************************
'LCD code for 16 X 2  HD4x lcd
'*************************************

'Ocsillator selections here
OSCCON = $70            'Int CLK 8MHz
OSCTUNE.6 = 1           'PLL 4x
ADCON1= %00001111       '$0F = disable A/D converter
'END of oscillator selections


'Port IO directions and presets for port pins begin here
'TRISA = %11111111       'All pins are outputs
'TRISB = %00000000           
'for keypad
'// Define port pins as inputs and outputs ...
   TRISA  = %00001000
   TRISB  = %00001101
TRISC = %00000000
TRISD = %00000000
TRISE.0 = 0
TRISE.1 = 0
TRISE.2 = 0
'End of Port IO directions and presets for port pins begin here

'timer/oscillator defines 
DEFINE OSC 32            '4x 8MHz
'END of timer/oscillator defines
                      
'variables begin here
myvar var byte

'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

'keypad code here
 '// 3x3 Keypad - Rows as inputs, Cols as outputs...
   'Rows: RA3      Cols: RB1                     
   '      RB3            RA2                      
   '      RB2            RA4                      
   '      RB0                                     
   '//
   ' RB5: LED & Buzzer ...                            
   ' RA0: TX to PC's Serial Port                  
        
                    
   '// Declare Variables...
   Col_A     VAR PORTB.1
   Col_B     VAR PORTA.2
   Col_C     VAR PORTA.4
   
   Row_A     VAR PORTA.3
   Row_B     VAR PORTB.3
   Row_C     VAR PORTB.2
   Row_D     VAR PORTB.0
  
   Buzzer    VAR PORTB.5
   RX_To_PC  VAR PORTA.0
    
   Scan_Col  VAR BYTE       ' Counter - denoting current col in scan 
   Key_Press VAR BYTE       ' Contains value of key (0-9) & * + #
   Key_Down  VAR BYTE       ' Flag set true when key is depressed
   Allow_Key VAR BYTE       ' Flag - disallow multiple keys being pressed
   I         VAR byte       ' General working var
    
   Scan_Keypad:
   
   '// Scan cols 
      @ incf _Scan_Col, 1   ' Inc col pos...
    
      SELECT CASE Scan_Col  ' Col (1-3)
             
             CASE 1
                  Col_A = 0 ' Switch on col (active low)    
                  Col_B = 1 ' Col off    
                  Col_C = 1 ' Col off   
                           
                  '// 3 Key
                           IF Row_A = 0 THEN        ' Key down? ... 
                              IF Allow_Key = 0 THEN ' Any other key down?
                                 Key_Press = 3      ' Load var w/value of key           
                                 Allow_Key = 1      ' Disallow other keys
                              ENDIF   
                           ENDIF                          
                  '// 6 Key
                           IF Row_B = 0 THEN
                              IF Allow_Key = 0 THEN 
                                 Key_Press = 6                 
                                 Allow_Key = 1
                              ENDIF   
                           ENDIF
                  '// 9 Key
                           IF Row_C = 0 THEN
                              IF Allow_Key = 0 THEN 
                                 Key_Press = 9                 
                                 Allow_Key = 1
                              ENDIF   
                           ENDIF
                  '// # Key
                           IF Row_D = 0 THEN
                              IF Allow_Key = 0 THEN 
                                 Key_Press = 35                 
                                 Allow_Key = 1
                              ENDIF   
                           ENDIF
                  
             CASE 2
                  Col_A = 1    
                  Col_B = 0    
                  Col_C = 1    
                           
                  '// 2 Key
                           IF Row_A = 0 THEN
                              IF Allow_Key = 0 THEN 
                                 Key_Press = 2                 
                                 Allow_Key = 1
                              ENDIF   
                           ENDIF
                  '// 5 Key
                           IF Row_B = 0 THEN
                              IF Allow_Key = 0 THEN 
                                 Key_Press = 5                 
                                 Allow_Key = 1
                              ENDIF   
                           ENDIF
                  '// 8 Key 
                           IF Row_C = 0 THEN
                              IF Allow_Key = 0 THEN 
                                 Key_Press = 8                 
                                 Allow_Key = 1
                              ENDIF   
                           ENDIF
                  '// 0 Key
                           IF Row_D = 0 THEN
                              IF Allow_Key = 0 THEN 
                                 Key_Press = 0                 
                                 Allow_Key = 1
                              ENDIF   
                           ENDIF

             CASE 3
                  Col_A = 1     
                  Col_B = 1     
                  Col_C = 0

                  '// 1 Key
                           IF Row_A = 0 THEN
                              IF Allow_Key = 0 THEN 
                                 Key_Press = 1                 
                                 Allow_Key = 1
                              ENDIF   
                           ENDIF
                  '// 4 Key
                           IF Row_B = 0 THEN
                              IF Allow_Key = 0 THEN 
                                 Key_Press = 4                 
                                 Allow_Key = 1
                              ENDIF   
                           ENDIF
                   '// 7 Key
                          IF Row_C = 0 THEN
                              IF Allow_Key = 0 THEN 
                                 Key_Press = 7                 
                                 Allow_Key = 1
                              ENDIF   
                           ENDIF
                  '// * Key
                           IF Row_D = 0 THEN
                              IF Allow_Key = 0 THEN 
                                 Key_Press = 42                 
                                 Allow_Key = 1
                              ENDIF   
                           ENDIF
                       end select
'end keypad code

'*********************Includes******

'Includes end here




   Pause 500       ' Wait for LCD to startup

'loop1:   
 '  Lcdout $fe, 1   ' Clear LCD screen
  '  Lcdout "Hello"  ' Display Hello
   'Pause 1000       ' Wait .5 second
   'Lcdout $fe, $C0   ' Clear LCD screen
   'Lcdout "World"
   'pAUSE 1000
   'Lcdout $fe, 1   ' Clear LCD screen
   
   'Pause 1000       ' Wait .5 second

 'Goto loop1       ' Do it forever
 
'start:
'@ READKEYPAD _myvar
'lcdout $fe, 1
lcdout Key_Press
'goto start