Sunday, October 10, 2021

AT89C52 Matrix Keypad Interfacing in C using Keil

Keypad is commonly found in medium digital electronics control system – such as door lock, electronics calculator, etc.

AT89C52 Matrix Keypad Interfacing in C using Keil

Keys are arranged in matrix like 3×4 or 4×4 array. It need a microcontroller program to scan and get the present of key pressing. A single 8-bit microcontroller port is suitable for keypad scanning.

An 8-bit AT89C52 MCS-51 microcontroller is easily interface to this key matrix. Using C in Keil uVision makes this keypad scanning program more easily. Lower (row) and higher (column) nibble of microcontroller port are combine together to scan and find any key pressing.

Lower nibble (row) P2.0 to P2.3 in digital output while the remaining is digital input.

The schematic shown below is a system that contain a keypad matrix and its output, representing any key-press. Output is a single 7-Segments display in common cathode type.

Key number of this scanning program is 16, ranging from 0 to 15. An optional seven-segments display code decodes this key number to displaying data.

With the advantage of C in Keil for 8051 microcontroller, the overall program is easy to understand and short.

#include<reg52.h>
#define KEY_PORT P2
#define LED P1
sbit row0=P2^4;
sbit row1=P2^5;
sbit row2=P2^6;
sbit row3=P2^7;
unsigned char getKey();
unsigned char keypad[4][4]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
unsigned char output[4]={0xFE,0xFD,0xFB,0xF7};
unsigned row,col,key_value;
bit found=0;
void main(){
//common cathode
unsigned char SSD[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,
0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
KEY_PORT=0xF0;
LED=0x00;
while(1) {
LED=SSD[getKey()];
}
}
unsigned char getKey(){
static unsigned char i=0;
for (i=0;i<4;i++){
KEY_PORT=output[i];
if((KEY_PORT&0xF0)!=0xF0)
{ col=i;
found=1;
break;
}
}
if(row0==0) row=0;
else if (row1==0) row=1;
else if (row2==0) row=2;
else if (row3==0) row=3;
if(found==1)
return key_value=keypad[row][col];
found=0;
}


Click here to download this example program.

No comments:

Post a Comment

Search This Blog

Labels

25AA010A (1) 8051 (7) 93AA46B (1) ADC (30) Analog Comparator (1) Arduino (15) ARM (6) AT89C52 (7) ATMega32 (54) AVR (57) CCS PICC (28) DAC (1) DHT11 (2) Display (105) Distance Sensor (3) DS18B20 (3) dsPIC (2) dsPIC30F1010 (2) EEPROM (5) Environment Sensor (4) esp8266 (1) I2C (29) Input/Output (67) Interrupt (19) Keil (5) Keypad (10) LCD (46) Master/Slave (1) MAX7221 (1) MCP23017 (5) MCP23S17 (4) Meter (3) MikroC (2) Motor (15) MPLABX (66) Nokia 5110 LCD (3) OLED (2) One-Wire (6) Oscillator (8) PCB (6) PCD8544 (3) PCF8574 (5) PIC (107) PIC12F (2) PIC16F628A (2) PIC16F630 (1) PIC16F716 (3) PIC16F818 (10) PIC16F818/819 (2) PIC16F84A (15) PIC16F876A (1) PIC16F877A (9) PIC16F88 (1) PIC16F887 (60) PIC18 (19) PIC18F1220 (4) PIC18F2550 (3) PIC18F4550 (12) PWM (11) RTC (8) Sensor (10) SH1106 (1) Shift Register (11) Shift Registers (2) SPI (24) STM32 (6) STM32 Blue Pill (6) STM32CubeIDE (6) STM32F103C8T6 (6) SysTick (3) temperature sensor (11) Thermometer (21) Timer/Counter (30) TM1637 (2) UART (7) Ultrasonic (4) Voltmeter (7) WDT (1) XC16 (2) XC8 (94)