Please update your Flash Player to view content.

                  FOLLOW  US





 
 
Matrix Keypad Interfacing
Code Library - 8051 Assembly
Written by Amol Shah   
     

For Circuit and more theory of Interfacing Matrix Keypad to Microcontroller click here

The subroutine check_keypad can be used to directly interface any 4X3 matrix keypad. It checks if any switch on the matrix keypad is pressed. If any of the switch is pressed then the switch is debounced and we wait until the switch has been released. Once the switch has been released the switch number is loaded into the accumulator and the carry flag is set to indicate that a switch has been pressed. If NO switch has been pressed then the accumulator is cleared and the carry flag is also cleared to indicate no switch has been pressed.

 

column1         bit     P1.0
column2         bit     P1.1
column3         bit     P1.2
row1        bit     P1.3
row2        bit     P1.4
row3        bit     P1.5
     
row4        bit     P1.6

check_keypad:

clr column1

setb column2 ;Select Column 1
setb column3

jnb row1,c1_check_keypad

jnb row2,c2_check_keypad

jnb row3,c3_check_keypad

jnb row4,c4_check_keypad

setb column1   
clr column2 ;Select Column 2
setb column3   

jnb row1,c5_check_keypad

jnb row2,c6_check_keypad

jnb row3,c7_check_keypad

jnb row4,c8_check_keypad

setb column1
setb column2   ;Select Column 3
clr column3 
jnb row1,c9_check_keypad

jnb row2,c10_check_keypad

jnb row3,c11_check_keypad

jnb row4,c12_check_keypad

setb column1                                    

setb column2                    

setb column3                    

mov a,#00h        ;Since no switch has been pressed so Acc=00h
clr c         ;and C=0
ret
c1_check_keypad: //column 1, row 1
mov r7,#00h 
 

deb1_check_keypad: 

;debounce row 1 switch
jb row1,r1_check_keypad          

djnz r7,deb1_check_keypad

jnb row1,$ ;wait till switch is released
mov a,#1 ;since switch pressed is 1, Acc =1
setb c ;Indicating switch has been pressed
setb column1
ret

r1_check_keypad:

setb column1 ;Error while debouncing so return
mov a,#0

clr c

ret

c2_check_keypad: //column 1, row2
mov r7,#00h      
deb2_check_keypad:  ;debounce row 2 switch

jb row2,r2_check_keypad          

djnz r7,deb2_check_keypad   

jnb row2,$  ;wait till switch is released
mov a,#4   ;since switch pressed is 4, Acc =4
setb c      ;Indicating switch has been pressed
setb column1
ret

r2_check_keypad:

setb column1

;Error while debouncing so return

mov a,#0

clr c

ret

c3_check_keypad:  //column 1, row3
mov r7,#00h   

 

deb3_check_keypad:   ;debounce row 3 switch

 jb row3,r3_check_keypad          

djnz r7,deb3_check_keypad  

jnb row3,$                                                     ;wait till switch is released

         mov a,#7                                                      ;since switch pressed is 7, Acc =7

         setb c                                                            ;Indicating switch has been pressed

         setb column1

         ret

  

r3_check_keypad:

setb column1                                             ;Error while debouncing so return

mov a,#0

clr c

ret

  
c4_check_keypad:                                             //column 1, row4

mov r7,#00h  

                                                                    

deb4_check_keypad:                                       ;debounce row 4 switch

jb row4,r4_check_keypad                 

djnz r7,deb4_check_keypad                                      

 
jnb row4,$                                                ;wait till switch is released

mov a,#10                                               ;since switch pressed is 10, Acc =10

setb c                                                       ;Indicating switch has been pressed

setb column1

ret

  

r4_check_keypad:

setb column1                                       ;Error while debouncing so return

mov a,#0

clr c

ret

   
c5_check_keypad:                                            //column 2, row 1

mov r7,#00h                

                                                      

deb5_check_keypad:                                        ;debounce row 1 switch

jb row1,r5_check_keypad          

djnz r7,deb5_check_keypad                                      

 
jnb row1,$                                                 ;wait till switch is released

mov a,#2                                                  ;since switch pressed is 2, Acc =2

setb c                                                        ;Indicating switch has been pressed

setb column2 

 ret

 

r5_check_keypad:

setb column2                                          ;Error while debouncing so return

mov a,#0

clr c

ret

   
c6_check_keypad:                                          //column 2, row2

mov r7,#00h    

                                                                  

deb6_check_keypad:                                    ;debounce row 2 switch

jb row2,r6_check_keypad          

djnz r7,deb6_check_keypad                                      

 
jnb row2,$                                            ;wait till switch is released

mov a,#5                                             ;since switch pressed is 5, Acc =5

setb c                                                   ;Indicating switch has been pressed

setb column2

ret

 

r6_check_keypad:

setb column2                                   ;Error while debouncing so return

mov a,#0

 clr c

 ret

   
c7_check_keypad:                                   //column 2, row3

mov r7,#00h                                                                      

 

deb7_check_keypad:                              ;debounce row 3 switch

jb row3,r7_check_keypad          

djnz r7,deb7_check_keypad                                      

 
jnb row3,$                                          ;wait till switch is released

mov a,#8                                           ;since switch pressed is 8, Acc =8

setb c                                                 ;Indicating switch has been pressed

setb column2

ret

 

r7_check_keypad:

setb column2                                    ;Error while debouncing so return

mov a,#0

clr c

ret              

  
c8_check_keypad:                                     //column 2, row4

mov r7,#00h                                                                      

 

deb8_check_keypad:                                ;debounce row 4 switch

jb row4,r8_check_keypad          

djnz r7,deb4_check_keypad                                      

 
jnb row4,$                                          ;wait till switch is released

mov a,#11                                         ;since switch pressed is 11, Acc =11

setb c                                                 ;Indicating switch has been pressed

setb column2

ret

 

r8_check_keypad:

setb column2                                    ;Error while debouncing so return

mov a,#0

clr c

ret

  
c9_check_keypad:                                    //column 3, row 1

mov r7,#00h                                                                      

 

deb9_check_keypad:                              ;debounce row 1 switch

jb row1,r9_check_keypad          

djnz r7,deb9_check_keypad                                      

 
jnb row1,$                                         ;wait till switch is released

mov a,#3                                           ;since switch pressed is 3, Acc =3

setb c                                                 ;Indicating switch has been pressed

setb column3

ret

 

r9_check_keypad:

setb column3                                    ;Error while debouncing so return

mov a,#0

clr c

ret

   
c10_check_keypad:                                   //column 3, row2

mov r7,#00h                                                                      

 

deb10_check_keypad:                             ;debounce row 2 switch

jb row2,r10_check_keypad        

djnz r7,deb10_check_keypad                                   

 
jnb row2,$                                          ;wait till switch is released

mov a,#6                                           ;since switch pressed is 6, Acc =6

setb c                                                 ;Indicating switch has been pressed

setb column3

ret

 

r10_check_keypad:

setb column3                                    ;Error while debouncing so return

mov a,#0

clr c

ret

   
c11_check_keypad:                                   //column 3, row3

mov r7,#00h                                                                      

 

deb11_check_keypad:                              ;debounce row 3 switch

jb row3,r11_check_keypad        

djnz r7,deb11_check_keypad                                   

 
jnb row3,$                                          ;wait till switch is released

mov a,#9                                           ;since switch pressed is 9, Acc =9

setb c                                                 ;Indicating switch has been pressed

setb column3

ret

 

r11_check_keypad:

setb column3                                    ;Error while debouncing so return

mov a,#0

clr c

ret

                 
c12_check_keypad:                                 //column 3, row4

mov r7,#00h                                                                      

 

deb12_check_keypad:                           ;debounce row 4 switch

jb row4,r12_check_keypad        

djnz r7,deb12_check_keypad                                   

 
jnb row4,$                                          ;wait till switch is released

mov a,#12                                         ;since switch pressed is 12, Acc =12

setb c                                                 ;Indicating switch has been pressed

setb column3

ret

 

r12_check_keypad:

setb column3                                    ;Error while debouncing so return

mov a,#0

clr c

ret

.

 

Add comment


Security code
Refresh

 

Featured Products

Rs250.00

 

Random Products

Rs1.00



Rs170.00



Rs12.00



Rs40.00



Rs12.00



Latest Video

Random Articles

Search Products

User Login






 
 
.
 TUTORIALS
.
  8051 Tutorial
 
  Power Supply
 
CODE LIBRARY
.

  8051 Assembly
 
  C Code Library

.
 PROJECTS
.
  Project List
 
  Synopsis and Abstract
 
DOWNLOADS
.

  Datasheets
 
  Download

.
 POPULAR
.
  About Us
 
  DNA Shop
 
  Totorial
 
  Code Library
 
  Download
 

.
 CONTACT US
.

Mr. Amol Shah

DNA Technology Nashik,

Maharashtra 422009 India

Phone : 0253-3023939

Mobile : 09225145135

Email : contact@dnatechindia.com