How to interface keypad with PIC16F84A

This post provides a simple method to interface any keypad (e-g 4×4 or 4×3 etc) with PIC16F84A microcontroller. This code is written in C language using MPLAB with HI-TECH C compiler. You can download this code from the ‘Downloads‘ section at the bottom of this page.

How to interface keypad with PIC16F84A

In this post, it is assumed that you know, how to interface LCD with PIC16F84A microcontroller by only using 3 pins. If you don’t then please read this page.
The circuit required to interface keypad with PIC16F84A[1] is shown below.

The result of simulating the code in Proteus is shown above in the figure. This code is written in such a way that when you press any key from the keypad, then the value of that key is displayed on the LCD. For example, in the above figure LCD screen is displaying ‘5’, because this picture was taken after pressing ‘5’ from the keypad.

In the above circuit, RA0, RA1 and RA2 pins are used to interface LCD through 4094 IC as explained in the “PIC16F84A LCD interfacing code (using 3 pins only) + Proteus simulation” post. LCD is used here just to show the pressed key value. 8 pins of PORTB are used to interface 4×4 keypad. 4 pins are used to attach columns and 4 pins are used to attach rows and scanning algorithm code is used to check for any pressed key.


The main function code is shown below.

In the main function, keypad is initialized using InitKeypad() function. Then LCD is initialized using InitLCD() function. After that, in the while(1) loop, GetKey() function is used to read any pressed key value. GetKey() function is a blocking function, i-e code hangs in it until the user presses any key. After a key is pressed from the keypad, then LCD screen is cleared using ClearLCDScreen() function and the value of pressed key is displayed on the LCD screen using WriteDataToLCD() function and then again code starts to wait in the GetKey() function for the user to press another key.

How to interface keypad with PIC16F84A schematic

The code used to initialize keypad is shown below.


Keypad interfacing code using PIC16F84A was compiled in MPLAB v8.85 with HI-TECH C v9.83 compiler and simulation was made in Proteus v7.10. To download code and Proteus simulation click here.


For more detail: How to interface keypad with PIC16F84A

About The Author

Ibrar Ayyub

I am an experienced technical writer with a Master's degree in computer science from BZU Multan University. I have written for various industries, mainly home automation, and engineering. I have a clear and simple writing style and am skilled in using infographics and diagrams. I am a great researcher and is able to present information in a well-organized and logical manner.

Follow Us: