0% found this document useful (0 votes)
41 views8 pages

#2: Keypad Matriks Software: Codevisionavr 2.05.3

This document describes the keypad scanning and menu functions used in an embedded system program. It includes: 1. A global variable to store the pressed keypad value. 2. Functions for scanning the keypad matrix to detect key presses, waiting for key release, and waiting a set time for a key press. 3. A menu function that uses the wait function to display rotating menu options on an LCD until a key is pressed to select an option and trigger a different program state.

Uploaded by

Wiji Setyabudi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
41 views8 pages

#2: Keypad Matriks Software: Codevisionavr 2.05.3

This document describes the keypad scanning and menu functions used in an embedded system program. It includes: 1. A global variable to store the pressed keypad value. 2. Functions for scanning the keypad matrix to detect key presses, waiting for key release, and waiting a set time for a key press. 3. A menu function that uses the wait function to display rotating menu options on an LCD until a key is pressed to select an option and trigger a different program state.

Uploaded by

Wiji Setyabudi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 8

#2 : Keypad Matriks

Software : CodeVisionAVR 2.05.3

//************* Global Variable


unsigned char glkey;

//************* Preprocessor
#define WAITlepas()
delay_ms(50);}

glkey = 0; while(glkey!='$') {glkey = KEYPADscan();

#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

//************* Fungsi Scanning Keypad


unsigned char KEYPADscan ()

{
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;
}

//************* Fungsi KeypadWait


unsigned char KEYPADwait(int loop)
{
unsigned char key='$';

while(loop--)
{
key = KEYPADscan();
if (key!='$')

break;

delay_ms(50);
}
return key;
}

//************* Implementasi Keypad dalam Fungsi Menu


unsigned char MENUawal()
{
char menu='$';
while(1)
{
lcd_clear();
lcd_gotoxy(0,1);

lcd_putsf(" Miniatur SPBU ");


lcd_putsf(" Too PayZ

menu = KEYPADwait(40);
if (menu!='$')

");

// 40 x 50 mS = 2000 mS

break;

//-------------lcd_clear();

lcd_putsf(" Tombol _ untuk ");

//-------------lcd_gotoxy(8,0);

lcd_putchar('A');

lcd_gotoxy(0,1);

lcd_putsf(" RUN Sistem ");

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;
}

//************* Implementasi pada program utama...


....... // code sebelumnya
state = st_awal;
while (1)

{
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

Program di atas sebenarnya terdiri dari 4 buah fungsi antara lain :


1. void WAITlepas();
2. unsigned char KEYPADscan ();

3. unsigned char KEYPADwait(int loop);


4. unsigned char MENUawal();

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...

1. global variabel glkey;


Fungsi keypad secara keseluruhan hanya mengakses 1 buah global variabel dengan nama glkey.
gl berarti global dan key berarti keypad silahkan buat dengan nama sendiri sesuka anda selama
dipahami dan mudah diingat.
Semua perubahan yang terjadi pada penekanan keypad cukup dengan melihat nilai variable ini.

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)...

3. unsigned char KEYPADscan ();


Berfungsi untuk scanning semua tombol pada keypad dan mendeteksi apakah ada penekanan
tombol, jika ada akan diberikan dengan nilai yang sesuai dengan tombol tersebut.

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'};

Fungsi scanning KEYPADscan tanpa menggunakan delay dan digantikan menggunakan


#asm("nop"); sehingga bisa di-include-kan dalam aplikasi RTOS...
Tapi mesti utak atik flag dan variabel dan jangan memanggil fungsi WAITlepas();

4. unsigned char KEYPADwait(int loop);


Fungsi ini untuk menunggu beberapa saat apakah keypad di tekan atau tidak sebelum menuju
pada fungsi selanjutnya.
Beberapa program menggunakan fungsi delay_ms(xxxx) seperti :...
lcd_putsf("tampilan LCD");
delay_ms(1500);
glkey = KEYPADscan();
if (glkey == 'D') {fungsi lain}
...
Sehingga user harus menahan penekanan keypad lebih dari 1500 mS atau 1.5 detik...
Dengan menggunakan KEYPADwait(loop); seperti :
...
lcd_putsf("tampilan LCD");

glkey = KEYPADwait(30); // tundaan 50 mS x 30 = 1500 mS


if (glkey == 'D'){fungsi lain}
...
Sehingga user dapat menekan tombol kapanpun dan tanpa perlu menahan karena scanning
dilakukan setiap 50mS dan langsung keluar apabila terdeteksi penekanan tombol. Apabila tidak
ada penekanan tombol maka fungsi menunggu hingga 1500mS tergantung nilai loop-nya.

5. unsigned char MENUawal();


Fungsi ini untuk membuat daftar menu-menu atau tampilan pada LCD yang di tampilkan secara
terus menerus dan bergantian dengan memanggil fungsi KEYPADwait();
Selama tidak ada penekanan tombol atau pemilihan menu yang sesuai maka LCD akan terus
menerus menampilkan "Menu Awal".
Menu akan langsung terhenti ketika ada penekanan atau menu yang dipilih dan langsung
menjalankan fungsi tersebut...

Mudah kan...
Note :
Silahkan Di CoPas di Share selama tidak mengubah / mengedit sedikitpun isinya...

Semoga manfaat......^^...
By : Too PayZ

You might also like