• Tidak ada hasil yang ditemukan

Interfacing. Materi 5: LCD and Keyboard Interfacing. Disusun Oleh: I Nyoman Kusuma Wardana

N/A
N/A
Protected

Academic year: 2021

Membagikan "Interfacing. Materi 5: LCD and Keyboard Interfacing. Disusun Oleh: I Nyoman Kusuma Wardana"

Copied!
47
0
0

Teks penuh

(1)

Interfacing

Materi 5: LCD and Keyboard Interfacing

Disusun Oleh:

(2)

Outline

• LCD Interfacing

• Keyboard Interfacing

• Workshop

(3)
(4)

LCD Interfacing

• LCD

mulai

saat ini telah banyak digunakan dan

mulai menggeser penggunaan LED (seven segment

atau multi segment yg lain) dgn bbrp alasan

berikut:

1.

Harga LCD yg mulai terjangkau

2.

Kemampuannya dlm menampilkan angka,

karakter, dan gambar

3.

Meringankan beban CPU  dlm me-refresh

tampilan

4.

Mudah dlm memprogram karakter & gambar

(5)

LCD Interfacing

• Beberapa jenis LCD:

2 x 40 character LCD

1 x 16 character LCD

(6)

LCD Interfacing

• Fungsi Pin LCD:

(7)

LCD Interfacing

VCC, VSS, VEE

• VSS tersambung ground sdgkan

VCC/VDD ke +5V

RS (Register Select)

• Jika RS = 0: memungkinakan

user mengirim perintah ke LCD

(misal clear)

• Jika RS = 1: memungkinkan

user mengirim data utk

(8)

LCD Interfacing

R/W (Read/Write)

• Memungkinkan user utk

menulis dan membaca

informasi

• R/W = 1 : membaca

• R/W = 0 : menulis

Enable

• Latch info dlm LCD

• Pulsa min 450ns diaplikasikan

ke LCD ketika mengirim data

(9)

LCD Interfacing

D0-D7

• 8-bit

data pin mengirim

dan membaca data

• Karakter ASCII : A-Z, a-z dan

0-9, dgn RS =1

• Antarmuka LCD pd AVR ada

2 cara:

• 8

-bit

• 4

-bit

(10)

LCD Interfacing

Sending Commands and Data to LCD

• Berikut langkah utk mengirim data dan

perintah pd LCD:

1. Inisialisasi LCD

2. Kirim brbagai

command

brdasarkn tabel di

atas

3. Kirim karakter yg akan ditampilkan ke LCD

• Langkah 2 dan 3 dpt dilakukan berulang kali

(11)

LCD Interfacing

Inisialisasi LCD

• Berdasarkan tabel LCD

command, Utk

menginisialisasi

8-bit LCD 5 x

7, diperlukan urutan perintah

berikut:

0x38

,

0x0E

,

0x01

• Setelah LCD di

power-up

tunggu sekitar 15 ms sblm

diinisialisasi

(12)

LCD Interfacing

Mengirim Data ke LCD

Langkah

2

nya sbb:

1. Utk mengirim data buat RS = 1 dan R/W = 0

2. Tempatkan data ke data pin (D0-D7)

3. Kirim pulsa high-to-low ke pin E (Enable) utk

mengaktifkan internal lacth pd LCD

4. Stelah mengirim data  tunggu 100µs utk

memberi ksempatan modul LCD menampilkan

data ke screen LCD

(13)

LCD Interfacing

Contoh Program utk mengirim Data:

void lcdData (unsigned char data)

{

LCD_DPRT = data; //kirim data ke data port LCD_CPRT |= (1<<LCD_RS); //RS = 1 utk data

LCD_CPRT &= ~(1<<LCD_RW); //RW = 0 utk write

LCD_CPRT |= (1<<LCD_EN); //EN = 1 utk pulsa H-to-L delay_us(1); //tunggu sebentar utk enable LCD_CPRT &= ~(1<<LCD_EN); //EN = 0 utk pulsa H-to-L delay_us(100); //tunggu sebentar utk enable }

(14)

LCD Interfacing

Contoh Program utk mengirim Command:

Kusuma Wardana - Interfacing 2013 14

void lcdCommand (unsigned char cmnd) {

LCD_DPRT = cmnd; //kirim command ke data port LCD_CPRT &= ~(1<<LCD_RS); //RS = 0 utk command

LCD_CPRT &= ~(1<<LCD_RW); //RW = 0 utk write

LCD_CPRT |= (1<<LCD_EN); //EN = 1 utk pulsa H-to-L delay_us(1); //tunggu sebentar utk enable LCD_CPRT &= ~(1<<LCD_EN); //EN = 0 utk pulsa H-to-L delay_us(100);

(15)
(16)

LCD Interfacing

Mengirim 4-bit Kode atau Data

• Pd bbrp kasus, akan lebih menguntungkan utk

mengirimkan data hanya 4-bit

• Hal ini utk menghemat penggunaan Pin

• Ingat, inisialisasi akan berbeda dr 8-bit

• Utk menginisialisasi  kirim scr berurutan: 33, 32

dan 28 (hex)

• Kita menggunakan high nibble

(17)
(18)

LCD Interfacing

• Utk menginisialisasi  kirim scr berurutan:

33, 32 dan 28 (hex)

• Ini utk mengatakan ke LCD bahwa mode yg

akan dipakai adlh 4-bit data

(19)

LCD Interfacing

(20)

LCD Interfacing

Timing Diagram

Kusuma Wardana - Interfacing 2013 20

(21)
(22)
(23)
(24)

LCD Interfacing

DD (Display Data) RAM address location:

• Dimana utk 20 x 2 LCD:

• XXXXXXXX

=

00000000

s/d

0100111

(line 1)

• XXXXXXXX

=

10000000

s/d

1100111

(line 2)

(25)

LCD Interfacing

(26)

LCD Interfacing

Contoh:

• Berapakah alamat dr kursor berikut jika

menggunakan LCD 20x4?

a) Line 1, kolom 1

b) Line 2, kolom 1

c) Line 3, kolom 2

d) Line 4, kolom 3

(27)

LCD Interfacing

Jawab:

a) 80

b) C0

c) 95

d) D6

Berapakah alamat dr kursor berikut jika menggunakan LCD 20x4?

a) Line 1, kolom 1 b) Line 2, kolom 1 c) Line 3, kolom 2 d) Line 4, kolom 3

(28)

LCD Programming in C

(29)

LCD Programming in C

• Buatlah program utk mengirim kalimat ke LCD

menggunakan 8-bit data dgn skematik berikut:

(30)
(31)

LCD Programming in C

#include

<mega16.h>

#include

<delay.h>

#define

LCD_DPRT PORTD //LCD data port

#define

LCD_DDDR DDRD //LCD data DDR

#define

LCD_DPIN PIND //LCD data Pin

#define

LCD_CPRT PORTC //LCD command Port

#define

LCD_CDDR DDRC //LCD command DDR

#define

LCD_CPIN PINC //LCD command Pin

#define

LCD_RS 0 //LCD RS

#define

LCD_RW 1 //LCD RW

(32)

LCD Programming in C

Subrutin utk pengiriman perintah (command)

Kusuma Wardana - Interfacing 2013 32

//***********************************************************

void lcdCommand (unsigned char cmnd) {

LCD_DPRT = cmnd; //kirim command ke data port

LCD_CPRT &= ~(1<<LCD_RS); //RS = 0 utk command

LCD_CPRT &= ~(1<<LCD_RW); //RW = 0 utk write

LCD_CPRT |= (1<<LCD_EN); //EN = 1 utk pulsa H-to-L

delay_us(1); //tunggu sebentar utk enable

LCD_CPRT &= ~(1<<LCD_EN); //EN = 0 utk pulsa H-to-L

delay_us(100); }

(33)

LCD Programming in C

Subrutin utk pengiriman data

//***********************************************************

void lcdData (unsigned char data) {

LCD_DPRT = cmnd; //kirim command ke data port

LCD_CPRT |= (1<<LCD_RS); //RS = 1 utk data

LCD_CPRT &= ~(1<<LCD_RW); //RW = 0 utk write

LCD_CPRT |= (1<<LCD_EN); //EN = 1 utk pulsa H-to-L

delay_us(1); //tunggu sebentar utk enable

LCD_CPRT &= ~(1<<LCD_EN); //EN = 0 utk pulsa H-to-L

delay_us(100); }

(34)

LCD Programming in C

Subrutin utk inisialisasi LCD

Kusuma Wardana - Interfacing 2013 34

//*********************************************************** void lcd_init() { LCD_DDDR = 0xFF; LCD_CDDR = 0xFF; LCD_CPRT &= ~(1<<LCD_EN); //LCD EN = 0

delay_us(2000); //tunggu utk inisialisasi

lcdCommand(0x38); //init LCD 2 line

lcdCommand(0x0E); //display on, cursor on

delay_us(2000); //tunggu bentar

lcdCommand(0x06); //shift kursor ke kanan

(35)

Subrutin utk posisi kursor dan menulis data

//***********************************************************

void lcd_gotoxy(unsigned char x, unsigned char y) {

unsigned char almtKarakterPertama[]={0x80,0xC0,0x94,0xD4}; //lihat tabel lcdCommand(almtKarakterPertama[y-1] + x - 1); delay_us(100); } //*********************************************************** void lcd_print(char * str) { unsigned char i = 0; while(str[i]!= 0) { lcdData(str[i]); i++; }

(36)

LCD Programming in C

Program utama

Kusuma Wardana - Interfacing 2013 36

//***********************************************************

void main(void) {

lcd_init();

lcd_gotoxy(1,1);

lcd_print("Aku pasti bisa!"); lcd_gotoxy(1,2);

lcd_print("Yakin!");

while(1); // diam di sini selamanya

(37)

LCD Programming in C

• Buatlah program utk mengirim kalimat ke LCD

menggunakan

4-bit

data dgn skematik berikut:

(38)
(39)

LCD Programming in C

#include

<mega16.h>

#include

<delay.h>

#define

LCD_DPRT PORTD //LCD data port

#define

LCD_DDDR DDRD //LCD data DDR

#define

LCD_DPIN PIND //LCD data Pin

#define

LCD_CPRT PORTC //LCD command Port

#define

LCD_CDDR DDRC //LCD command DDR

#define

LCD_CPIN PINC //LCD command Pin

#define

LCD_RS 0 //LCD RS

#define

LCD_RW 1 //LCD RW

(40)

LCD Programming in C

Subrutin utk pengiriman perintah (command)

Kusuma Wardana - Interfacing 2013 40

void lcdCommand (unsigned char cmnd) {

LCD_DPRT = cmnd & 0xF0; //kirim high nibble

LCD_CPRT &= ~(1<<LCD_RS); //RS = 0 utk command

LCD_CPRT &= ~(1<<LCD_RW); //RW = 0 utk write

LCD_CPRT |= (1<<LCD_EN); //EN = 1 utk pulsa H-to-L

delay_us(1); //tunggu sebentar utk enable

LCD_CPRT &= ~(1<<LCD_EN); //EN = 0 utk pulsa H-to-L

delay_us(100);

LCD_DPRT = cmnd<<4; //kirim low nibble

LCD_CPRT |= (1<<LCD_EN); //EN = 1 utk pulsa H-to-L

delay_us(1);

LCD_CPRT &= ~(1<<LCD_EN); //EN = 0 utk pulsa H-to-L

delay_us(100); }

(41)

LCD Programming in C

Subrutin utk pengiriman data

//***********************************************************

void lcdData (unsigned char data) {

LCD_DPRT = data & 0xF0; //kirim high nibble

LCD_CPRT |= (1<<LCD_RS); //RS = 1 utk data

LCD_CPRT &= ~(1<<LCD_RW); //RW = 0 utk write

LCD_CPRT |= (1<<LCD_EN); //EN = 1 utk pulsa H-to-L

delay_us(1); //tunggu sebentar utk enable

LCD_CPRT &= ~(1<<LCD_EN); //EN = 0 utk pulsa H-to-L

delay_us(100);

LCD_DPRT = data<<4; //kirim low nibble

LCD_CPRT |= (1<<LCD_EN); //EN = 1 utk pulsa H-to-L

delay_us(1);

(42)

LCD Programming in C

Subrutin utk inisialisasi LCD

Kusuma Wardana - Interfacing 2013 42

void lcd_init() { LCD_DDDR = 0xFF; LCD_CDDR = 0xFF; LCD_CPRT &= ~(1<<LCD_EN); //LCD EN = 0

lcdCommand(0x33); //kirim $33 utk init

lcdCommand(0x32); //kirim $32 utk init

lcdCommand(0x28); //init LCD 2 line

lcdCommand(0x0E); //display on, cursor on

lcdCommand(0x01); //clear LCD

delay_us(2000); //tunggu utk inisialisasi

lcdCommand(0x06); //shift kursor ke kanan

(43)

Subrutin utk posisi kursor dan menulis data

//***********************************************************

void lcd_gotoxy(unsigned char x, unsigned char y) {

unsigned char almtKarakterPertama[]={0x80,0xC0,0x94,0xD4}; //lihat tabel lcdCommand(almtKarakterPertama[y-1] + x - 1); delay_us(100); } //*********************************************************** void lcd_print(char * str) { unsigned char i = 0; while(str[i]!= 0) { lcdData(str[i]); i++; }

(44)

LCD Programming in C

Program utama

Kusuma Wardana - Interfacing 2013 44

//***********************************************************

void main(void) {

lcd_init();

lcd_gotoxy(1,1);

lcd_print("Aku pasti bisa!"); lcd_gotoxy(1,2);

lcd_print("Yakin!");

while(1); // diam di sini selamanya

(45)

LCD Programming in C

(46)

LCD Programming in C

• Jauh lebih sederhana, tapi…. Menghilangkan

detil program

46 #include <mega16.h> #asm .equ __lcd_port=0x15 #endasm #include <lcd.h> void main(void) { lcd_init(16); lcd_gotoxy(0,0);

lcd_putsf("Aku pasti Bisa"); lcd_gotoxy(0,1);

lcd_putsf("Yakin!"); while(1);

(47)

Daftar Pustaka

• Daniel J.Pack and Steven F.Barrettt, 2008,

Atmel AVR Microcontroller Primer:

Programming and Interfacing

, Morgan &

Claypool Publisher

• Mazidi, Naimi and Naimi, 2011,

The AVR

Microcontroller and Embedded System: Using

Assembly and C

, Prentice Hall

Referensi

Dokumen terkait

Pemberian pupuk NPK Pelangi pada pertumbuhan dan produksi Terung berpengaruh nyata terhadap parameter pengamatan yaitu: tinggi tanaman, jumlah daun, panjang buah,

Dari hasil wawancara dari kedua subjek yaitu FR dan PR mereka memaparkan bahwasannya kedua peserta didik tersebut sangat tertarik dalam pengunaan media gambar

Danil Mahmud Chaniago, M.Hum belum memiliki katalog, sehingga pemustaka yang datang berkunjung ke perpustakaan kesulitan dan membutuhkan waktu yang cukup lama

Laporan Service Laporan Kerusakan Service Laporan Pendapatan Jasa Laporan Pendapatan Sparepart Kepala Divisi After Sale Kepala Divisi After Sale Kepala Divisi After Sale Kepala

Publikasi Kota Ternate Dalam Angka 2014 ini menyajikan data statistik dari berbagai sumber baik produk Badan Pusat Statistik (BPS) berupa output dari berbagai

Malang Nomor 2.2.4L{UN32|KPl2OL5 tanggal 2 Februari 20L5, dosen yang diberi tugas tambahan sebagai Kepala Laboratorium Fisika Fakultas Matematika dan llmu Pengetahuan

Penulis juga menyampaikan terima kasih pada teman-teman dan rekan-rekan yang penulis temui dalam perjalanan menjadi mahasiswa, Unit Kegiatan Mahasiswa Islam Fakultas

Bila kita kaji bahwa campuran terites, misalnya air perasan kulit batang cingkam (Bischofia javanica) memiliki kandungan tanin cukup tinggi, merupakan satu masukkan