Keypad 4x4 very often applied by programmer. Besides its the hardware easy, software nor hard. Basically keypad 4x4 is 16 push-button stringed up in matrix. Interfacing keypad 4x4 with pattern scanning hardly easy to be done. Besides having to has keypad 4x4, we only require a diode as supporter component. Diode applied is 1N4001 attached by series with K1, K2, K3 and K4 with part of Anode.
Interfacing Schematic for Keypad at Microcontroller ATmega8535:
After having keypad network 4x4, we will try does program by using keypad.
#include
// Alphanumeric LCD Module functions
#asm
.equ_lcd_port=0x15
#endasm
#include
//Declare your global variables here
Unsigned char dt, dtkey;
Void detect_key (void);
Void main(void)
{
//Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=On Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;
// Port B initialization
// Func7=On Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=On Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=On Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=P State6=P State5=P State4=P State3=P State2=P State1=P State0=P
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 Initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 Initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 Initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer (s) / Counter (s) Interrupt (s) initialization
TIMSK=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
LCD module initialization
lcd_init(16);
lcd_gotoxy(0,0);
lcd_puts(“Keypad to LCD…”);
lcd_gotoxy(0,1);
lcd_putsf(“Pad”);
while (1)
// Place your code here
Detect_key();
lcd_gotoxy(7,1);
sprint(buf, “%x hex”, dtkey);
lcd_puts(buf);
delay_ms(5);
};
}
Void detect_key(void) {
PORTD.4=0
Dt=(~PIND & 0x0F);
Switch (dt) {
Case1: dtkey=0x1;
Break;
Case2: dtkey=0x4;
Break;
Case4: dtkey=0x7;
Break;
Case8: dtkey=0xa;
Break;
};
PORTD.5=1; PORTD6=0;
Dt=(~PIND & 0x0F);
Switch (dt) {
Case 1: dtkey=0x3;
Break;
Case 2: dtkey=0x6;
Break;
Case 4: dtkey=0x9;
Break;
Case 8: dtkey=0xb;
Break;
};
PORTD.6=1; PORTD.7=0;
Dt=(~PIND & 0x0F);
Switch (dt) {
Case1: dtkey=0xc;
Break;
Case2: dtkey=0xd;
Break;
Case4: dtkey=0xe;
Break;
Case8: dtkey=0xf;
Break;
};
PORTD.7=1;
}
No comments:
Post a Comment