Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
09/14/06 04:48
Read: times


 
#124265 - Matrix Keyboard not working
Hello All,

I am facing the probs when I interface 4 * 4 Matrix Keyboard with 8051 and
the corresponding key pressed is to be shown on LCD wiht 8 bit data bus.

LCD is not a probs as I am using 8 bit data bus.

The Probs is in the Logic of Matrix Keyboard.

Below is the code I am using, can anyone give me some guidelines where I am doing the mistakes.

regards
Arvind Shrivastava

$MOD51
; **********************************************************************

;***LCD program to display the keypressed in 4 * 4 Matrix Keyboard attached to PORT 1	***
;***PORT 2 is used to connect to the LCD databus and PORT 3 pins P3.5, P3.6, P3.7 		***
;***is connected to control lines EN, RS and RW	  					***

; **********************************************************************


lcd_rs	bit	p3.5
lcd_rw	bit	p3.6
lcd_en	bit	p3.7

col1	bit	p1.0
col2	bit	p1.1
col3	bit	p1.2
col4	bit	p1.3

row1	bit	p1.4
row2	bit	p1.5
row3	bit	p1.6
row4	bit	p1.7



ORG	000H
ljmp	START


;=================================================================; 
; BUSY FLAG STATUS CHECKING
;================================================================= 
BUSY_STATUS:
      clr  lcd_en
      mov  p2, #0ffh
      clr  lcd_rs
      setb lcd_rw

BUSY:
     clr  lcd_en
     setb lcd_en
     jb	  p2.7, BUSY
     clr  lcd_en
     ret

;===============================================================
;		60 MS DELAY SUBROUTINE
;===============================================================

DELAY:
      mov   r0, #30
SUB:	
      acall DELAY_MS
      djnz  r0, SUB
      ret

DELAY_MS:
      mov   r1, #250
LOOP:	
      nop
      nop
      djnz  r1, LOOP
      ret

;===============================================================
;		WRITE DATA TO LCD
;===============================================================
WRITE_DATA:
      acall   BUSY_STATUS
      mov     p2, a
      setb    lcd_rs
      clr     lcd_rw
      setb    lcd_en
      clr     lcd_en
      ret


;===============================================================
;				WRITE COMMAND TO LCD
;===============================================================
WRITE_COMMAND:
     acall   BUSY_STATUS
     mov     p2, a
     clr     lcd_rs
     clr     lcd_rw
     setb    lcd_en
     clr    lcd_en
     ret

;=====================================================
; INITIALIZING WITH LCD ROUTINES
;=====================================================
INIT_LCD:
     mov     a, #038h
     acall   WRITE_COMMAND
     acall   DELAY

     acall   WRITE_COMMAND
     acall   DELAY

     acall   WRITE_COMMAND
     acall   DELAY

     acall   WRITE_COMMAND
     acall   DELAY

     mov     a, #0eh
     acall   WRITE_COMMAND

     mov     a, #06h
     acall   WRITE_COMMAND

     mov     a, #080h
     acall   WRITE_COMMAND

     ret

;===============================================================
;	MAIN PROGRAM BEGINS FROM HERE
;===============================================================

START:
     mov    p1, #0ffh
     mov    p2, #0ffh
     mov    p3, #0ffh

     acall  INIT_LCD

REPEAT:
     acall   SCAN_MATRIX_KEYBOARD
     mov     a, #01h
     acall   WRITE_COMMAND
     ;mov    a, r6
     pop     acc
     acall   WRITE_DATA

DEBOUNCE:
     mov      p1, #0ffh
     mov      a, p1
     cjne     a, #0ffh, DEBOUNCE
     sjmp    REPEAT

SCAN_MATRIX_KEYBOARD:
     acall   DELAY
     mov     a, p1
     push    acc
     anl     a, #0fh
     cjne    a, #0fh, AHEAD
     sjmp    SCAN_MATRIX_KEYBOARD

AHEAD:
     pop     acc
     anl     a, #0f0h
     cjne    a, #0f0h, PROCESS_SCAN
     sjmp    SCAN_MATRIX_KEYBOARD

PROCESS_SCAN:
      mov    a, p1
      cpl    a
      jz     SCAN_MATRIX_KEYBOARD
      cpl    a
      push   acc
      anl    a, #0fh
      cjne   a, #0fh, ROW_SCAN_1
      sjmp   SCAN_MATRIX_KEYBOARD

ROW_SCAN_1:
      pop   acc
      anl   a, #0f0h
      cjne  a, #0e0h, ROW_SCAN_2
      sjmp  ROW_1

ROW_SCAN_2:
     cjne   a, #0d0h, ROW_SCAN_3
     sjmp   ROW_2

ROW_SCAN_3:
     cjne   a, #0b0h, ROW_SCAN_4
     sjmp   ROW_3

ROW_SCAN_4:
     cjne   a, #70h, SCAN_MATRIX_KEYBOARD
     sjmp   ROW_4

ROW_1:
     mov    dptr, #CODE1
     sjmp   FINAL

ROW_2:
     mov    dptr, #CODE2
     sjmp   FINAL

ROW_3:
     mov    dptr, #CODE3
     sjmp   FINAL

ROW_4:
     mov    dptr, #CODE4

FINAL:
     mov     a, p1
     clr     c

SUB_FINAL:
     rrc     a
     jnc     MATCH
     inc     dptr
     sjmp    SUB_FINAL

MATCH:
     clr     a
     movc    a,@a+dptr
     ;mov    r6, a
     push    acc
     ret


CODE1: db '1','2','3','4'
CODE2: db '5','6','7','8'
CODE3: db '9','10','11','12'
CODE4: db '13','14','15','16'





;*************************************************************************
END




List of 27 messages in thread
TopicAuthorDate
Matrix Keyboard not working            01/01/70 00:00      
   the logic            01/01/70 00:00      
   Lots of problems            01/01/70 00:00      
      no, it's completely bad in concept            01/01/70 00:00      
      Does the LCD Work?            01/01/70 00:00      
      enphasizing            01/01/70 00:00      
   commented code            01/01/70 00:00      
      Persistance my friend            01/01/70 00:00      
         I'll try it in other way            01/01/70 00:00      
            I'll make the corrections            01/01/70 00:00      
      Note on comments            01/01/70 00:00      
         bad, very bad - yes, but not necessarily because            01/01/70 00:00      
            Subroutine Details            01/01/70 00:00      
               I don't know            01/01/70 00:00      
                I do not know what that information is good for.            01/01/70 00:00      
                  Column scan after ROW confirmation            01/01/70 00:00      
                     Maybe the problem is not here            01/01/70 00:00      
      more Informative code            01/01/70 00:00      
         Comments are better            01/01/70 00:00      
         The Algorithm            01/01/70 00:00      
            This isn\'t necessarily true ...            01/01/70 00:00      
               a correct pain in the gluteus maximus            01/01/70 00:00      
                  Why so much pain?            01/01/70 00:00      
               An exercise for the student            01/01/70 00:00      
               everyone else            01/01/70 00:00      
   Does the LCD Work?            01/01/70 00:00      
      LCD is fine            01/01/70 00:00      

Back to Subject List