Anda di halaman 1dari 17

MODUL 4 SEVEN SEGMENT, KEYPAD, DAN LCD

Muhammad Hanif (13214147)


Asisten : Dinan Fakhri (13213047)
Tanggal Percobaan :10/04/2017
EL3214-Praktikum Sistem Mikroprosesor
Laboratorium Dasar Teknik Elektro - Sekolah Teknik Elektro dan Informatika ITB

Abstrak dijalankan secara bergantian (dengan frekuensi


tertentu) melalui jumlah port yang minimum.
Dalam modul ini, praktikan akan memahami lebih lanjut
datasheet ATMega8535 dengan membuat aplikasi Pada praktikum ini akan dipelajari teknik scanning
menggunakan seven segment, keypad, dan LCD. Ada tiga untuk menjalankan dua buah seven segment pada
tugas yang dilakukan. Keypad digunakan sebagai masukan Trainer Board. Aturan untuk menjalankan kedua
dengan menghubungkan port I/P S KEY. Adapun seven seven segment tersebut adalah sebagai berikut:
segment dan LCD digunakan untuk menampilkan keluaran
Untuk menjalankan seven segment 1 (berlabel
yang diharapkan. Pertama adalah melakukan scanning seven
DIGIT1) maka pin DO1 (dari Port ”I/P S KEY”)
segment dengan keluaran berupa angka yang ditampilkan
harus diberi logika “0”; sedangkan untuk dapat
pada seven segment sesuai masukan baik yang diberikan
menjalankan seven segment 2 (DIGIT1) maka pin
melalui source code maupun tombol keypad. Kedua adalah
DO2 (dari port ”I/P S KEY”) harus diberi logika “0”.
melakukan scanning keypad dimana keluaran baik pada
output LED display maupun seven segment sesuai dengan Dengan demikian, untuk menyalakan masing-
masukan yang diberikan melalui keypad. Ketiga adalah masing seven segemen tersebut, diatur logika ”0”
membuat sebuah program yang akan menampilkan angka untuk pin D01 dan D02 secara bergantian. Selain
sesuai masukan keypad pada LCD, dan setiap setelah dua aturan di atas, untuk menampilkan angka (0 –
masukan empat kali, layar akan bergeser ke kiri sebanyak 2 9) dan titik (.) dengan seven segment pada Trainer
karakter. Board tersebut yaitu dengan mengatur logika pin
dari port ”Data 7S”. Rangkaian seven segment
Kata kunci: keypad, LCD, seven segment.
tesebut berisfat active high (logika “1” = nyala,
1. PENDAHULUAN logika “0” = padam), dengan urutan dari MSB ke
LSB adalah DP (titik), G, F, E, D, C, B, A.
ATMega8535 adalah sebuah sistem minimum yang
memiliki tiga alamat memori pada I/O nya. 2.2 SCANNING KEYPAD
ATMega jenis ini mempunyai internal clock
Pada prinsipnya, teknik scanning pada keypad
bawaan yang dapat diatur sesuai kebutuhan
mirip dengan teknik scanning pada seven segmen.
dengan melakukan pengaturan fuse agar program
Namun, pada scanning keypad, selain dilakukan
dapat berjalan dengan baik. Dengan mempelajari
pengaturan logika pin secara bergantian, juga
hal ini, diharapkan praktikan dapat memahami
dilakukan secara bergantian
secara lebih mendalam dari system mikroprosesor
pemeriksaan/pembacaan pin oleh mikrokontroler
yang akan sangat banyak aplikasinya dalam dunia
untuk mengetahui tombol keypad mana yang
elektornika ini pula.
sedang ditekan.
Adapun tujuan dari praktikum ini adalah sebagai
DT-51 Trainer Board memiliki keypad 2x2 dengan
berikut :
kondisi sebagai berikut:
1. Praktikan memahami datasheet
 Pin penerima output dari mkrokontroler adalah
ATMega8535
pin KBO1 (dari port “I/P S KEY”) dan KBO2
2. Praktikan mampu membuat aplikasi (dari port “I/P S KEY”) yang bersifat active low.
menggunakan seven segment, keypad, dan
LCD.  Sedangkan pin yang memberikan input pada
mikrokontroler adalah KBI1 (dari port “I/P S
2. STUDI PUSTAKA KEY”) dan KBI2 (dari port “I/P S KEY”) yang
bersifat active low.
2.1 SCANNING SEVEN SEGMENT Berikut ini adalah tahap-tahap untuk menjalankan
Salah satu teknik untuk menjalankan perangkat keypad 2x2:
Seven Segment adalah teknik scanning. Dengan  Pertama, berikan logika “0” pada pin KBO1
teknik scanning ini, sejumlah seven segmen dapat (sementara pin KBO2 berlogika “1”). Lalu,
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 1
periksa logika dari data input KBI1. Jika logika
Mengatur power supply pada 9V
pin KBI1 berubah dari “1” ke “0” berarti KEY1
telah ditekan (perhatikan rangkain listriknya). Menghubungkan ISP Training Board dengan kabel
downloader
 Selanjutnya KBI2 diperiksa; jika logikanya
Menghubungkan PORTA dengan DATA 7S, PORTD
berubah dari “1” ke “0” berarti berarti KEY3 dengan I/P S KEY
telah ditekan.
Mengatur sumber clock eksternal 7372800Hz
 Kedua, berikan logika “0” pada KBO2
(sementara pin KBO1 berlogika “1”). Kemudian Membuat source code pada WinAVR
tiap-tiap data input-nya diperiksa, seperti
pemeriksaan pada tahap pertama. Mengubah target pada makefile sesuai nama file
sourcecode

2.3 LCD Melakukan kompilasi source code

LCD yang digunakan dalam praktikum ini adalah


LCD yang berbasis pada HD44780 LCD controller. Gambar 3-2 Diagram kerja tugas 4B
Percobaan tentang LCD akan dilakukan dengan
menggunakan library beserta demo project-nya.
Mengatur power supply pada 9V
Hal pertama yang harus diperhatikan dalam
menggunakan library tersebut untuk percobaan Menghubungkan ISP Training Board dengan kabel
downloader
pada praktikum ini adalah bahwa pada praktikum
ini LCD dijalankan dengan menggunakan Port C. Menghubungkan PORTC dengan LCD, PORTD dengan
I/P S KEY
Sementara pada library tersebut, LCD dijalankan
dengan Port D. Pengubahan dari Port D ke Port C Mengatur sumber clock eksternal 7372800Hz
dilakukan dengan mengedit 4 baris perintah pada
file lcd_lib.h menjadi sebagai berikut: Membuat source code pada WinAVR

#define LDP PORTC Mengubah target pada makefile sesuai nama file
sourcecode
#define LCP PORTC
#define LDDR DDRC Melakukan kompilasi source code

#define LCDR DDRC


Gambar 3-3 Diagram kerja tugas 4C
3. METODOLOGI
4. HASIL DAN ANALISIS
Alat dan komponen yang digunakan pada modul
ini adalah sebagai berikut. 4.1 TUGAS 4A: SCANNING SEVEN SEGMENT
a. PC dengan WinAVR Tugas 4A1
b. Kit Praktikum (termasuk USART) Pada tugas pertama modul empat ini, kita akan
c. Power Supply mengaplikasikan scanning seven segment dengan
menjalankan source code dari modul dan
d. Kabel-kabel mengamati keluaran yang terjadi pada seven
segment. Hasil yang diperoleh sudah sesuai.
Mengatur power supply pada 9V Fungsi SSegmen akan menyalakan bit yang sesuai
pada seven segment sesuai angka yang akan
Menghubungkan ISP Training Board dengan kabel ditampilkan, yaitu 7.2. Kedua seven segment
downloader
memang terlihat menyala bersamaan secara kasat
Menghubungkan PORTA dengan DATA 7S, PORTD
dengan I/P S KEY
mata, tetapi sebenarnya keduanya menyala
bergantian dalam interval waktu yang sangat cepat.
Mengatur sumber clock eksternal 7372800Hz Pada program, PORTD melakukan proses scanning
seven segment yaitu menentukan seven segment
Membuat source code pada WinAVR mana yang akan dinyalakan. Perlu diingat bahwa
seven segment bersifat active low.
Mengubah target pada makefile sesuai nama file
sourcecode
Adapun hasil yang didapat serta flowchart pada
Melakukan kompilasi source code tugas ini adlaah sebagai berikut :

Gambar 3-1 Diagram kerja tugas 4A

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 2


Gambar 4-1 Flowchart program tugas 4A1

Gambar 4-2 Ilustrasi keluaran tugas 4A1


Tugas 4A2
Seven segment akan menunjukkan angka yang
berbeda setiap detiknya yaitu 50, 40, 30, 20, 10,
kemudian F.F. berkedip 3 kali kemudian mati.
Waktu yang dibutuhkan seven segment untuk
menampilkan dua digit sebelum berganti angka
sekarang bertambah menjadi 1 detik karena
kondisi seven segment diulang 500 kali.

Gambar 4-4 Ilustrasi keluaran tugas 4A2

4.2 TUGAS 4B:


Tugas 4B1
Tugas kedua adalah scanning keypad. Hasil yang
diperoleh sesuai, dimana saat keypad 1 ditekan bit
0 LED akan menyala, keypad 2 ditekan maka bit 0,1
yang akan menyala dan seterusnya sampai keypad
4. Input berupa keypad 2x2. Scanning dilakukan
per kolom. Jika kolom pertama mati maka keluaran
akan disesuaikan untuk masukan key1. Jika kolom
kedua yang mati, maka keluaran akan disesuaikan
untuk masukan key4.

Gambar 4-3 Flowchart tugas 4A2

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 3


Gambar 4-5 Keluaran tugas 4B1

Gambar 4-7 Keluaran tugas 4B2

Gambar 4-6 Flowchart program tugas 4B1


Tugas 4B2
Pada gambar terlihat keluaran tugas B2, dimana
tampilan awal seven segment adalah 00 kemudian
mengikuti masukan yang diberikan yaitu 11 jika
key1 ditekan, 22 untuk key2, 33 untuk key3, dan 44
untuk key4. Proses scanning sama seperti tugas
sebelumnya, tetapi sekarang keluaran ditampilkan
pada seven segment. Kedua seven segment dapat
menampilkan kedua digit yang diinginkan secara
bersamaan karena bernilai sama.

Gambar 4-8 Flowchart program tugas 4B2

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 4


4.3 TUGAS 3C:
Tugas 4C1
Tugas terakhir adalah menggunakan LCD.
Pertama, demo lib AVR dilakukan. Hasil yang
diperoleh adalah karakter yang dideklarasikan
pada source code yaitu pada gambar sebagai
berikut. Terdapat beberapa prosedur yang dapat
langsung digunakan yaitu:
LCDGoToXY untuk menentukan posisi karakter
LCDSendChar untuk menampilkan karakter yang
diinginkan
LCDClr untuk mengosongkan layar LCD
Tugas 4C2
Tugas C2 adalah menggunakan keypad sebagai
input. Key1 akan memberikan keluaran &. Key2
akan memberikan keluaran 5. Key3 akan
memberikan keluaran 7 dan key4 akan
memberikan keluaran a.
Gambar 4-10 Flowchart program 4C2
***Tekan Tombol Scanning Keypad***
Percobaan LCD
143
Input key1
Setelah 4 input pertama
& rcobaan LCD
2770
Input key4
Setelah 4 input kedua
a obaan LCD
3781
Input key2
Gambar 4-11 Keluaran tugas 4C3 dan 4C4
5 Tugas 4C3

Input key3 Tugas C3 adalah membuat program agar LCD


menampilkan keluaran angka sesuai input keypad
7 yang diberikan, dan layar akan bergeser 2 karakter
ke kiri setiap empat kali input.
Gambar 4-9 Keluaran tugas 4C2

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 5


3. Pada mode pin high impedance,

Gambar 4-12 Flowchart tugas 4C3


Tugas 4C4
Tugas C4 mirip dengan tugas C3, tetapi input
sekarang berupa keypad 4x4.
pull-up resistor perlu digunakan untuk
membuat pin menjadi input.

5. KESIMPULAN
Dari percobaan ini didapat kesimpulan sebagai
berikut :
1. Dalam melakukan problem solving
dengan ATMega8535, kita harus terlebih
dahulu memahami datasheetnya terlebih
dahulu sehingga kita bisa mendesain
solusi denngan benar
Gambar 4-13 Flowchart tugas 4C4
2. Dalam melakukan problem solving, kita
1. Teknik scanning digunakan saat memakai dapat memanfaatkan penggunaan
seven segment dan keypad untuk mikrokontroler (dalam hal ini ATMega)
meminimalisir penggunaan PORT ketika dan dikombinasikan dengan penggunaan
menentukan masukan mana yang diterima dan LCD, Seven segment, maupun keypad
keluaran apa yang diharapkan. yang dapat digunakan sebagai output dan
2. Scanning keypad dilakukan per kolom sehingga input dengan menghubungkannya ke
saat keypad dalam satu baris ditekan tidak akan PORT tertentu. Metode scanning dapat
berpengaruh terhadap keluaran. Adapun jika dgunakan untuk membuat seven segment
keypad dalam satu kolom ditekan, keypad menyala bergantian dengan sangat cepat.
diatas tombol yang ditekan akan mati yaitu Scanning pada keypad juga dapat
mengikuti keadaan keypad yang ditekan karena dilakukan per kolom untuk membaca
bersifat seri. masukannya. Dan kita juga bisa
menggunakan LCD dengan bantuan
library yang sudah ada untuk mendesain
sesuai yang kita inginkan.

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 6


DAFTAR PUSTAKA
[1] Hutabarat, Mervin T. dkk. Modul Praktikum
Sistem Mikroprosesor. Laboratorium Dasar
Teknik Elektro. Bandung, 2017.

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 7


LAMPIRAN
tugas4a1.c
#include <avr/io.h>
#define F_CPU 7372800UL
#include <util/delay.h>

char angka;
char kodehex;
unsigned int SSegmen(char angka);

int main(void)
{
DDRA = 0xFF;
DDRD = 0XFF;

while (1)
{
PORTD = (0<<PD7) | (1<<PD6);
PORTA = SSegmen('7') | (1<<7);
_delay_ms(1);
PORTD = (1<<PD7) | (0<<PD6);
PORTA = SSegmen('2');
_delay_ms(1);
}
return 0;
}

unsigned int SSegmen(char angka)


{
switch (angka)
{
case '0' :
kodehex = 0x3f;
break;
case '1' :
kodehex = 0x06;
break;
case '2' :
kodehex = 0x5b;
break;
case '3' :
kodehex = 0x4f;
break;
case '4' :
kodehex = 0x66;
break;
case '5' :
kodehex = 0x6d;
break;
case '6' :
kodehex = 0x7d;
break;
case '7' :
kodehex = 0x07;
break;
case '8' :
kodehex = 0x7f;
break;
case '9' :
kodehex = 0x6f;
break;
}
return kodehex;
}

tugas4a2.c
#include <avr/io.h>
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 8
#define F_CPU 7372800UL
#include <util/delay.h>

char angka;
char kodehex;
unsigned int SSegmen(int angka);

int main(void)
{
DDRA = 0xFF;
DDRD = 0XFF;
int i,j;

while (1)
{
for(i=5;i>0;i--)
{
for(j=0;j<500;j++)
{
PORTD = (0<<PD7) | (1<<PD6);
PORTA = SSegmen(i);
_delay_ms(1);
PORTD = (1<<PD7) | (0<<PD6);
PORTA = SSegmen(0) | (1<<7);
_delay_ms(1);
}
}

for(i=0;i<3;i++)
{
for(j=0;j<250;j++)
{
PORTD = (0<<PD7) | (1<<PD6);
PORTA = 0xF1;
_delay_ms(1);
PORTD = (1<<PD7) | (0<<PD6);
PORTA = 0xF1;
_delay_ms(1);
}
for(j=0;j<250;j++)
{
PORTD = (0<<PD7) | (1<<PD6);
PORTA = 0x00;
_delay_ms(1);
PORTD = (1<<PD7) | (0<<PD6);
PORTA = 0x00;
_delay_ms(1);
}
}
}
return 0;
}

unsigned int SSegmen(int angka)


{
switch (angka)
{
case 0 :
kodehex = 0x3f;
break;
case 1 :
kodehex = 0x06;
break;
case 2 :
kodehex = 0x5b;
break;
case 3 :
kodehex = 0x4f;
break;
case 4 :
kodehex = 0x66;
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 9
break;
case 5 :
kodehex = 0x6d;
break;
case 6 :
kodehex = 0x7d;
break;
case 7 :
kodehex = 0x07;
break;
case 8 :
kodehex = 0x7f;
break;
case 9 :
kodehex = 0x6f;
break;
}
return kodehex;
}

tugas4b1.c
#include <avr/io.h>
#define F_CPU 7372800UL
#include <util/delay.h>

int main(void)
{
DDRA = 0xFF;
PORTA = 0x00;
DDRD = (1<<PD4) | (1<<PD5);
SFIOR = (0<<PUD);

while (1)
{
PORTD = (1<<PD4) | (0<<PD5);
if (bit_is_clear(PIND, 0))
PORTA = 0b00000001;
_delay_ms(50);
if (bit_is_clear(PIND, 1))
PORTA = 0b00001111;
_delay_ms(50);

PORTD = (0<<PD4) | (1<<PD5);


if (bit_is_clear(PIND, 0))
PORTA = 0b00000011;
_delay_ms(50);
if (bit_is_clear(PIND, 1))
PORTA = 0b00000111;
_delay_ms(50);
}
return 0;
}

tugas4b2.c
#include <avr/io.h>
#define F_CPU 7372800UL
#include <util/delay.h>

char angka;
char kodehex;
unsigned int SSegmen(char angka);

int main(void)
{
DDRA = 0xFF;
DDRD = (1<<PD4) | (1<<PD5);
SFIOR = (0<<PUD);
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 1
0
// Keadaan awal
PORTD = (0<<PC7) | (1<<PC6);
PORTA = SSegmen('0');
_delay_ms(1);
PORTD = (1<<PC7) | (0<<PC6);
PORTA = SSegmen('0');
_delay_ms(1);
while (1)
{
PORTD = (1<<PD4) | (0<<PD5);
if (bit_is_clear(PIND, 0))
{
PORTA = SSegmen('1');
_delay_ms(1);
PORTA = SSegmen('1');
_delay_ms(1);
}
if (bit_is_clear(PIND, 1))
{
PORTA = SSegmen('4');
_delay_ms(1);
PORTA = SSegmen('4');
_delay_ms(1);
}

PORTD = (0<<PD4) | (1<<PD5);


if (bit_is_clear(PIND, 0))
{
PORTA = SSegmen('2');
_delay_ms(1);
PORTA = SSegmen('2');
_delay_ms(1);
}
if (bit_is_clear(PIND, 1))
{
PORTA = SSegmen('3');
_delay_ms(1);
PORTA = SSegmen('3');
_delay_ms(1);
}
}
return 0;
}

unsigned int SSegmen(char angka)


{
switch (angka)
{
case '0' :
kodehex = 0x3f;
break;
case '1' :
kodehex = 0x06;
break;
case '2' :
kodehex = 0x5b;
break;
case '3' :
kodehex = 0x4f;
break;
case '4' :
kodehex = 0x66;
break;
case '5' :
kodehex = 0x6d;
break;
case '6' :
kodehex = 0x7d;
break;

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 11


case '7' :
kodehex = 0x07;
break;
case '8' :
kodehex = 0x7f;
break;
case '9' :
kodehex = 0x6f;
break;
}
return kodehex;
}

tugas4c1.c
//*****************************************************************************
//
// File Name : 'main.c'
// Title : LCD demo
// Author : Scienceprog.com - Copyright (C) 2007
// Created : 2007-03-29
// Revised : 2007-08-28
// Version : 1.0
// Target MCU : Atmel AVR series
//
// This code is distributed under the GNU Public License
// which can be found at http://www.gnu.org/licenses/gpl.txt
//
//*****************************************************************************

#include <avr/io.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include "lcd_lib.h"

//Strings stored in AVR Flash memory


const uint8_t LCDwelcomeln1[] PROGMEM="AVR LCD DEMO\0";
const uint8_t LCDprogress[] PROGMEM="Loading...\0";
const uint8_t LCDanimation[] PROGMEM=" LCD animation \0";

// additional custom LCD characters


const uint8_t backslash[8] PROGMEM=
{
0b00000000,//back slash
0b00010000,
0b00001000,
0b00000100,
0b00000010,
0b00000001,
0b00000000,
0b00000000
};
//delay 1s
void delay1s(void)
{
uint8_t i;
for(i=0;i<100;i++)
{
_delay_ms(10);
}
}
//demonstration of progress bar
void progress(void)
{
LCDclr();
CopyStringtoLCD(LCDwelcomeln1, 3, 0);
delay1s();
LCDclr();
CopyStringtoLCD(LCDprogress, 3, 0);

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 12


for(uint8_t i=0;i<255;i++)
{
_delay_ms(10);
LCDGotoXY(0, 1);
LCDprogressBar(i, 255, 16);
}
}
//demonstration of animation
void demoanimation(void)
{
LCDclr();
LCDdefinechar(backslash,0);
CopyStringtoLCD(LCDanimation, 0, 0);
for(uint8_t i=0;i<3;i++)
{
LCDGotoXY(8, 1);
LCDsendChar(0);
delay1s();
LCDGotoXY(8, 1);
LCDsendChar('-');
delay1s();
LCDGotoXY(8, 1);
LCDsendChar('/');
delay1s();
LCDGotoXY(8, 1);
LCDsendChar('|');
delay1s();
LCDGotoXY(8, 1);
LCDsendChar(8);//backslash
delay1s();
LCDGotoXY(8, 1);
LCDsendChar('-');
delay1s();
LCDGotoXY(8, 1);
LCDsendChar('/');
delay1s();
LCDGotoXY(8, 1);
LCDsendChar('|');
delay1s();
}
}

int main(void)
{
LCDinit();//init LCD bit, dual line, cursor right
LCDclr();//clears LCD
while(1)//loop demos
{
progress();
delay1s();
demoanimation();
}
return 0;
}

tugas4c2.c
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include "lcd_lib.h"

// strings stored in AVR Flash Memory


const uint8_t LCDtombol1[] PROGMEM="***Tekan Tombol Scanning Keypad***\0";

// delay 1s
void delay1s(void)
{
uint8_t i;
for (i=0; i<100; i++)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 13


{
_delay_ms(10);
}
}

int main(void)
{
LCDinit(); // initialize LCD bit, dual line, cursor right
LCDclr(); // clear LCD

DDRA = 0xFF;
PORTA = 0x00;
DDRD = (1<<PD4) | (1<<PD5) | (1<<PC7) | (1<<PC6);
SFIOR = (0<<PUD);

delay1s();
LCDGotoXY(0, 1);
delay1s();

while (1) // loop demos


{
CopyStringtoLCD(LCDtombol1, 0, 0);
LCDshiftRight(1);

PORTD = (1<<PD4) | (0<<PD5) | (1<<PC7) | (1<<PC6);


if (bit_is_clear(PIND, 0))
{
LCDclr();
LCDGotoXY(8, 1);
LCDsendChar('&');
delay1s();
LCDclr();
}
_delay_ms(50);

if (bit_is_clear(PIND, 1))
{
LCDclr();
LCDGotoXY(8, 1);
LCDsendChar('a');
delay1s();
LCDclr();
}
_delay_ms(50);

PORTD = (0<<PD4) | (1<<PD5) | (1<<PC7) | (1<<PC6);


if (bit_is_clear(PIND, 0))
{
LCDclr();
LCDGotoXY(8, 1);
LCDsendChar('5');
delay1s();
LCDclr();
}
_delay_ms(50);

if (bit_is_clear(PIND, 1))
{
LCDclr();
LCDGotoXY(8, 1);
LCDsendChar('7');
delay1s();
LCDclr();
}
_delay_ms(50);
}
return 0;
}

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 14


tugas4c3.c
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include "lcd_lib.h"

// strings stored in AVR Flash Memory


const uint8_t LCDtombol1[] PROGMEM="Percobaan LCD\0";

// delay 1s
void delay1s(void)
{
uint8_t i;
for (i=0; i<100; i++)
{
_delay_ms(10);
}
}

int main(void)
{
LCDinit(); // initialize LCD bit, dual line, cursor right
LCDclr(); // clear LCD

DDRA = 0xFF;
PORTA = 0x00;
DDRD = (1<<PD4) | (1<<PD5) | (1<<PC7) | (1<<PC6);
SFIOR = (0<<PUD);

int posisi = 0;
int hitung = 1;

delay1s();
LCDGotoXY(0, 1);
delay1s();
CopyStringtoLCD(LCDtombol1, 0, 0);

while (1) // loop demos


{

PORTD = (1<<PD4) | (0<<PD5) | (1<<PC7) | (1<<PC6);


if (bit_is_clear(PIND, 0))
{
//LCDclr();
LCDGotoXY(posisi, 1);
LCDsendChar('1');
delay1s();
posisi++; hitung++;
//LCDclr();
}
_delay_ms(50);

if (bit_is_clear(PIND, 1))
{
//LCDclr();
LCDGotoXY(posisi, 1);
LCDsendChar('4');
delay1s();
posisi++; hitung++;
//LCDclr();
}
_delay_ms(50);

PORTD = (0<<PD4) | (1<<PD5) | (1<<PC7) | (1<<PC6);


if (bit_is_clear(PIND, 0))
{
//LCDclr();
LCDGotoXY(posisi, 1);
LCDsendChar('2');

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 15


delay1s();
posisi++; hitung++;
//LCDclr();
}
_delay_ms(50);

if (bit_is_clear(PIND, 1))
{
//LCDclr();
LCDGotoXY(posisi, 1);
LCDsendChar('3');
delay1s();
posisi++; hitung++;
//LCDclr();
}
_delay_ms(50);

if ((hitung%5)==0)
{
LCDshiftRight(2);
hitung = 1;
}
}
return 0;
}

tugas4c4.c
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include "lcd_lib.h"
//Strings stored in AVR Flash memory
const uint8_t LCDawal[] PROGMEM="Percobaan LCD\0";

int main(void)
{
static int count = 0;
LCDinit();//init LCD bit, dual line, cursor right
LCDclr();//clears LCD
DDRA=0xFF;
PORTA=0x00;
DDRD=0x00;
PORTD=0x0F;
SFIOR=(0<<PUD);
LCDGotoXY(0, 0);
CopyStringtoLCD(LCDawal, 0, 0);
LCDGotoXY(0, 1);
while(1)//loop demos
{

if (count >= 4) {
LCDshiftRight(2);
count = 0;
}

for (int i = 0x10; i != 0;) {


DDRD = i;
_delay_ms(1);

if (bit_is_clear(PIND,0)) {
if (i == 0x10)
LCDsendChar('1');
else if (i == 0x20)
LCDsendChar('4');
else if (i == 0x40)
LCDsendChar('7');
else if (i == 0x80)

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 16


LCDsendChar('*');
_delay_ms(200);

count++;
}

if (bit_is_clear(PIND,1)) {
if (i == 0x10)
LCDsendChar('2');
else if (i == 0x20)
LCDsendChar('5');
else if (i == 0x40)
LCDsendChar('8');
else if (i == 0x80)
LCDsendChar('0');
_delay_ms(200);

count++;
}

if (bit_is_clear(PIND,2)) {
if (i == 0x10)
LCDsendChar('3');
else if (i == 0x20)
LCDsendChar('6');
else if (i == 0x40)
LCDsendChar('9');
else if (i == 0x80)
LCDsendChar('#');
_delay_ms(200);

count++;
}

if (bit_is_clear(PIND,3)) {
if (i == 0x10)
LCDsendChar('A');
else if (i == 0x20)
LCDsendChar('B');
else if (i == 0x40)
LCDsendChar('C');
else if (i == 0x80)
LCDsendChar('D');
_delay_ms(200);
count++;
}

i=(i<<1);
}

}
return 0;
}

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 17