This program interfaces a 4x4 matrix keypad with the 8051 and displays pressed keys on an LCD.

Description

The program scans a 4x4 keypad connected to Port 1 and displays the pressed key on an LCD connected to Port 2 and control pins on Port 3.

Hardware Connections

  • Port 1: Keypad rows (P1.0-P1.3) and columns (P1.4-P1.7)
  • Port 2: LCD data lines (D0-D7)
  • Port 3: LCD control signals (RS, R/W, E)

Code

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
ORG 0000H
	SJMP START
	ORG 0030H
		START:
		MOV P0,#0FFH
		ACALL LCD_INIT
		
		K1: MOV P1,#0
			MOV A,P0
			ANL A,#00001111B
			CJNE A, #00001111B, K1
		K2:
			ACALL DELAY
			MOV A,P0
			ANL A,#00001111B, OVER
			SJMP K2
		OVER:
			ACALL DELAY
			MOV A,P0
			ANL A,#00001111B
			CJNE A,#00001111B, OVER1
			SJMP K2
		OVER1:
			MOV P1,#11111110B
			MOV A,P0
			ANL A,#00001111B
			CJNE A,#00001111B, ROW_0
			MOV P1,#11111101B
			MOV A,P0
			ANL A,#0001111B
			CJNE A,#00001111B, ROW_1
			MOV P1,#11111011B
			MOV A,P0
			ANL P,#00001111B
			CJNE A,#00001111B,ROW_2
			MOV P1,#11110111B
			MOV A,P0
			ANL A,#00001111B
			CJNE A , #00001111B, ROW_3
			LJMP K2
		ROW_0:
			MOV DPTR,#KCODE0
			SJMP FIND
		ROW_1:
			MOV DPTR,#KCODE1
			SJMP FIND
		ROW_2:
			MOV DPTR,#KCODE2
			SJMP FIND
		ROW_3:
			MOV DPTR,#KCODE3
		
		FIND:
		RRC A
		JNC MATCH
		INC DPTR
		SJMP FIND
		
		MATCH:CLR A
		MOVC A,@A+DPTR
		ACALL LCD_DATA
		SJMP K1
		DELAY: MOV R4,#40
		REPEAT:MOV R5,#230
		REPEATT:DJNZ R5,REPEATT
		DJNZ R4,REPEAT
		RET
		
	ORG 300H
		KCODE3: DB 'C' ,'D','E','F'
		KCODE2: DB '8' ,'9','A','B'
		KCODE1: DB '4' ,'5','6','7'
		KCODE0: DB '0' ,'1','2','3'
	END
		
		LCD_INIT:
		MOV A,#38H
		ACALL LCD_COMMAND
		MOV A,#0EH
		ACALL LCD_COMMAND
		MOV A,#01H
		ACALL LCD_COMMAND
		MOV A,#06H
		ACALL LCD_COMMAND
		MOV A,#80H
		ACALL LCD_COMMAND
		RET
		
		LCD_COMMAND: MOV P2,A
		CLR P3.7
		CLR P3.6
		SETB P3.5
		ACALL DELAY
		CLR P3.5
		RET
		
		LCD_DATA: MOV P2,A
		SETB P3.7
		CLR P3.6
		SETB P3.5
		ACALL DELAY
		CLR P3.5
		RET

Explanation

Keypad Layout

  C0  C1  C2  C3
R0 0   1   2   3
R1 4   5   6   7
R2 8   9   A   B
R3 C   D   E   F

Algorithm

  1. Initialization: Initialize LCD for display
  2. Wait for key press: Check if any column is low
  3. Debouncing: Add delay to avoid false readings
  4. Row scanning: Ground each row one by one
  5. Column detection: Check which column is low
  6. Key identification: Use lookup table to find pressed key
  7. Display: Show the key character on LCD

The program uses a scanning technique where rows are grounded sequentially, and columns are read to identify the pressed key.