• Tidak ada hasil yang ditemukan

jika tombol up ditekan #define sw_down E==0x1A // definisi tombol down E==0x1A merupakan data jika tombol down ditekan

N/A
N/A
Protected

Academic year: 2021

Membagikan "jika tombol up ditekan #define sw_down E==0x1A // definisi tombol down E==0x1A merupakan data jika tombol down ditekan"

Copied!
9
0
0

Teks penuh

(1)

Lampiran Software

#asm

.equ __lcd_port=0x1B // LCD di PORTA alamat PORTA di 0x1B , 0x1B 'x'menunjukkan bilangan hexa kalau misal 0b11110000 'b' menunjukkan bilangan biner

#endasm

#include <lcd.h> // menyertakan library fungsi/routin LCD #include <stdio.h> // menyertakan library stdio

#include <mega16.h> // menyertakan library IC ATMEGA16 #include <delay.h> // menyertakan fungsi delay

#define PORT_KEY PORTC // definisi PORTC sebagai PORT keypad #define PIN_KEY PINC //

#define INIT_TIMER0 TCNT0=200 // definisi inisialisasi TIMER

#define sw_up E==0x10 // definisi tombol up E==0x10 merupakan data jika tombol up ditekan

#define sw_down E==0x1A // definisi tombol down E==0x1A merupakan data jika tombol down ditekan

#define ent E==0x13 // definisi tombol ent E==0x13 merupakan data jika tombol ent ditekan

#define can E==0x11 // definisi tombol can E==0x11 merupakan data jika tombol can ditekan

#define cor E==0x0A // definisi tombol cor E==0x0A merupakan data jika tombol cor ditekan

#define mtr_dir PORTD.0 // definisi PIN direction/pemutar balik motor di PORTD.0

#define mtr_en PORTD.1 // definisi PIN on/off motor di PORTD.1 #define encoder PINB.0 // definisi masukan encoder di PINB.0

char Tulisan[]=" TUGAS AKHIR "; // Tulisan yang akan ditampilkan

char Tulisan2[]="ALAT PENGGULUNG KUMPARAN "; char Tulisan3[]=" EMMANUEL 02.50.0029 ";

char *P_T; // deklarasi pointer pada data string yang akan ditampilkan satu per satu * menunjukan penglamatan tidak langsung

unsigned char i; // deklarasi variable i bertype unsigned char yaitu mempunyai jangkauan data 0 sampai 255

//}

unsigned int jml_lilit,ribuan,ratusan,puluhan,satuan; // deklarasi variable yang digunakan selama program yang bertype int mempunyai jangkauan data 0 sampai 65535

unsigned char dataA,dataB,conter; unsigned char E,D;

char buf[16]; // deklarasi variable buffer string yang akan ditampilkan ke LCD

char buffer[16]; // 16 menunjukan jumlah karakter yang bisa disimpan sementara

void scan_baris (void); // deklarasi fungsi scan_baris pada keypad void scan_kolom (void); // deklarasi fungsi scan_kolom pada keypad

typedef unsigned char byte;

/* table for the user defined character

arrow that points to the top right corner */

(2)

flash byte char0[8]={

0b1100000, // pembuatan karakter baru di LCD ini merupakan data karakter LCD yang berupa kursor

0b0011000, // 0b0000110, // 0b1111111, 0b1111111, 0b0000110, 0b0011000, 0b1100000};

void define_char(byte flash *pc,byte char_code) //fungsi definisi karakter baru yang dibuat

{

byte i,a;

a=(char_code<<3) | 0x40; // penulisan data biner ke DDRAM LCD

for (i=0; i<8; i++) lcd_write_byte(a++,*pc++); }

unsigned char scan_keypad(void) // fungsi/subrutin saning keypad

{

unsigned char C;

scan_baris(); // panggilan scan baris scan_kolom(); // panggilan scan kolom

C=dataA+dataB; // variable c diisi dengan penjumlahan data A+data B //if (C==0x0a) C=0;

return C; }

void scan_kolom (void) {

DDRC=0x0F; // setting MSB PORTC sebagai input LSB output PORTC=0xF0; // pul up pada MSB PORTC

delay_us(50); // panggil fungsi delay 50 mikro S

if (~PINC&16) // jika kondisi data not PINC di AND kan dengan data 16 maka dataB diisi 0

dataB=0; else if (~PINC&32) dataB=1; else if (~PINC&64) dataB=2; else if (~PINC&128) dataB=9;

else // jika kondisi tidak sama dengan kondisi diatas maka dataB diisi dengan 3

dataB=3; } void scan_baris(void) { DDRC=0xF0; PORTC=0x0F; delay_us(50); if (~PINC&1) dataA=1; Perpustakaan Unika

(3)

else if (~PINC&2) dataA=4; else if (~PINC&4) dataA=7; else if (~PINC&8) dataA=17; else dataA=20; } void RFID() {

void tampil (unsigned char masukan) // fungsi tampil (membaca input keypad) { if (masukan==0x12)masukan=0; // jika data masukan = 0x12 maka

masukan di nolkan

}

void tampil2 (unsigned char masukan) { if (masukan==0x12)masukan=0;

sprintf(buf,"%i",masukan); // cetak data masukan ke LCD lcd_puts(buf);

switch (conter){ // counter penekana tombol

case 0: satuan=masukan;break; // jika `1 kali satuan = masukan case 1: puluhan=satuan,satuan=masukan;break;

case 2: ratusan=puluhan,puluhan=satuan,satuan=masukan;break;

case 3: ribuan=ratusan;ratusan=puluhan,puluhan=satuan,satuan=masukan;break; }

conter++; // conter penekanabn increment }

void about() // fungsi about ( judl TA dll ) { //#asm ("cli");

//while(1){

lcd_clear(); /// kosongkan layar LCD

lcd_gotoxy(0,0); // koordinat karaktr awal di 0,0

P_T=Tulisan; // variable P_T diisi dengan array Tulisan for (i=0;i<15;i++) // perulangan 16 kali ==> panjang layar LCD

{lcd_putchar(*P_T); // tampilkan karakter ke lcd yang ditunjukan pointrer variabl P_T

P_T++; // variabl P_T increment

delay_ms(30);if (E==0x13){ goto akhir;}} // tunda 30 ms jika E=0x13 lompat ke labe; akhir

delay_ms(500); lcd_clear(); lcd_gotoxy(0,0); P_T=Tulisan2; for (i=0;i<31;i++) {lcd_putchar(*P_T); P_T++;

delay_ms(30);if (E==0x13){ goto akhir;}} delay_ms(500); lcd_clear(); lcd_gotoxy(0,0); P_T=Tulisan3; for (i=0;i<31;i++) {lcd_putchar(*P_T); Perpustakaan Unika

(4)

P_T++;

delay_ms(30);if (E==0x13){ goto akhir;}} akhir: delay_ms(500); } void hitung(){ jml_lilit=ribuan*1000+ratusan*100+puluhan*10+satuan; } // perhitungan jmlh lilitan yg diinput keypad

interrupt [TIM0_OVF] void timer0_int(void) // fungsi interrup timer { INIT_TIMER0; // inisialisasi TIMER0 D=scan_keypad(); // D diisi scan_keypad ( variable fungsi ) delay_us(10);

E=scan_keypad();

if (E!=23) // jika E tidak sma dengan 23 data waktu keypad tidak ditekan

if (E!=D) // jika Etdak sma dengan D tampil(E); // masukan E ke fungsi tampil }

void steper(unsigned int i) //inputan dari perputaran encoder { unsigned int a;

a=i%8;

switch (a){ // baca var a

case 0: PORTD.4=1;PORTD.5=0; //jika 0 ==>PD.4 diisi 1 dan PD.5 diisi 0 PORTD.6=0;PORTD.7=0; break; case 1: PORTD.4=0;PORTD.5=1; PORTD.6=0;PORTD.7=0; break; case 2: PORTD.4=1;PORTD.5=0; PORTD.6=0;PORTD.7=0; break; case 3: PORTD.4=0;PORTD.5=1; PORTD.6=0;PORTD.7=0; break; case 4: PORTD.4=0;PORTD.5=0; PORTD.6=1;PORTD.7=0; break; case 5: PORTD.4=0;PORTD.5=0; PORTD.6=0;PORTD.7=1; break; case 6: PORTD.4=0;PORTD.5=0; PORTD.6=1;PORTD.7=0; break; case 7: PORTD.4=0;PORTD.5=0; PORTD.6=0;PORTD.7=1; break; } } void motor_stop() { mtr_dir=0; // Perpustakaan Unika

(5)

mtr_en=0; PORTD=0x00;} void motor_rewind() { mtr_dir=0; mtr_en=1;} void motor_release() { mtr_dir=1; mtr_en=1;}

void run_rewind(unsigned int inputan) // fungsi run rewind dengan jumlah input di inputan

{ unsigned int putaran=0; //variabl itung putaran

motor_rewind(); // fungsi untuk mnjalankan mtr rewind lcd_clear();

lcd_gotoxy(0,0);

lcd_putsf("JUMLAH LILITAN"); // cetak ke lcd kata dlam kurung lcd_gotoxy(0,1);

lcd_putsf("READ=");

while (putaran<inputan){ // perulangn jika putarn<inputan if (encoder==0) // jika sensr encoder = 0 maka { while (encoder==0) // debouncng encoder

{delay_ms(1);}

putaran++; // putaran increment }

steper(putaran); // putar lcd_gotoxy(5,1);

sprintf(buffer,"%i",putaran); // cetak itungann putaran lcd_puts(buffer);

}

// kalo putaran sudah sama dengan inputan maka

motor_stop(); // motor stop lcd_clear();

lcd_gotoxy(0,0); // mencetak karakter awal di koordinat 0,0 lcd_putsf("DONE"); lcd_gotoxy(0,1); lcd_puts(buffer); } void run_release()

{ unsigned int putaran=0; motor_release(); lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("JUMLAH LILITAN"); lcd_gotoxy(0,1); lcd_putsf("READ="); sprintf(buffer,"%i",0); #asm ("sei");

while (E!=0x0A){ // perulangan terus sampai data E sama dengan 0x0A if (encoder==0) // pembacaan encoder jika 0 maka

{ while (encoder==0) {delay_ms(1);} putaran++;

(6)

} //steper(putaran); lcd_gotoxy(5,1); sprintf(buffer,"%i",putaran); lcd_puts(buffer); } motor_stop(); lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("DONE"); lcd_gotoxy(0,1); lcd_puts(buffer); while (!can){;}; } void showMenu() { lcd_clear(); menu01: delay_ms(50); lcd_gotoxy(0,0); lcd_putsf(" REWIND "); lcd_gotoxy(0,1); lcd_putsf(" RELEASE ");

lcd_gotoxy(0,0); //kursor di REWIND

lcd_putchar(0); // cetak kursor di koordinat diats

if (ent) // jika ditekan enter maka { lcd_clear(); // layar kosong

goto setREWIND; } // dan lompat ke label seREWIND if (sw_down) { goto menu02; } if (sw_up) { goto menu03; } goto menu01; menu02: delay_ms(50); lcd_gotoxy(0,0); lcd_putsf(" REWIND "); lcd_gotoxy(0,1); lcd_putsf(" RELEASE ");

lcd_gotoxy(0,1); //kursor di RELEASE lcd_putchar(0); if (ent) { lcd_clear(); goto setRELEASE; } if (sw_up) { goto menu01; } if (sw_down) { goto menu03; } Perpustakaan Unika

(7)

goto menu02; menu03: delay_ms(50); lcd_gotoxy(0,0); lcd_putsf("EXIT");

lcd_gotoxy(0,0); //kursor di EXIT lcd_putchar(0); if (ent) { lcd_clear(); goto EXIT; } if (sw_up) { goto menu02; } if (sw_down) { goto menu01; } goto menu03; setREWIND: lcd_clear();

while (ent){ // debouncing untuk penekanan tombol enter delay_ms(1);} lcd_gotoxy(0,0); lcd_putsf("INPUT JML LILIT "); lcd_gotoxy(0,1); lcd_putsf("WRITE="); _lcd_ready(); _lcd_write_data(0x0d); #asm("cli");conter=0; RWND: if (ent){ lcd_clear(); lcd_gotoxy(0,0);

lcd_putsf("REWIND OR NOT?"); // putsf itu mencetak karakter yang data karakternya disimpan di memori flash

hitung(); // panggil fungsi kitung ==> penghitungan masukan keypad ke bilangan lcd_gotoxy(0,1); sprintf(buf,"%i lilitan",jml_lilit); lcd_puts(buf); delay_ms(500); E=0;#asm ("sei"); goto go_rewind; }

if (cor){ #asm ("sei");ribuan=0;ratusan=0;puluhan=0;satuan=0; goto setREWIND;}

if (can) { lcd_clear(); #asm ("sei"); goto menu01;} D=scan_keypad();

delay_ms(100); E=scan_keypad();

if (E!=23) /// desimal langsung angka , hexa depanya 0x , biner 0b if (E!=D) if (E!=0x10) if (E!=0x11) if (E!=0x13) Perpustakaan Unika

(8)

if (E!=0x1A) if (E!=0x0D) tampil2(E); goto RWND; setRELEASE: lcd_clear(); delay_ms(100); lcd_gotoxy(0,0); lcd_putsf("RELEASE OR NOT? "); delay_ms(100); RLES: if (ent) { delay_ms(500);#asm ("sei"); E=0;goto go_release; } //run_release();PORTD=0x00;

if (can){ lcd_clear(); #asm ("sei");goto menu02;} // #asm script untuk mengeset global interupt

goto RLES;

go_rewind:

if (ent){ run_rewind(jml_lilit);} if (cor) {goto setREWIND;}

if (can) { goto menu01;} /*D=scan_keypad(); delay_ms(100); E=scan_keypad(); if (E!=23) if (E!=D) if (E!=0x10) if (E!=0x11) if (E!=0x13) if (E!=0x1A) if (E!=0x0D) tampil(E);*/ goto go_rewind; go_release: if (ent){run_release(); } if (can){goto menu02;} goto go_release; EXIT: lcd_clear(); } void main() { PORTD=0x00;

DDRD=0xff; // Mengeset PORTD sebagai output PORTB=0x00;

DDRB=0x00; // Mengeset PORTB sebagai input

(9)

TCCR0=0x03; // Timer/Counter 0 initialization INIT_TIMER0; // Clock source: System Clock OCR0=0x00; // Clock value: 172.800 kHz // Mode: Normal top=FFh

TIMSK=0x01; // Timer(s)/Counter(s) Interrupt(s) initialization

lcd_init(16); // inisialisasi lcd yang dipakai 16 menunjukkan jumlah kolom define_char(char0,0); //definisi karakter lcd buatan sendiri yakni kursor motor_stop(); //routin motor stop

delay_ms(1000); //delay 1 detik

#asm("sei"); //set global interrupt awal:

E=0;

about(); //pemanggilan fungsi/routin about yakni tampilan awal yang ditampilkan di LCD

if (E==0x13){ goto menu;} // E==0x13 ==> data jika tombol enter ditekan,, jika enter ditekan maka program akan lompat ke label menu

goto awal; // jika keypad tidak ditekan maka program akan lompat ke label awal

menu:

lcd_clear(); // pemanggilan fungsi/routin membersihkan layar LCD lcd_gotoxy(0,0); // penentuan posisi awal kursor angka pertama

menunjukan baris dan angka kedua menunjukan kolom

lcd_putsf("STANDBY"); // menampilkan tulisan STANDBY

while (E!=0x0D){;} // data tombol MEN , jika tombol menu tidak

ditekan maka program akan berputar disini terus jika MEN ditekan maka program akan lanjut kebawah

lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("MENU");

while (E!=0x11){;} // data tombol CAN , jika tombol menu tidak ditekan maka program akan berputar disini terus jika MEN ditekan maka program akan lanjut kebawah

showMenu(); // pemanggilan fungsi showMenu;

goto awal; // program akan berulang ke label awal }

Referensi

Dokumen terkait

yang dimana investor akanmemilik portofolio optimal. Model ini mereduksi jumlah estimasi angka yang dibutuhkan untuk sebuah portofolio sekutitas. Dalam penelitian

Buku ini terdiri dari tujuh bab, yakni: Bab Pertama menelaah filsafat sebagai awal pemikiran, menelaah tentang awal mula filsafat, dialektika filsafat dan peradaban

Adapun indikator dan nilai SPM serta batas waktu pencapaian SPM bidang lingkungan hidup secara nasional untuk tiga jenis pelayanan dasar yang telah ditetapkan dalam Peraturan

Alat penelitian berupa kuisioner yang telah diuji coba. Pertanyaan dalam kuisioner berupa kombinasi pertanyaan tertutup dan terbuka, yang meliputi: frekuensi mengalami

TAPM yang beijudul Pengembangan Perangkat Pembelajaran Matematika Berkerangka Problem Based Learning Materi Bangun Ruang Sisi Datar Untuk Siswa Kelas VIII SMP adalah basil karya

PelaksanaanTugas Indikator Di Kelas Di Luar Kelas Tugas I/ Tutorial 3  Menjelaskan perbedaan perkembangan anak yang bersifat normatif dan nonnormatif  Menangani cara

Selain itu daging kelinci (yang disebut juga sebagai daging putih) memiliki tingkat keempukan yang lebih baik dibandingkan dengan daging merah.. Hal ini dikarenakan seratnya

X merupakan perusahaan yang cukup besar, maka diperlukan adanya alat-alat tersebut untuk mencegah terjadinya kecurangan dalam pencatatan jam kerja maupun untuk mendukung