4×4 Keypad Interfacing with 8051 Microcontroller – Tutorial with C Programming

4X4 KEYPAD INTERFACING WITH 8051 MICROCONTROLLER

INTRODUCTION:-

  • We know that Keypads are very common amongst the widely used technology present in today’s generation.
  • They are very important as they are used to interface with various electronic devices employed in security purpose.
  • Examples of keyboard interfacing devices:-
  1. Calculators
  2. Telephones
  3. Automatic teller machine.
  • So basically there will be 16 pin input connection as a total of 16 switches will be interfaced with the Liquid Crystal display via the 8051 microcontroller device.

SOURCE CODE:

#include<reg51.h>

#define display_port P2   //Data pins connected to port 2 on microcontroller

sbit rs = P3^2;  //RS pin connected to pin 2 of port 3

sbit rw = P3^3;  // RW pin connected to pin 3 of port 3

sbit e =  P3^4; //E pin connected to pin 4 of port 3

sbit C4 = P1^0; // Connecting keypad to Port 1

sbit C3 = P1^1;

sbit C2 = P1^2;

sbit C1 = P1^3;

sbit R4 = P1^4;

sbit R3 = P1^5;

sbit R2 = P1^6;

sbit R1 = P1^7;

sbit DB0 = P2^0;

sbit DB1 = P2^1;

sbit DB2 = P2^2;

sbit DB3 = P2^3;

sbit DB4 = P2^4;

sbit DB5 = P2^5;

sbit DB6 = P2^6;

sbit DB7 = P2^7;

void msdelay(unsigned int time)  // Function for creating delay in milliseconds.

{

unsigned i,j ;

for(i=0;i<time;i++)

for(j=0;j<1275;j++);

}

void lcd_cmd(unsigned char command)  //Function to send command instruction to LCD

{

display_port = command;

rs= 0;

rw=0;

e=1;

msdelay(1);

e=0;

}

void lcd_data(unsigned char disp_data)  //Function to send display data to LCD

{

display_port = disp_data;

rs= 1;

rw=0;

e=1;

msdelay(1);

e=0;

}

void lcd_init() //Function to prepare the LCD  and get it ready

{

lcd_cmd(0x38);  // for using 2 lines and 5X7 matrix of LCD

msdelay(10);

lcd_cmd(0x0F);  // turn display ON, cursor blinking

msdelay(10);

lcd_cmd(0x01);  //clear screen

msdelay(10);

lcd_cmd(0x81);  // bring cursor to position 1 of line 1

msdelay(10);

}

void row_finder1() //Function for finding the row for column 1

{

R1=R2=R3=R4=1;

C1=C2=C3=C4=0;

if(R1==0)

lcd_data(‘1’);

if(R2==0)

lcd_data(‘4’);

if(R3==0)

lcd_data(‘7’);

if(R4==0)

lcd_data(‘*’);

}

void row_finder2() //Function for finding the row for column 2

{

R1=R2=R3=R4=1;

C1=C2=C3=C4=0;

if(R1==0)

lcd_data(‘2’);

if(R2==0)

lcd_data(‘5’);

if(R3==0)

lcd_data(‘8’);

if(R4==0)

lcd_data(‘0’);

}

void row_finder3() //Function for finding the row for column 3

{

R1=R2=R3=R4=1;

C1=C2=C3=C4=0;

if(R1==0)

lcd_data(‘3’);

if(R2==0)

lcd_data(‘6’);

if(R3==0)

lcd_data(‘9’);

if(R4==0)

lcd_data(‘#’);

}

void row_finder4() //Function for finding the row for column 4

{

R1=R2=R3=R4=1;

C1=C2=C3=C4=0;

if(R1==0)

lcd_data(‘A’);

if(R2==0)

lcd_data(‘B’);

if(R3==0)

lcd_data(‘C’);

if(R4==0)

lcd_data(‘D’);

}

void main()

{

lcd_init();

while(1)

{

    msdelay(30);

    C1=C2=C3=C4=1;

      R1=R2=R3=R4=0;

      if(C1==0)

      row_finder1();

      else if(C2==0)

       row_finder2();

       else if(C3==0)

    row_finder3();

    else if(C4==0)

    row_finder4();

}

}

KEYPAD CONNECTION DIAGRAM:

 

KEYPAD LOGIC:

  • Initially all switches are assumed to be released.
  • When any of the switch is pressed the corresponding row and column are short circuited.

STEP 1:

  • Write all logic 0’s to all the rows whereas logic 1’s to all the columns.

NOTE:

BLACK –>Logic 0

Red      –> Logic 1

STEP 2:

  • The job of the software is to scan the pins connected to that position. If a key is pressed logic 0 is driven to C2 due to short circuiting with the logic 1 of the corresponding row( R2) to the pressed keypad switch.

STEP 3:

  • As soon as the key has been pressed in column C2, the software’s job is to write the logic 1’s to each row sequentially until C2 becomes high.
  • The value written to that row will be reflected in that column as short circuit  will happen at that junction.

STEP 4:

  • The logic in C2 remains high until high logic from a row meets the pressed button in C2.
  • Therefore the pressed key was detected at position (2,2) of the matrix keypad.
  • After successful detection of the pressed key it’s our job to assign some corresponding value which may be either a numeral or an ASCiI character.

8051 FEATURES AND SPECIFICATIONS:

  • 10 kilo ohm resistor and 10 microfarad will provide the necessary Power on reset (POR) for the 8051 mc.
  • Secondly the 12 MHz crystal oscillator provides the necessary clock signal to the microcontroller.

CONNECTIONS:

  • According to the connections I have given, the keypad connections were given to Port 1 of the 8051 microcontroller.
  • Secondly the three pins namely Register select, REad/Write and Enable pins  are given to the pins P3.2, P3.3 , P3.4 respectively.
  • Finally last but not the least the data pins namely DB0-DB7 of the Liquid Crystal Display(LCD) are connected to the port P2 (P2.0-P2.7).
  • The port 0 has no internal pull up resistors so it has to be pulled by external 10 kilo ohm resistor.

Video

Click here to see a short video of Cursor Blinking.

Click here to see a short of Displaying Numeral 1 Through LCD:

Leave a comment

We are the best Embedded Training Institutes in Bangalore with 100% job placement record. Our top most priority is to put more and more focus on practical aspects of the Training. We believe if the student is good with practical knowledge he can crack any interview he/she wants. We also promote the meritorious students and those who are in need but can't afford the expensive training in the other institutes are also welcomed at Professional Institute.

It is needless to say that there are many institute which provides Embedded Training in Bangalore but most of them focus on the quantity of the course but we focus majorly on the quality of the education. The reason is very simple, those institute have profit as their main motive but we are mostly concerned with the future of the students. That's why we charge very minimal fees from students.

PTInstitute © 2017 All rights reserved.