1
of | 10
Tujuan
1.
2.
3.
4.
2.
Tugas Pendahuluan
1.
Dasar Teori
of | 10
Keypad Matriks
Pemberian nilai tertentu seperti referensi / setpoint, angka, huruf,
perintah / command, dan lain sebagainya membutuhkan masukan / input dari
pengguna. Input bisa menggunakan push button, keypad, maupun keyboard.
Menggunakan push button sangat sederhana dan mudah digunakan tetapi semakin
banyak inputan semakin banyak pula push button yang digunakan, oleh sebab itu
push button baik digunakan untuk sistem embedded dengan sedikit inputan atau
input secara sequensial (berurutan).
Keyboard seperti pada keyboard komputer, memiliki banyak inputan
berupa huruf, angka, simbol, fungsi, dll. Menggunakan protokol dan komunikasi
serial sinkron sehingga menggunakan 2 jalur komunikasi yaitu SDA (serial data)
dan SCK (serial clock). Baik digunakan untuk sistem dengan inputan banyak dan
kompleks dan sangat berguna untuk beberapa aplikasi mikrokontroller. Sedangkan
keypad matriks adalah solusi untuk inputan cukup banyak dengan menggunakan
sedikit pin mikrokontroller.
Keypad matriks umumnya terdiri dari push button NO (Normally Open)
yang dirangkai dengan susunan baris dan kolom sehingga membentuk matriks.
Susunan matriks inilah yang menyebabkan banyak tombol dengan mengunakan
sedikit pin mikrokontroller. Jika susunan matriks 4 baris dan 4 kolom atau matriks
4x4 maka banyak tombol yang dicapai adalah 16 buah tombol (maksimum 28
tombol) sedangkan matriks 4x3 sebanyak 12 tombol (maksimum 21 tombol).
3
of | 10
Pin kolom dan pin baris kondisi awalnya (default) berlogika 1 semua.
4
of | 10
Akurasi 2 LSB.
5
of | 10
yaitu :
6
of | 10
#include <mega8535.h>
#include <stdio.h>
#include <delay.h>
void main(void)
{
PORTC = 0bff;
// Paling atas
DDRC = 0x0f;
................
// Pada Inisialisasi MCU
// hapus DDRx dan PORTx yang telah ditulis diatas
printf(Scanning Keypad Matriks 4x4\r);
while(1)
{
PORTC = 0b11111110;
if (PINC.4 == 0)
putschar(1);
else if (PINC.5 == 0)
putschar(4);
else if (PINC.6 == 0)
putschar(7);
else if (PINC.7 == 0)
putschar(*);
7
of | 10
PORTC = 0b11111101;
if (PINC.4 == 0)
else if (PINC.5 == 0)
else if (PINC.6 == 0)
else if (PINC.7 == 0)
PORTC = 0b11111011;
if (PINC.4 == 0)
else if (PINC.5 == 0)
else if (PINC.6 == 0)
else if (PINC.7 == 0)
PORTC = 0b11110111;
if (PINC.4 == 0)
else if (PINC.5 == 0)
else if (PINC.6 == 0)
else if (PINC.7 == 0)
delay_ms(200);
}
// end for while(1)
}
// end for void main()
putschar(2);
putschar(5);
putschar(8);
putschar(0);
putschar(3);
putschar(6);
putschar(9);
putschar(#);
putschar(A);
putschar(B);
putschar(C);
putschar(D);
#include <mega8535.h>
#include <stdio.h>
#include <delay.h>
#include DDR_keypad
#include PORT_keypad
#include PIN_keypad
DDRC
PORTC
PINC
#include HI_keypad(x)
#include LO_keypad(x)
#include IS_HI(x)
PORT_keypad|= (1<<x)
PORT_keypad&=~(1<<x)
PIN_keypad&(1<<x)
// global key_press
8
of | 10
void main(void)
{
................
// Pada Inisialisasi MCU
printf(Scanning Keypad Sederhana\r);
while(1)
{
key_press = SCANNING_keypad();
putchar(key_press);
delay_ms(200);
}
// end for while(1)
}
// end for void main()
9
of | 10
10
#include
#include
#include
#include
<mega8535.h>
<lcd.h>
<stdio.h>
<delay.h>
ADC_VREF_TYPE 0x40
of | 10
11
while(1)
{
for (x=0; x<4; x++)
data_adc[x] = read_adc(x);
sprintf(buf_adc,%i, data_adc[0]);
lcd_gotoxy(3,0);
lcd_puts(buf_adc);
sprintf(buf_adc,%i, data_adc[1]);
lcd_gotoxy(12,0);
lcd_puts(buf_adc);
sprintf(buf_adc,%i, data_adc[2]);
lcd_gotoxy(3,1);
lcd_puts(buf_adc);
sprintf(buf_adc,%i, data_adc[3]);
lcd_gotoxy(12,1);
lcd_puts(buf_adc);
delay_ms(200);
}
// end for while(1)
}
// end for void main()
of | 10
#include
#include
#include
#include
<mega8535.h>
<lcd.h>
<stdio.h>
<delay.h>
12
of | 10
ADC_VREF_TYPE 0x40
lcd_putsf(T0:xxxx
lcd_putsf(T2:xxxx
13
T1:xxxx);
T3:xxxx);
Putar dan ukur tegangan pada potensio lalu ubah saklar Toggle bit ke 3
(posisi INT0 / interupsi 0 / PD.2) ke logika 1 kemudian logika 0 dan
amati perubahan nilai terbaca ADC pada LCD.
of | 10