PRAKTIKUM 3 Moving sign LED Dot Matrix dari keypad
COMPUTER ENGINEERING B 2012 | PENS Page 1
PRAKTIKUM 3 MOVING SIGN LED DOT MATRIX 16X16 DARI KEYPAD DENGAN MODUL MCS-51/AVR/PIC MCU A. Tujuan setelah melakukan praktikum diharapkan mahasiswa mampu : 1. Mengetahui langkah langkah mengakses dot matrix, keypad dan buzzer 2. Mengetahui PORT dan PIN yang digunakan untuk mengakses dot matrix, Keypad dan buzzer . 3. Memahami rangkaian mikrokontroller untuk menyalakan/mengaktifkan Port pada kolom dan baris dot matrix 16 x 16 4. Memahami rangkaian mikrokontroller untuk menghubungkan/interaksi antara keypad dengan dot matrix . B. Dasar Teori: Microcontroller adalah sebuah komputer kecil di dalam satu sirkuit yang berisi inti prosesor, memori, dan input/output peripheral yang dapat diprogram, dan di desain khusus untuk embedded system.Embedded system tidak membutuhkan kapasitas data dan address bus yang terlalu besar, itu sebabnya microcontroller ini berukuran lebih kecil Pada praktikum ini menggunakan modul yang memakai microcontroller ATMEGA 162. Dapat dilihat pada gambar modul dengan tanda garis merah dibawah ini : Input Keypad Led Dot Matrix Buzzer ATMEGA 162 PRAKTIKUM 3 Moving sign LED Dot Matrix dari keypad COMPUTER ENGINEERING B 2012 | PENS Page 2 DATASHEET PRAKTIKUM 3 Moving sign LED Dot Matrix dari keypad COMPUTER ENGINEERING B 2012 | PENS Page 3 Penjelaskan tentang keyboard 4 x 4, led dot matrix dan buzzer adalah sebagai berikut : 1. Keyboard 4 x 4 (keypad 4 x 4) adalah interface antara perangkat (mesin) elektronik dengan manusia atau dikenal dengan istilah HMI (Human Machine Interface). Rangkaian matrix keypad diatas terdiri dari 16 saklar push buton dengan konfigurasi 4 baris dan 4 kolom. 8 line yang terdiri dari 4 baris dan 4 kolom tersebut dihubungkan dengan port mikrokontroler 8 bit. Sisi baris dari matrix keypad ditandai dengan nama Y0 ~ Y3 dihubungkan dengan PINB.0 ~ PINB.3 kemudian sisi kolom ditandai dengan nama X0 ~ X3 dihubungkan dengan PORTB.4 ~ PORTB.7 2. Led Dot matrix 16 x 16 LED DOT MATRIX adalah Dot matrix dapat ditampilkan dengan warna merah & hijau dan program. ROW1 ke ROW8 adalah output hijau. ROW9 untuk ROW16 adalah output merah. Selain itu, pengguna dapat menggunakan jumper 16x16, 16x8 atau 8x8 untuk memilih mode tampilan . Prinsip kerja dot matrix sebenarnya menggunakan system scanning kolom . Scanning kolom adalah pada satu waktu dari sekian banyak kolom , hanya satu kolom yang akan menyala berwarna merah. Apabila proses scanning kolom dipelankan/ diperlambat sampai mata dapat melihat, maka pergeseran menyalaan kolom akan terlihat satu persatu . Pada dasarnya DOT matrix adalah Display LED yg disusun sedemikian rupa sehingga untuk menghidupkan led ke (x,x) dibutuhkan kombinasi tegangan antara Pin baris & kolom. Penanda kaki nomer satu adalah tulisan marking, paling kiri no 1....paling kanan no 7. Menyebrang ke kanan atas no 8 sampai ke kiri atas itu nomer 14. Beberapa kaki memang tidak dipakai jadi dibarkan tidak terhubung. Kemudian untuk mempermudah kontrol dan menghemat pin maka diperlukan proses scanning ( biasanya kolom...) sedangkan pada baris diberikan bit sesuai huruf/karakter yang akan ditampilkan yang bersesuaian dengan posisi scanning. PRAKTIKUM 3 Moving sign LED Dot Matrix dari keypad COMPUTER ENGINEERING B 2012 | PENS Page 4 Scanning untuk kolom dimaksud memberikan "1" high ( untuk common katoda) atau"0" untuk common anoda , untuk kolom lainnya diberi nilai negasi dari kolom yg diberi nilai 1. Begitu selanjutnya untuk kolom berikutnya sampai kolom terakhir dari rangkaian led matrix dan berulang dari depan lagi. Proses ini dilakukan sangat cepat sehingga mata kita melihatnya tetap sebagai suatu karakter yg diam. Misalnya ingin menampilkan huruf A , secara umum digambarkan sebagai berikut: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 dari gambar diatas logikanya seperti ini : - Saat kolom pertama ( scan kolom 1 = 1 / high/2.4 v) maka bit yg diberi pada baris berupa "1110000", sehingga jika ketemu 1 vs 1 ga ada arus mengalir, jadi LED mati, jika 1 ketemu 0 maka arus mengalir, led menyala. - Begitu juga untuk kolom kedua, ketika kolom kedua diberi tegangan maka pada baris bit yg diberikan adalah "1101011". - Dan seterusnya, ketika kolom nya mencapai ujung maka akan diulang ke kolom 1 lagi. - Untuk melakukan scanning biasanya dilakukan dengan memanfaatkan shift register, atau paling sederhana dengan menggunakan IC 4017 yang di cascade menjadi led berjalan yang panjang. C. PERALATAN 1. Modul MCS 51 2. CodeVision AVR / Proteus D. LANGKAH PERCOBAAN 1. Siapkan modul MCS 51 2. Susun Porting untuk keypad, LED Dot Matrix dan buzzer dengan kabel yang sudah disediakan . 3. Buat Project baru dengan mengatur konfigurasi Port yang digunakan sesuai susunan porting pada Modul MCS 51 4. Lakukan percobaan PRAKTIKUM 3 Moving sign LED Dot Matrix dari keypad COMPUTER ENGINEERING B 2012 | PENS Page 5 PROGRAM PERCOBAAN : Deklarasi library dan Inisialisasi porting serta variabel yang digunakan #include <mega162.h> #include <delay.h> #define latch1 PORTD.0 #define latch2 PORTD.1 //portting B #define row0 PINC.3 // Y3 = 1 ABC2 DEF3 #define row1 PINC.2 // Y2 = GHI4 JKL5 MNO6 #define row2 PINC.1 // Y1 = PQRS7 TUV8 WXYZ9 #define row3 PINC.0 // Y0 = * 0 # OK #define col0 PORTC.4 // X0 = 1 GHI4 PQRS7 * #define col1 PORTC.5 // X1 = ABC2 JKL5 TUV8 0 #define col2 PORTC.6 // X2 = DEF3 MNO6 WXYZ9 # #define col3 PORTC.7 // X3 = OK //variabel array utk menampung input keypad char tandatitik='-'; char tandamasuk='+'; char A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0; int q; char flag[10]; int inc=0; Program Keypad : untuk mengakses board keypad pada modul / sebagai input character //fungsi untuk porting keypad pada port C & pin C char keyp(){ //kolom pertama 1 4 7 * col0=0;col1=1;col2=1;col3=1;delay_ms(1); if(row0==0){A++;delay_ms(30);tandatitik='1';row0=1;flag[inc]=check();} if(row1==0){D++;delay_ms(30);tandatitik='4';row1=1;flag[inc]=check();} if(row2==0){G++;delay_ms(30);tandatitik='7';row2=1;flag[inc]=check();} if(row3==0){J++;delay_ms(30);tandatitik='*';row3=1;flag[inc]=check();} //kolom kedua 2 5 8 0 col0=1;col1=0;col2=1;col3=1;delay_ms(1); if(row0==0){B++;delay_ms(30);tandatitik='2';row0=1;flag[inc]=check();} if(row1==0){E++;delay_ms(30);tandatitik='5';row1=1;flag[inc]=check();} if(row2==0){H++;delay_ms(30);tandatitik='8';row2=1;flag[inc]=check();} if(row3==0){K++;delay_ms(30);tandatitik='0';row3=1;flag[inc]=check();} //kolom ketiga 3 6 9 # col0=1;col1=1;col2=0;col3=1;delay_ms(1); if(row0==0){C++;delay_ms(30);tandatitik='3';row0=1;flag[inc]=check();} if(row1==0){F++;delay_ms(30);tandatitik='6';row1=1;flag[inc]=check();} if(row2==0){I++;delay_ms(30);tandatitik='9';row2=1;flag[inc]=check();} if(row3==0){L++;delay_ms(30);tandatitik='#';row3=1;flag[inc]=check();} PRAKTIKUM 3 Moving sign LED Dot Matrix dari keypad COMPUTER ENGINEERING B 2012 | PENS Page 6 //kolom keempat A B C D col0=1;col1=1;col2=1;col3=0;delay_ms(1); if(row0==0){M++;delay_ms(30);tandatitik='A';row0=1;} if(row1==0){N++;delay_ms(30);tandatitik='B';row1=1;} if(row2==0){O++;delay_ms(30);tandatitik='C';row2=1;} if(row3==0){P++;delay_ms(30);tandatitik='D';row3=1;} } Program tampilan karakter pada led dot matrix void Ax(int a){ int x; x=a; PORTB = x; PORTA=0b11111111; latch1=1; latch1=0; PORTA=0b11111111; latch2=1; latch2=0; delay_ms(1); x=a+1; PORTB = x; PORTA=0b00011111; latch1=1; latch1=0; PORTA=0b00000000; latch2=1; latch2=0; delay_ms(1); x=a+2; PORTB = x; PORTA=0b00001111; latch1=1; latch1=0; PORTA=0b00000000; latch2=1; latch2=0; delay_ms(1); x=a+3; PORTB = x; PORTA=0b11100111; latch1=1; latch1=0; PORTA=0b11111100; latch2=1; latch2=0; delay_ms(1); x=a+4; PORTB = x; PORTA=0b11110011; latch1=1; latch1=0; PORTA=0b11111100; latch2=1; latch2=0; delay_ms(1); x=a+5; PORTB = x; PORTA=0b11110011; latch1=1; latch1=0; PORTA=0b11111100; latch2=1; latch2=0; delay_ms(1); x=a+6; PORTB = x; PORTA=0b11110011; latch1=1; latch1=0; PORTA=0b11111100; latch2=1; latch2=0; delay_ms(1); x=a+7; PORTB = x; PORTA=0b11110011; latch1=1; latch1=0; PORTA=0b11111100; latch2=1; latch2=0; delay_ms(1); x=a+8; PORTB = x; PORTA=0b11100111; latch1=1; latch1=0; PORTA=0b11111100; latch2=1; latch2=0; delay_ms(1); x=a+9; PORTB = x; PORTA=0b00001111; latch1=1; latch1=0; PORTA=0b00000000; latch2=1; latch2=0; delay_ms(1); x=a+10; PORTB = x; PORTA=0b00011111; latch1=1; latch1=0; PORTA=0b00000000; latch2=1; latch2=0; delay_ms(1); } void KOTAK(int a){ int x; x=a; PORTB = x; PORTA=0b00000000; latch1=1; latch1=0; PRAKTIKUM 3 Moving sign LED Dot Matrix dari keypad COMPUTER ENGINEERING B 2012 | PENS Page 7 PORTA=0b00000000; latch2=1; latch2=0; delay_ms(1); x=a+1; PORTB = x; PORTA=0b00000000; latch1=1; latch1=0; PORTA=0b00000000; latch2=1; latch2=0; delay_ms(1); x=a+2; PORTB = x; PORTA=0b00000000; latch1=1; latch1=0; PORTA=0b00000000; latch2=1; latch2=0; delay_ms(1); x=a+3; PORTB = x; PORTA=0b00000000; latch1=1; latch1=0; PORTA=0b00000000; latch2=1; latch2=0; delay_ms(1); x=a+4; PORTB = x; PORTA=0b00000000; latch1=1; latch1=0; PORTA=0b00000000; latch2=1; latch2=0; delay_ms(1); x=a+5; PORTB = x; PORTA=0b00000000; latch1=1; latch1=0; PORTA=0b00000000; latch2=1; latch2=0; delay_ms(1); x=a+6; PORTB = x; PORTA=0b00000000; latch1=1; latch1=0; PORTA=0b00000000; latch2=1; latch2=0; delay_ms(1); x=a+7; PORTB = x; PORTA=0b00000000; latch1=1; latch1=0; PORTA=0b00000000; latch2=1; latch2=0; delay_ms(1); x=a+8; PORTB = x; PORTA=0b00000000; latch1=1; latch1=0; PORTA=0b00000000; latch2=1; latch2=0; delay_ms(1); x=a+9; PORTB = x; PORTA=0b00000000; latch1=1; latch1=0; PORTA=0b00000000; latch2=1; latch2=0; delay_ms(1); x=a+10; PORTB = x; PORTA=0b00000000; latch1=1; latch1=0; PORTA=0b00000000; latch2=1; latch2=0; delay_ms(1); x=a+11; PORTB = x; PORTA=0b00000000; latch1=1; latch1=0; PORTA=0b00000000; latch2=1; latch2=0; delay_ms(1); x=a+12; PORTB = x; PORTA=0b00000000; latch1=1; latch1=0; PORTA=0b00000000; latch2=1; latch2=0; delay_ms(1); x=a+13; PORTB = x; PORTA=0b00000000; latch1=1; latch1=0; PORTA=0b00000000; latch2=1; latch2=0; delay_ms(1); x=a+14; PORTB = x; PORTA=0b00000000; latch1=1; latch1=0; PORTA=0b00000000; latch2=1; latch2=0; delay_ms(1); x=a+15; PORTB = x; PORTA=0b00000000; latch1=1; latch1=0; PORTA=0b00000000; latch2=1; latch2=0; delay_ms(1); } void KOSONG(int a){ int x; x=a; PORTB = x; PORTA=0b11111111; latch1=1; latch1=0; PORTA=0b11111111; latch2=1; latch2=0; delay_ms(1); PRAKTIKUM 3 Moving sign LED Dot Matrix dari keypad COMPUTER ENGINEERING B 2012 | PENS Page 8 x=a+1; PORTB = x; PORTA=0b11111111; latch1=1; latch1=0; PORTA=0b11111111; latch2=1; latch2=0; delay_ms(1); x=a+2; PORTB = x; PORTA=0b11111111; latch1=1; latch1=0; PORTA=0b11111111; latch2=1; latch2=0; delay_ms(1); x=a+3; PORTB = x; PORTA=0b11111111; latch1=1; latch1=0; PORTA=0b11111111; latch2=1; latch2=0; delay_ms(1); x=a+4; PORTB = x; PORTA=0b11111111; latch1=1; latch1=0; PORTA=0b11111111; latch2=1; latch2=0; delay_ms(1); x=a+5; PORTB = x; PORTA=0b11111111; latch1=1; latch1=0; PORTA=0b11111111; latch2=1; latch2=0; delay_ms(1); x=a+6; PORTB = x; PORTA=0b11111111; latch1=1; latch1=0; PORTA=0b11111111; latch2=1; latch2=0; delay_ms(1); x=a+7; PORTB = x; PORTA=0b11111111; latch1=1; latch1=0; PORTA=0b11111111; latch2=1; latch2=0; delay_ms(1); x=a+8; PORTB = x; PORTA=0b11111111; latch1=1; latch1=0; PORTA=0b11111111; latch2=1; latch2=0; delay_ms(1); x=a+9; PORTB = x; PORTA=0b11111111; latch1=1; latch1=0; PORTA=0b11111111; latch2=1; latch2=0; delay_ms(1); x=a+10; PORTB = x; PORTA=0b11111111; latch1=1; latch1=0; PORTA=0b11111111; latch2=1; latch2=0; delay_ms(1); x=a+11; PORTB = x; PORTA=0b11111111; latch1=1; latch1=0; PORTA=0b11111111; latch2=1; latch2=0; delay_ms(1); x=a+12; PORTB = x; PORTA=0b11111111; latch1=1; latch1=0; PORTA=0b11111111; latch2=1; latch2=0; delay_ms(1); x=a+13; PORTB = x; PORTA=0b11111111; latch1=1; latch1=0; PORTA=0b11111111; latch2=1; latch2=0; delay_ms(1); x=a+14; PORTB = x; PORTA=0b11111111; latch1=1; latch1=0; PORTA=0b11111111; latch2=1; latch2=0; delay_ms(1); x=a+15; PORTB = x; PORTA=0b11111111; latch1=1; latch1=0; PORTA=0b11111111; latch2=1; latch2=0; delay_ms(1); } void x1(int a){ int b=0; int x; x=a; PORTB = x; PORTA=0b11111011; latch1=1; latch1=0; PORTA=0b11111111; latch2=1; latch2=0; delay_ms(1); PRAKTIKUM 3 Moving sign LED Dot Matrix dari keypad COMPUTER ENGINEERING B 2012 | PENS Page 9 b++; x=a+b; PORTB = x; PORTA=0b11111001; latch1=1; latch1=0; PORTA=0b00111111; latch2=1; latch2=0; delay_ms(1); b++; x=a+b; PORTB = x; PORTA=0b00000000; latch1=1; latch1=0; PORTA=0b00000000; latch2=1; latch2=0; delay_ms(1); b++; x=a+b; PORTB = x; PORTA=0b00000000; latch1=1; latch1=0; PORTA=0b00000000; latch2=1; latch2=0; delay_ms(1); b++; x=a+b; PORTB = x; PORTA=0b00000000; latch1=1; latch1=0; PORTA=0b00000000; latch2=1; latch2=0; delay_ms(1); b++; x=a+b; PORTB = x; PORTA=0b11111111; latch1=1; latch1=0; PORTA=0b00111111; latch2=1; latch2=0; delay_ms(1); } Program clear screen pada saat terjadi interrupt atau transisi character dot matrix void BLANK(){ int ty; for(ty=0;ty<=16;ty++){ KOSONG(0); } } Program untuk menampilkan karakter ke led dot matrix sesuai dengan input keypad . char check(){ if(tandatitik=='1'){ for(q=16;q>=0;q--){ x1(q); delay_ms(10);}BLANK(); A=0;return('1'); } if(tandatitik=='2'){ if(B==1){for(q=16;q>=0;q--){ Ax(q); delay_ms(10);}BLANK();} else if(B==2){for(q=16;q>=0;q--){ Bx(q); delay_ms(10);}BLANK();} else if(B == 3){for(q=16;q>=0;q--){Cx(q); delay_ms(10);}BLANK();} else if(B == 4){for(q=16;q>=0;q--){x2(q); delay_ms(10);}BLANK();} if(B==4){B=0;return('2');} else if(B==3){return('C');} else if(B==2){return('B');} else if(B==1){return('A');} } if(tandatitik=='3'){ if(C==1){for(q=16;q>=0;q--){ Dx(q); delay_ms(10);}BLANK();} else if(C==2){for(q=16;q>=0;q--){ Ex(q); delay_ms(10);}BLANK();} else if(C == 3){for(q=16;q>=0;q--){Fx(q); delay_ms(10);}BLANK();} else if(C == 4){for(q=16;q>=0;q--){x3(q); delay_ms(10);}BLANK();} PRAKTIKUM 3 Moving sign LED Dot Matrix dari keypad COMPUTER ENGINEERING B 2012 | PENS Page 10 if(C==4){C=0;return('3');} else if(C==3){return('F');} else if(C==2){return('E');} else if(C==1){return('D');} } if(tandatitik=='4'){ if(D==1){for(q=16;q>=0;q--){ Gx(q); delay_ms(10);}BLANK();} else if(D==2){for(q=16;q>=0;q--){ Hx(q); delay_ms(10);}BLANK();} else if(D == 3){for(q=16;q>=0;q--){Ix(q); delay_ms(10);}BLANK();} else if(D == 4){for(q=16;q>=0;q--){x4(q); delay_ms(10);}BLANK();} if(D==4){D=0;return('4');} else if(D==3){return('I');} else if(D==2){return('H');} else if(D==1){return('G');} } if(tandatitik=='5'){ if(E==1){for(q=16;q>=0;q--){ Jx(q); delay_ms(10);}BLANK();} else if(E==2){for(q=16;q>=0;q--){ Kx(q); delay_ms(10);}BLANK();} else if(E == 3){for(q=16;q>=0;q--){Lx(q); delay_ms(10);}BLANK();} else if(E == 4){for(q=16;q>=0;q--){x5(q); delay_ms(10);}BLANK();} if(E==4){E=0;return('5');} else if(E==3){return('L');} else if(E==2){return('K');} else if(E==1){return('J');} } if(tandatitik=='6'){ if(F==1){for(q=16;q>=0;q--){ Mx(q); delay_ms(10);}BLANK();} else if(F==2){for(q=16;q>=0;q--){ Nx(q); delay_ms(10);}BLANK();} else if(F == 3){for(q=16;q>=0;q--){Ox(q); delay_ms(10);}BLANK();} else if(F == 4){for(q=16;q>=0;q--){x6(q); delay_ms(10);}BLANK();} if(F==4){F=0;return('6');} else if(F==3){return('O');} else if(F==2){return('N');} else if(F==1){return('M');} } if(tandatitik=='7'){ if(G==1){for(q=16;q>=0;q--){ Px(q); delay_ms(10);}BLANK();} else if(G==2){for(q=16;q>=0;q--){ Qx(q); delay_ms(10);}BLANK();} else if(G == 3){for(q=16;q>=0;q--){Rx(q); delay_ms(10);}BLANK();} else if(G == 4){for(q=16;q>=0;q--){Sx(q); delay_ms(10);}BLANK();} else if(G == 5){for(q=16;q>=0;q--){x7(q); delay_ms(10);}BLANK();} if(G==5){G=0;return('7');} else if(G==4){return('S');} else if(G==3){return('R');} else if(G==2){return('Q');} PRAKTIKUM 3 Moving sign LED Dot Matrix dari keypad COMPUTER ENGINEERING B 2012 | PENS Page 11 else if(G==1){return('P');} } if(tandatitik=='8'){ if(H==1){for(q=16;q>=0;q--){ Tx(q); delay_ms(10);}BLANK();} else if(H==2){for(q=16;q>=0;q--){ Ux(q); delay_ms(10);}BLANK();} else if(H == 3){for(q=16;q>=0;q--){Vx(q); delay_ms(10);}BLANK();} else if(H == 4){for(q=16;q>=0;q--){x8(q); delay_ms(10);}BLANK();} if(H==4){H=0;return('8');} else if(H==3){return('V');} else if(H==2){return('U');} else if(H==1){return('T');} } if(tandatitik=='9'){ if(I==1){for(q=16;q>=0;q--){ Wx(q); delay_ms(10);}BLANK();} else if(I==2){for(q=16;q>=0;q--){ Xx(q); delay_ms(10);}BLANK();} else if(I == 3){for(q=16;q>=0;q--){Yx(q); delay_ms(10);}BLANK();} else if(I == 4){for(q=16;q>=0;q--){Zx(q); delay_ms(10);}BLANK();} else if(I == 5){for(q=16;q>=0;q--){x9(q); delay_ms(10);}BLANK();} if(I==5){I=0;return('9');} else if(I==4){return('Z');} else if(I==3){return('Y');} else if(I==2){return('X');} else if(I==1){return('W');} } if(tandatitik=='*'){ if(J==1){for(q=16;q>=0;q--){ bintang(q); delay_ms(10);}}BLANK(); J=0;return('*');} if(tandatitik=='0'){ if(K==1){for(q=16;q>=0;q--){ x0(q); delay_ms(10);}}BLANK(); K=0;return('0');} if(tandatitik=='#'){ if(L==1){for(q=16;q>=0;q--){ pagar(q); delay_ms(10);}}BLANK(); L=0;return('#');} if(tandatitik=='A'){ } if(tandatitik=='B'){ } if(tandatitik=='C'){ } if(tandatitik=='D'){ } } Program time out untuk memberi batas waktu memilih karakter sesuai keypad void ke(){ int uv; int ss; PRAKTIKUM 3 Moving sign LED Dot Matrix dari keypad COMPUTER ENGINEERING B 2012 | PENS Page 12 for(uv=0;uv<=500;uv++){ if(uv==500){ for(q=16;q>=0;q--){ KOTAK(q); delay_ms(10);} BLANK();} keyp(); } } Program temporary character yang sudah dipilih sesuai urutan parsing parameter void cec(int cv){ switch(flag[cv]){ case 'A' : for(q=16;q>=0;q--){ Ax(q); delay_ms(25);} break; case 'B' : for(q=16;q>=0;q--){ Bx(q); delay_ms(25);} break; case 'C' : for(q=16;q>=0;q--){ Cx(q); delay_ms(25);} break; case 'D' : for(q=16;q>=0;q--){ Dx(q); delay_ms(25);} break; case 'E' : for(q=16;q>=0;q--){ Ex(q); delay_ms(25);} break; case 'F' : for(q=16;q>=0;q--){ Fx(q); delay_ms(25);} break; case 'G' : for(q=16;q>=0;q--){ Gx(q); delay_ms(25);} break; case 'H' : for(q=16;q>=0;q--){ Hx(q); delay_ms(25);} break; case 'I' : for(q=16;q>=0;q--){ Ix(q); delay_ms(25);} break; case 'J' : for(q=16;q>=0;q--){ Jx(q); delay_ms(25);} break; case 'K' : for(q=16;q>=0;q--){ Kx(q); delay_ms(25);} break; case 'L' : for(q=16;q>=0;q--){ Lx(q); delay_ms(25);} break; case 'M' : for(q=16;q>=0;q--){ Mx(q); delay_ms(25);} break; case 'N' : for(q=16;q>=0;q--){ Nx(q); delay_ms(25);} break; case 'O' : for(q=16;q>=0;q--){ Ox(q); delay_ms(25);} break; case 'P' : for(q=16;q>=0;q--){ Px(q); delay_ms(25);} break; case 'Q' : for(q=16;q>=0;q--){ Qx(q); delay_ms(25);} break; case 'R' : for(q=16;q>=0;q--){ Rx(q); delay_ms(25);} break; case 'S' : for(q=16;q>=0;q--){ Sx(q); delay_ms(25);} break; case 'T' : for(q=16;q>=0;q--){ Tx(q); delay_ms(25);} break; case 'U' : for(q=16;q>=0;q--){ Ux(q); delay_ms(25);} break; case 'V' : for(q=16;q>=0;q--){ Vx(q); delay_ms(25);} break; case 'W' : for(q=16;q>=0;q--){ Wx(q); delay_ms(25);} break; case 'X' : for(q=16;q>=0;q--){ Xx(q); delay_ms(25);} break; case 'Y' : for(q=16;q>=0;q--){ Yx(q); delay_ms(25);} break; case 'Z' : for(q=16;q>=0;q--){ Zx(q); delay_ms(25);} break; case '0' : for(q=16;q>=0;q--){ x0(q); delay_ms(25);} break; case '1' : for(q=16;q>=0;q--){ x1(q); delay_ms(25);} break; case '2' : for(q=16;q>=0;q--){ x2(q); delay_ms(25);} break; PRAKTIKUM 3 Moving sign LED Dot Matrix dari keypad COMPUTER ENGINEERING B 2012 | PENS Page 13 case '3' : for(q=16;q>=0;q--){ x3(q); delay_ms(25);} break; case '4' : for(q=16;q>=0;q--){ x4(q); delay_ms(25);} break; case '5' : for(q=16;q>=0;q--){ x5(q); delay_ms(25);} break; case '6' : for(q=16;q>=0;q--){ x6(q); delay_ms(25);} break; case '7' : for(q=16;q>=0;q--){ x7(q); delay_ms(25);} break; case '8' : for(q=16;q>=0;q--){ x8(q); delay_ms(25);} break; case '9' : for(q=16;q>=0;q--){ x9(q); delay_ms(25);} break; case '*' : for(q=16;q>=0;q--){ bintang(q);delay_ms(25);}break; case '#' : for(q=16;q>=0;q--){ pagar(q); delay_ms(25);}break; } } Program inti / main program : dijalankan pertama kali void main(void){ #pragma optsize- CLKPR=0x80; CLKPR=0x00; #ifdef _OPTIMIZE_SIZE_ #pragma optsize+ #endif //PORT A Initialization PORTA=0x00; DDRA=0xFF; //PORT B Initialization PORTB=0x0F; DDRB=0x0F; //PORT C Initialization PORTC=0x0F; DDRC=0xF0; //PORT D Initialization PORTD=0x00; DDRD=0x07; //PORT E Initialization PORTE=0x00; DDRE=0x00; TCCR0=0x00; TCNT0=0x00; OCR0=0x00; TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00; TCCR3A=0x00; PRAKTIKUM 3 Moving sign LED Dot Matrix dari keypad COMPUTER ENGINEERING B 2012 | PENS Page 14 TCCR3B=0x00; TCNT3H=0x00; TCNT3L=0x00; ICR3H=0x00; ICR3L=0x00; OCR3AH=0x00; OCR3AL=0x00; OCR3BH=0x00; OCR3BL=0x00; MCUCR=0x00; EMCUCR=0x00; TIMSK=0x00; ETIMSK=0x00; UCSR0B=0x00; UCSR1B=0x00; ACSR=0x80; SPCR=0x00; while (1){ //PERTAMA ke(); A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0; tandatitik='-'; //KEDUA inc++; ke(); A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0; tandatitik='-'; //KETIGA inc++; ke(); A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0; tandatitik='-'; //KEEMPAT inc++; ke(); A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0; tandatitik='-'; //KELIMA inc++; ke(); A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0; tandatitik='-'; //KEENAM inc++; ke(); A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0; tandatitik='-'; //KETUJUH inc++; ke(); A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0; tandatitik='-'; //KEDELAPAN inc++; ke(); A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0; tandatitik='-'; //KESEMBILAN inc++; PRAKTIKUM 3 Moving sign LED Dot Matrix dari keypad COMPUTER ENGINEERING B 2012 | PENS Page 15 ke(); A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0; tandatitik='-'; //KESEPULUH inc++; ke(); A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0; tandatitik='-'; cec(0); cec(1); cec(2); cec(3); cec(4); cec(5); cec(6); cec(7); cec(8); cec(9); for(q=900;q>=0;q--){ x1(0); delay_ms(10); } } } E. ANALISA PERCOBAAN Praktikum ini mengaplikasikan pemrograman C/C++ dalam sistem embedded pada modul MCS- 51 untuk membuat simulasi moving sign pada led dot matrix dari input keypad. Program ini merupakan program untuk keypad 4x4 (input) dengan LCD 16x2 dan led dot matrix sebagai output yang dihasilkan jika ada input dari keypad . Analisa : Pada percobaan ini menggunakan library mega162.h dan delay.h. #define digunakan untuk mendeklarasikan PORT, dideklarasikan latch1 dan latch2 pada PORTD.0 dan PORTD.1. Dideklarasikan row3 ~ row0 pada PINB.0 ~ PINB.3. Dideklarasikan col 0 ~ col3 pada PORTB.4 ~ PINB.7. Variabel q dan inc=0 dideklarasikan dengan tipe data integer dan Variabel tandatitik=- , tandamasuk=+,A~P = 0 dan flag[10] bertipe data char . PRAKTIKUM 3 Moving sign LED Dot Matrix dari keypad COMPUTER ENGINEERING B 2012 | PENS Page 16 Beberapa Fungsi yang digunakan untuk menampilkan karakter Fungsi BLANK() dan check() Analisa : Pada fungsi check() bertipe char digunakan untuk mengecek kondisi tandatitik = 1 sampai dengan * dan # visualnya disamakan dengan keypad pada Handphone.Fungsi ini dieksekusi ketika ada inputan dari keypad . Sedangkan fungsi BLANK() digunakan untuk menghapus layar pada led dot matrix yang diberi perulangan dari 0 sampai dengan 16 untuk waktu pembersihan layar dan menjalankan fungsi KOSONG(0) , nilai 0 adalah nilai parameter untuk memeberi nilai 0 pada PORTA = 0b11111111 artinya semua kolom tidak menyala. Analisa : Pada fungsi Ax~x9,KOTAK dan KOSONG dengan variabel a bertipe integer sebagai parameter . Dimasing-masing fungsi tersebut terdapat variabel b dan x yang bertipe data integer. Variabel x dideklarasikan samadengan nilai variabel a dari nilai parameter fungsi . Nilai variabel x menjadi penentu kolom berapa yang aktif dan bernilai 0 ditentukan / diinisialisasikan pada PORT A serta latch1 dan latch2 bernilai 1 tidak aktif lalu bernilai 0 aktif diberi delay agar tampilan tiap kolomnya tampak bersamaan lampu led menyala . PRAKTIKUM 3 Moving sign LED Dot Matrix dari keypad COMPUTER ENGINEERING B 2012 | PENS Page 17 Fungsi keyp() digunakan untuk inisialisasi pengaktifan kolom dan baris pada keypad. Fungsi ke() dan cec(int cv) : Analisa : Pada fungsi keyp() merupakan inisialisasi pengaktifan dari kolom pada keypad . Kolom yang aktif dapat dilihat dari nilai 0 (aktif low) , misalnya col0=0 , col1=1, col2=1, col3=1 maka yang aktif adalah kolom 1 . Pemberian nilai pada kolom yang aktif dengan kondisi if(row0==0){A++;delay_ms(30); tandatitik=1; row0=1; flag[inc]=check();} artinya saat kolom 0 dan baris 0 maka diinisialisasi sebagai tandatitik= 1 yang kondisinya akan dijalankan pada fungsi check() begitu pula selanjutnya. Nilai balik/return dari fungsi check() akan disimpan pada array flag[inc]. Sedangkan A++ digunakan untuk increment dari nilai sebelumnya A = 0 , maka jika ditambah 1 menjalankan pada kolom 1 begitu seterusnya. Analisa : Pada fungsi ke() merupakan program time out untuk memberi batas waktu memilih karakter sesuai keypad . Pada fungsi cec() mempunyai parameter cv yang bertipe integer . Fungsi cec() digunakan untuk menjalankan/menampilkan karakter pada led dot matrix yang didalamnya terdapat statement switch-case dengan parameter variabel array flag[cv] dari nilai parameter tersebut, yang mana variabel array ini sebagai variabel temporary yg menyimpan karakter saat menekan keypad. PRAKTIKUM 3 Moving sign LED Dot Matrix dari keypad COMPUTER ENGINEERING B 2012 | PENS Page 18 Fungsi inti / main program : F. KESIMPULAN Dari percobaan moving sign dari input keypad yang ditampilkan pada led dot matrix ini dapat disimpulkan bahwa percobaan ini perlu ketelitian dan keberhasilan program terletak dari algoritma programmer . Tingkat kesulitan dari project ini yaitu menyimpan 10 karakter seperti kata POLITEKNIK yang kemudian diberi animasi berjalan/begerak dari kiri ke kanan pada setiap kata/karakter . Analisa : Pada fungsi main() ini digunakan untuk menjalankan program yang pertama kali ditransfer ke modul. Inisialisasi PORT dan PIN / DDR juga untuk kondisi pertama . Analisa : Pada fungsi while(1) ini menjalankan program ini secara continue / berkelanjutan . Untuk pertama kali memanggil fungsi ke() untuk memberi waktu menekan keypad sebagai input lalu mnginisialisasi lagi nilai variabel A sampai dengan P =0 dan tandatitik=-. Selanjutnya terdapat increment variabel inc++ . Lalu memanggil fungsi cec dengan memasukkan nilai parameter untuk menyimpan inputan keypad yang ingin ditampilkan dan diakhir program menampilkan angka 1 dengan memanggil fungsi x1 pada indeks 0 . Artinya angka 1 menandakan akhir tampilan . PRAKTIKUM 3 Moving sign LED Dot Matrix dari keypad COMPUTER ENGINEERING B 2012 | PENS Page 19 LAMPIRAN Berikut gambar hasil program : 1. Porting pada modul 2. Tampilan ketika karakter berjalan 3. Tampilan angka 1 diakhir program/diakhir animasi