Keypad is a common interface with any microcontroller. This presentation gives details of keypad can be interfaced with 8051. The key pressed may be dispalyed on LCD/7 segment/LED displays.
Size: 916.03 KB
Language: en
Added: Oct 08, 2020
Slides: 16 pages
Slide Content
Keypad Interfacing
with 8051
Sudhanshu Janwadkar
S. V. National Institute of Technology
Lecture Notes: 9-10
th
April 2018
Points to discuss
•Whatisamatrixkeypad?
•Schematicof4X4MatrixKeypad
•PrincipleofOperation–i.eHowdoweinterface?
Introduction
•Keyboards are organized in a matrix of rows and columns
•The CPU accesses both rows and columns through ports
•When a key is pressed, a row and a column make a contact
•Otherwise, there is no connection between rows and
columns
Schematic of a 4 X 4 Keypad
•Thereareatotalof16switchesarrangedin4rowsand4
columns
•Eachrowandcolumnhasaswitch,inbetween,strategically
placedsuchthat
Eachswitchhasthecapability,ifpressed,toshortthe
particularrowandcolumn(andformapath)
•Theotherpathswouldremainopen
Schematic of a 4 X 4 Keypad
•Eachswitchcanactuallygenerateauniquesituationofrowsand
columns.
•Forexample,saySW1ispressed.Thiswouldformapathbetween
Row1andColumn1.Nootherrowandcolumnwouldhaveapath.
Summarizing,
•Starting with the Column 1, the microcontroller grounds
it by providing a low to Column C0 only
It reads all the rows.
If the data read is all 1s, no key in that row is
activated and the process is moved to the next
column
•It grounds the next column, reads all the rows and
checks for any zero
•This process continues until the column in which key is
pressed is identified
After identification of the column in which the key
has been pressed, Find out which row the pressed
key belongs to
Principle of operation
ORG 00H
MOV DPTR, #LUT // The 7-segment codes of switch press detected are stored in Code memory
MOV P0, #00000000B // initializes P0 as output port; 7-segment is connected to Port 0
;------------CONNECTIONS------------------
;P1.0 = Col 0, P1.1 = Col 1, P1.2 = Col 2, P1.3 = Col 3,
;P1.4 = Row 0, P1.5 =Row 1 P1.6 = Row 2, P1.7 = Row 3,
BACK:
CLR P1.0 // makes Column 0 low,; col1, col2 and col3 = 1
JB P1.4,NEXT1 // checks whether Row 0 is low and jumps to NEXT1 if not low
MOV A,#1D // Row0 =0 when Col 0 =0,indicates that SW1 has been pressed. Display 1
ACALL DISPLAY // calls DISPLAY subroutine
NEXT1:JB P1.5,NEXT2 // checks whether Row 1 is low. Row 1 =0 indicates SW2 has been pressed.
MOV A,#2D // Display 2
ACALL DISPLAY
NEXT2:JB P1.6,NEXT3// Check whether Row2 is low
MOV A,#3D //Display 3
ACALL DISPLAY
NEXT3:JB P1.7,NEXT4//Check if Row 3 is low
MOV A,#10 D //Display A
ACALL DISPLAY
; This completed one set of Row checking
With Col0 =0. Next make Col0 =1 and col1=0,
Col2 =1 and col3=1, as earlier
1 4 7 D
2 5 8 E
3 6 9 F
A B C 0
P1.0 P1.1 P1.2 P1.3
P1.4
P1.5
P1.6
P1.7
Each keypad would have same internal connections, But the numbers displayed on top
might vary. This code will work only for the keypad display shown
; column information = 1110, read rows
NEXT12:SETB P1.2
CLR P1.3
JB P1.4,NEXT13
MOV A,#13D
ACALL DISPLAY
NEXT13:JB P1.5,NEXT14
MOV A,#14D
ACALL DISPLAY
NEXT14:JB P1.6,NEXT15
MOV A,#15D
ACALL DISPLAY
NEXT15:JB P1.7,BACK
MOV A,#0D
ACALL DISPLAY
LJMP BACK
;DPTR points to first location of LUT. Accumulator contains the offset value to be added. Fetch the
byte containing the Seven segment code from LUT (in Code memory) and display
DISPLAY:
MOVC A,@A+DPTR //
MOV P0,A // puts corresponding digit drive pattern into P0
RET
LUT:
// Look up table starts here
DB 11111100B //0… abcdefgh
DB 01100000B //1
DB 11011010B //2
DB 11110010B //3
DB 01100110B //4
DB 10110110B
DB 10111110B
DB 11100000B
DB 11111110B
DB 11110110B
DB 11101110B
DB 00111110B
DB 10011110B
DB 01111010B
DB 10011110B
DB 10011110B //F
END