#2: Keypad Matriks Software: Codevisionavr 2.05.3
#2: Keypad Matriks Software: Codevisionavr 2.05.3
//************* Preprocessor
#define WAITlepas()
delay_ms(50);}
#define
KEY_RST
'*'
#define
KEY_END
'D'
#define DDR_keypad
DDRC
#define PORT_keypad
PORTC
#define PIN_keypad
PINC
#define HI_keypad(x)
PORT_keypad |=(1
#define LO_keypad(x)
PORT_keypad &=~(1
#define IS_HI(x)
PIN_keypad &(1
{
unsigned char huruf[16]={'D','#','0','*','C','9','8','7','B','6','5','4','A','3','2','1'};
unsigned char kol,bar,ke=0,tombol='$';
DDR_keypad = 0x0f;
for (kol=0; kol
{
PORT_keypad = 0xff;
LO_keypad(kol);
#asm("nop");
#asm("nop");
for (bar =4; bar
{
if (~IS_HI(bar)) tombol = huruf[ke];
ke++;
}
}
return tombol;
}
while(loop--)
{
key = KEYPADscan();
if (key!='$')
break;
delay_ms(50);
}
return key;
}
menu = KEYPADwait(40);
if (menu!='$')
");
// 40 x 50 mS = 2000 mS
break;
//-------------lcd_clear();
//-------------lcd_gotoxy(8,0);
lcd_putchar('A');
lcd_gotoxy(0,1);
menu = KEYPADwait(40);
if (menu!='$')
// 20 x 50 mS = 1000 mS
break;
//-------------lcd_gotoxy(8,0);
lcd_putchar('B');
lcd_gotoxy(0,1);
lcd_putsf("Perbandingan Vol");
menu = KEYPADwait(40);
if (menu!='$')
break;
//-------------lcd_gotoxy(8,0);
lcd_putchar('C');
lcd_gotoxy(0,1);
lcd_putsf("Kalibrasi Sensor");
menu = KEYPADwait(40);
if (menu!='$')
break;
}
lcd_clear();
lcd_putchar(menu);
WAITlepas();
return menu;
}
{
switch(state)
{
case st_idle:
break;
case st_awal:
POMPA = 0;
glkey = MENUawal();
if (glkey=='A')
state = st_run;
else if (glkey=='B')
state = st_rasio;
else if (glkey=='C')
state = st_kalib;
else
state = st_awal;
break;
....... // code untuk switch state lainnya
}
//===============================================
//===============================================
PENJELASAN
Akan tetapi WAITlepas(); sangat sederhana, dan daripada membuat fungsi lebih baik dijadikan
Pre-Processor saja biar lebih sederhana juga...
Disini menunjukkan cara menggunakan Pre-Processor sebagai fungsi...
2. void WAITlepas();
Berfungsi untuk mendeteksi penekanan tombol dan menunggu hingga tombol Keypad tidak ada
yang di tekan istilah dalam pemrograman OnRelease...
Pada fungsi ini ditambahkan delay_ms(50);
yang bertujuan untuk menghilangkan efek bounching dan mencegah pendeteksi penekanan
tombol berulang kali.
Jadi jika anda memanggil fungsi ini maka mikrokontroller tidak akan memproses fungsi lainnya
selama keypad masih ada yang tertekan (kecuali interupsi)...
Konfigurasi Keypad adalah 0-3 untuk Kolom dan 4-7 untuk baris...
Konfigurasi apapun terserah selama 0-3 itu kolom saja atau baris saja dan 4-7 itu baris saja atau
kolom saja...
Jika anda menggunakan konfigurasi yang berbeda silahkan di program terlebih dahulu
mikrokontrollernya lalu di tekan keypad dan lihat hasil yang di tampilkan pada LCD / terminal
lalu ubah posisi pada variable ini...
unsigned char huruf[16]={'D','#','0','*','C','9','8','7','B','6','5','4','A','3','2','1'};
Mudah kan...
Note :
Silahkan Di CoPas di Share selama tidak mengubah / mengedit sedikitpun isinya...
Semoga manfaat......^^...
By : Too PayZ