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 holding a Master's degree in computer science from BZU Multan, Pakistan University. With a background spanning various industries, particularly in home automation and engineering, I have honed my skills in crafting clear and concise content. Proficient in leveraging infographics and diagrams, I strive to simplify complex concepts for readers. My strength lies in thorough research and presenting information in a structured and logical format.

Follow Us:

Leave a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.