Matrix Keypad Interfacing
Written by Amol Shah, on Aug-2008
Views 7409    

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 this page to your favorite Social Bookmarking websites
Reddit! Del.icio.us! JoomlaVote! Google! Live! Facebook! StumbleUpon! Yahoo! Free social bookmarking plugins and extensions for Joomla! websites!
Quote this article in website Favoured Print Send to friend Related articles Save this to del.icio.us

Users' Comments (0) RSS feed comment

No comment posted

Add your comment



mXcomment 1.0.5 © 2007-2010 - visualclinic.fr
License Creative Commons - Some rights reserved
 
< Prev   Next >
Home arrow Code Library arrow Matrix Keypad Interfacing