►Programming 8051 Microcontroller

►8051 Assembly Program for 4x4 Keypad Matrix

keyport equ P2			;Keypad port connected here
col1 equ P2.0			;Column 1
col2 equ P2.1			;Column 2
col3 equ P2.2			;Column 3
col4 equ P2.3			;Column 4

keyval equ 30H			;To store key number
pressed bit 0H			;Flag

key_init:
	mov keyport,#0FH	;Make rows as o/p and col as i/p
	ret

get_key:
	mov keyval,#0		;reset the number
	mov keyport,#7FH	;make Row1 low
	acall read_col		;read columns

	jb pressed, done	;check if flag is set

	mov keyval,#4		;if not then read next row
	mov keyport,#0BFH	;make Row2 low
	acall read_col		;read columns

	jb pressed, done	;check if flag is set

	mov keyval,#8		;if not then read next row
	mov keyport,#0DFH	;make row3 low
	acall read_col		;read columns

	jb pressed, done	;check if flag is set

	mov keyval,#12		;if not read row4
	mov keyport,#0EFH	;make row4 low
	acall read_col		;read columns

done:
	ret

read_col:			;read columns routine
	clr pressed		;reset the flag

	jb col1, nextcol	;check if first key is pressed
	jnb col1,$		;if yes then wait for key release	
	setb pressed		;set the flag
	ret

nextcol:			;read col2
	jb col2, nextcol1	;check if second key is pressed
	jnb col2,$		;if yes then wait for key release
	inc keyval		;its key number 2
	setb pressed		;set the flag
	ret

nextcol1:			;read col3
	jb col3, nextcol2	;check if third key is pressed
	jnb col3,$		;if yes then wait for key release
	inc keyval		;its key 3
	inc keyval
	setb pressed		;set the flag
	ret

nextcol2:			;read column 4
	jb col4, exit		;check if fourth key pressed
	jnb col4,$		;if yes then wait for key release
	inc keyval		;its key 4
	inc keyval
	inc keyval
	setb pressed		;set the flag
	ret

exit:				;if no key is pressed
	clr pressed		;clr the flag
	clr keyval		;reset the number
	ret

	end




►C Program for 4x4 Keypad Matrix

#include <AT89X51.H>
	//Include file for 8051
#define keyport P2	//keypad connected to P2
#define col1 P2_0	//column 1
#define col2 P2_1	//column 2
#define col3 P2_2	//column 3
#define col4 P2_3	//column 4
#define TRUE 1		//some defines
#define FALSE 0

/*
+---------------------------------------+
| Prototype: void key_init(void);       |
| Return Type: void                     |
| Arguments: None                       |
| Description: Initialize ports and     |
|              Keypad.                  |
+---------------------------------------+
*/
void key_init(){
	keyport &=0x0F;	//make Rows as o/p and cols are i/p
}

/*
+-----------------------------------------------+
| Prototype: unsigned char get_key(void);       |
| Return Type: unsigned char                    |
| Arguments: None                               |
| Description: To read key from the keypad      |
+-----------------------------------------------+
*/
unsigned char get_key(){
	unsigned char i,k,key=0;
	k=1;
	for(i=0;i<4;i++){		//loop for 4 rows
		keyport &=~(0x80>
>
i);	//to make rows low 1 by 1
			if(!col1){	//check if key1 is pressed
				key = k+0;	//set key number
				while(!col1);	//wait for release
				return key;	//return key number
			}
			if(!col2){	//check if key2 is pressed
				key = k+1;	//set key number
				while(!col2);	//wait for release
				return key;	//return key number
			}
			if(!col3){	//check if key3 is pressed
				key = k+2;	//set key number
				while(!col3);	//wait for release
				return key;	//return key number
			}
			if(!col4){	//check if key4 is pressed
				key = k+3;	//set key number
				while(!col4);	//wait for release
				return key;	//return key number
			}
		k+=4;			//next row key number
		keyport |= 0x80>
>
i;	//make the row high again
	}
	return FALSE;			//return false if no key pressed
}



Example of how to use the above functions is given here.


◄ AVR Program  |  Back to Index ►

Conversation

shshistiem
Wed Sep 12 2018, 10:58 PM
hii!! some1 please let me know how i ll get rfid code to 8051 by WEIGAND mode
DrNossberg
Tue Sep 11 2018, 08:09 PM
is there anyone here?
Mon Aug 27 2018, 07:30 AM
bun
Hello everyone´╝ü
Sat Jul 21 2018, 06:21 AM
Dibakar Bhanja Chowdhury
By using a 555 timer how can I expand the range of the mobile phone jammer? Please reply me asap
Sun May 20 2018, 10:01 AM
justinb
how to write and execute a program that read the keypad button and display the number on 7 segment on intel8051 at89s52 in assembly language?
Thu May 17 2018, 06:36 AM
HAMZA TAJ
sir iwant to ask about controller of three phase supply by using back to back thyristor instead of triac....will u give me some guideline?
Sat Apr 28 2018, 12:54 PM
ashutosh jain
IR Remote Switch using TV remote (RC5 Protocol) is not working properly. opp1 & opp2 is in problem.plz help
ExperimenterUK
Fri Apr 27 2018, 08:09 PM
@kaiserslautern Post in forum
Wed Apr 25 2018, 07:09 AM
kaiserslautern
Hello everyone, using software uart is a very good idea for a second serial port. Thank you so much. I would kindly like to know how to connect this port to the PC?
ExperimenterUK
Sat Apr 21 2018, 07:50 PM
This is a community site. Feel free to help anyone needing advice

Downloads

Comments

PCBindex
Fri Sep 14 2018, 02:45 AM
sirkit
Thu Sep 13 2018, 04:46 AM
shshistiem
Wed Sep 12 2018, 10:36 PM
DrNossberg
Tue Sep 11 2018, 03:25 PM
ranjanvh
Thu Sep 06 2018, 02:28 PM
rbbhamre
Tue Sep 04 2018, 06:15 PM
Tressie
Sun Sep 02 2018, 02:20 PM
Sudhansudeep
Fri Aug 31 2018, 08:26 AM

Online

Guests: 54, Members: 0 ...

most ever online: 182184
(Members: , Guests: 182184) on 06 Aug 2010: 05:37 AM

Members: 38006
Newest member: PCBindex
Forum Activity
ExperimenterUK Avatar
Posted By ExperimenterUK
Thu Sep 13 2018, 08:39 PM
First of all, by reading your reply, I abandoned m...
DrNossberg Avatar
Posted By DrNossberg
Thu Sep 13 2018, 03:49 PM
Hi, thanks you for your reply ^^ First of all, by ...
ExperimenterUK Avatar
Posted By ExperimenterUK
Wed Sep 12 2018, 12:12 AM
HiThere are several issues here.The original 8051 ...
DrNossberg Avatar
Posted By DrNossberg
Tue Sep 11 2018, 08:08 PM
Hello everybody!First of all let me explain some s...
ExperimenterUK Avatar
Posted By ExperimenterUK
Fri Sep 07 2018, 05:08 AM
The compiler thinks the micro doesn't have enough...
Sudhansudeep Avatar
Posted By Sudhansudeep
Fri Sep 07 2018, 02:59 AM
this is the build output message
Sudhansudeep Avatar
Posted By Sudhansudeep
Fri Sep 07 2018, 01:38 AM
Change the mobile number as [number removed] in t...
ExperimenterUK Avatar
Posted By ExperimenterUK
Thu Sep 06 2018, 08:56 PM
I don't know what the problem is, I get no errors....
Sudhansudeep Avatar
Posted By Sudhansudeep
Thu Sep 06 2018, 01:12 PM
the code is Attachment ...
Sudhansudeep Avatar
Posted By Sudhansudeep
Thu Sep 06 2018, 12:48 PM
the code is same as u sent me for 16 chars