Anda di halaman 1dari 41

BAB I

DASAR INTERFACE KOMPUTER

1.1 Pendahuluan
Bagi sebagian orang, komputer dipandang sebagai alat pengolah kata sekedar pengganti
mesin ketik. Sebagian orang yang lain menggunakan komputer hanya sebagai sarana permainan
video game. Sebagian lainnya lagi memakai komputer untuk menyelesaikan perhitungan
pembukuan/keuangan perusahaannya sekedar pengganti mesin hitung. Sebenarnya penggunaan
komputer tidak hanya sebatas itu, tetapi jauh lebih luas.
Penggunaan komputer di bidang kendali (kontrol) jauh lebih luas dibanding penggunaannya
untuk maksud umum (general purpose). Komputer dapat digunakan sebagai cash register (mesin
bayar), sebagai mesin timbangan otomatis, sebagai pengendali alat musik, mobil, robot, rudal
(peluru kendali), dan sangat banyak lagi yang lainnya. Untuk dapat memanfaatkan komputer sesuai
dengan kebutuhan, perlu diketahui apa saja yang ada di dalam komputer itu dan bagaimana
bekerjanya.

1.2 Arsitektur Dasar Komputer


Setiap komputer menggunakan mikroprosesor (atau sering disingkat dengan prosesor)
sebagai piranti inti yang di sekelilingnya dihubungkan unit memori dan beberapa piranti masukan
dan keluaran (I/O). Prosesor merupakan pusat pengolahan dan pusat pengendalian atas semua
piranti di sekelilingnya. Prosesor mengendalikan operasi atas memori dan piranti I/O.
Komputer dapat bekerja hanya jika program dan data sudah berada dalam memori utamanya.
Karena itu pada setiap komputer harus ada memori, baik RAM (Random Access Memory, memori
baca-tulis) maupun ROM (Read Only Memory, memori hanya baca). RAM diperlukan sebagai
ruang kerja (sejenis kertas buram dalam tulis tangan) sedangkan ROM diperlukan untuk
menyimpan program dan data yang diperlukan untuk memulai operasi komputer pertama kali
dihidupkan, dan sebagian program dan data untuk operasi normal.
Tanpa piranti masukan, manusia sebagai pemakai tak dapat memberikan perintah/instruksi yang
harus dilaksanakan oleh komputer, dan komputer itu akan kehilangan nilainya. Tanpa piranti
keluaran, manusia tidak memperoleh hasil pelaksanaan perintah oleh komputer dan komputer itu
juga kehilangan nilainya. Karena itu, dalam setiap komputer harus ada paling tidak satu piranti
masukan dan satu piranti keluaran. Piranti I/O pada umumnya bekerja secara elektromekanis
sedangkan prosesor bekerja secara elektronis sehingga pada umumnya kecepatan operasinya
berbeda. Sifat/bentuk data yang diolahnya juga sering berbeda ukuran (8 bit, 16 bit, 32 bit, dsb.)
atau sifatnya (serial atau paralel). Untuk memungkinkan komunikasi di antara piranti-piranti ini
diperlukan sarana pengantara atau antarmuka (interface). Dalam operasinya, prosesor berhubungan
langsung hanya dengan antarmuka, bukan dengan piranti I/O itu sendiri.
Komunikasi antara prosesor dengan semua piranti di sekelilingnya dalam suatu komputer
dilaksanakan melalui sinyal-sinyal elektronik, yang berdasarkan fungsinya dapat dibedakan menjadi
tiga kelompok yang berbeda sifatnya, yaitu alamat, data, dan kendali. Masing-masing kelompok
sinyal ini dilewatkan pada sekelompok saluran di luar mikroprosesor yang disebut bus, sehingga
dalam setiap komputer terdapat tiga bus utama, yaitu bus data (data bus), bus alamat (address bus),
dan bus kendali (control bus). Ketiga bus yang berada di luar mikroprosesor ini disebut bus
eksternal dan hubungannya dapat dilihat pada Gambar 1.
Setiap memori dan piranti I/O (melalui antarmukanya) dikenal prosesor melalui nomor alamat.
Nomor alamat untuk piranti I/O disebut nomor bandar (nomor port). Penulisan/pengiriman data ke
memori atau antarmuka keluaran dilakukan dengan meletakkan nomor alamat atau nomor port pada
bus alamat dan data yang akan dituliskan pada bus data diikuti dengan pengiriman sinyal kendali
untuk penulisan. Pembacaan data dari memori atau antarmuka masukan dengan meletakkan nomor
alamat atau nomor port pada bus alamat diikuti dengan pengiriman sinyal kendali untuk pembacaan
yang membuat memori atau masukan meletakkan datanya pada bus data untuk dapat diambil oleh
prosesor dan ditempatkan dalam salah satu register kerjanya. Semua operasi atas memori atau I/O
dikendalikan oleh prosesor dengan mengirimkan sinyal-sinyal kendali melalui bus kendali.
Peletakan atau pengambilan data ke/dari bus data dan alamat dan pengaktifan sinyal kendali harus

1
dilaksanakan dalam waktu yang tepat. Pewaktuan (timing) memegang peranan yang sangat penting
dalam operasi setiap komputer, sebab tanpa pewaktuan yang tepat, komputer tidak akan dapat
memberikan sesuatu yang berarti bagi pemakainya.

Berdasarkan keterangan di atas, maka secara umum, sebuah komputer dapat digambarkan
dengan diagram blok seperti Gambar 1 berikut:

Bus Alamat

I/O I/O Device


Mikro-prosesor ROM RAM Interface

Bus Data

Bus Kendali
Gambar 1 Diagram blok komputer secara umum

1.3 Identifikasi Perangkat Keras


Setiap peralatan yang terhubung ke mikroprosesor mempunyai nomor pengenal agar
mikroprosesor dapat menghubungi (mengakses) peralatan tersebut. Berdasarkan Gambar 1, pada
dasarnya peralatan yang terhubung ke mikroprosesor dapat dibagi atas dua jenis, yaitu memori
(mencakup ROM dan RAM) dan I/O (mencakup keyboard, mouse, disk drive, monitor, printer).
Nomor pengenal setiap peralatan adalah unik. Untuk memori, nomor pengenalnya disebut nomor
alamat, sedangkan untuk peralatan I/O, nomor pengenalnya disebut nomor port.
Dalam komputer IBM PC dan kompatibelnya, lokasi memori mulai alamat 0000:0400h
sampai 0000:05FFh, digunakan oleh BIOS (Basic Input-Output System, bagian penting dari sistem
operasi DOS) untuk menyimpan informasi yang sangat penting tentang konfigurasi komputer
(daftar peralatan) bersangkutan sehingga disebut juga sebagai lokasi kunci (key low-memory).
Informasi ini berupa alamat/nomor port serial dan paralel, daftar peralatan yang terpasang
(equipment list), kapasitas memori terpasang, status dan kontrol keyboard, status disket, dan
sebagainya.

1.4 Port Paralel dan Spesifikasinya


1.4.1 Alamat Port Paralel
Setiap port paralel (disebut juga port printer) memiliki tiga alamat port, yaitu port data,
port status, dan port kontrol. Ketiga alamat ini selalu berurutan, yaitu jika port data berada pada
alamat 0x378, port status berada pada alamat 0x379 dan port kontrol pada 0x37A. (Catatan: awalan
‘0x’ di sini adalah simbol untuk bilangan heksadesimal dalam bahasa C)
Contoh alamat port paralel:
Printer Port Data Port Status Port Kontrol
LPT1 0x03bc 0x03bd 0x03be
LPT2 0x0378 0x0379 0x037a
LPT3 0x0278 0x0279 0x027a

2
Biasanya alamat dasar untuk LPT1 adalah 0x378 atau 0x3BC.
Untuk mengidentifikasi dengan tepat alamat port printer untuk suatu komputer tertentu,
dapat digunakan program DEBUG dari DOS untuk menampilkan data pada lokasi memori
0000:00408h yang berisi nomor alamat port printer LPT1 sampai LPT4. Sebagai contoh:
>debug
-d 0000:0408 L8
0000:0400 F8 02 F8 03 00 00 00 00-78 03 78 02 00 00 00 00
LPT1 LPT2 LPT3 LPT4
Pada contoh ini, LPT1 berada pada alamat 0x0378h, LPT2 pada 0x0278h, sementara LPT3 dan
LPT4 tidak ada. Dengan demikian, untuk komputer ini, daftar alamat port paralel adalah sebagai
berikut:
Printer Port Data Port Status Port Kontrol
LPT1 0x0378 0x0379 0x037a
LPT2 0x0278 0x0279 0x027a
LPT3 TIDAK ADA
LPT4 TIDAK ADA

1.4.2 Konektor DB-25 dan Nama-nama Sinyal


Printer terhubung ke komputer melalui antarmuka port paralel dengan menggunakan
konektor DB-25 yang memiliki 25 pin seperti pada Gambar 2.

Gambar 2 Konektor DB-25


Nama-nama sinyal pada masing-masing pin dapat dilihat pada Tabel 1.

Tabel 1 Daftar Nama Sinyal pada Konektor DB-25


No. Pin Nama Sinyal *) Arah **) Bit Register *)
1 ~Strobe Out ~C0
2–9 Data 0 – Data 7 Out D0 – D7
10 Ack In S6
11 ~Busy In ~S7
12 Paper Empty In S5
13 Select In S4
14 ~Auto Feed Out ~C1
15 Error In S3
16 Initialize Out C2
17 ~Select in Out ~C3
18 – 25 Ground - -
Catatan:
*) Tanda ~ di depan nama sinyal atau bit berarti bahwa sinyal atau bit yang bersangkutan
aktif rendah.
**) Arah sinyal dipandang dengan acuan mikroprosesor.

1.4.3 Register-register Perangkat Lunak


Ketiga port pada port paralel, yaitu port data, port status, dan port kontrol, memiliki register
perangkat lunak yang masing-masing berukuran 8 bit. Susunan bit-bit pada register untuk masing-
masing port dapat dilihat pada Gambar 3.

3
Port Data (alamat 0x378):
D7 D6 D5 D4 D3 D2 D1 D0
Data 7 Data 6 Data 5 Data 4 Data 3 Data 2 Data 1 Data 0

Port Status (alamat 0x379):


~S7 S6 S5 S4 S3 - - -
~Busy Ack PE Select Error - - -

Port Kontrol (alamat 0x37A):


- - - - ~C3 C2 ~C1 ~C0
- - - - ~Select in Init ~AutoFeed ~Strobe

Gambar 3 Register Perangkat Lunak pada Port Paralel

1.5 Pemrograman Untuk Akses Port Paralel


1.5.1 Pemilihan Bahasa Pemrograman
Pada dasarnya, setiap bahasa pemrograman, baik bahasa tingkat tinggi maupun bahasa
assembly, memiliki kemampuan untuk mengakses perangkat keras yang dalam hal ini berupa port
paralel. Namun demikian, di antara bahasa-bahasa itu terdapat perbedaan pada beberapa aspek, di
antaranya adalah dalam hal kecepatan eksekusi dan ukuran executable file (file *.exe atau *.com)
yang dihasilkan setelah diterjemahkan ke dalam kode mesin. Kecepatan eksekusi terbaik tentu saja
ada pada bahasa assembly, karena setiap satu instruksi assembly langsung diterjemahkan ke dalam
satu kode mesin ekivalennya. Hal ini berbeda untuk bahasa tingkat tinggi, karena setiap satu
perintah dalam bahasa tingkat tinggi umumnya diterjemahkan menjadi lebih dari satu instruksi
assembly, sehingga ukuran executable file menjadi relatif lebih besar.
Sistem operasi juga menjadi pertimbangan untuk memilih bahasa pemrograman yang akan
digunakan untuk mengakses perangkat keras. Untuk sistem operasi berbasis DOS, dapat digunakan
bahasa pemrograman seperti Pascal, Basic, C/C++, Assembly, dan Prolog. Untuk sistem operasi
berbasis Windows, dapat dipilih bahasa pemrograman seperti Borland Delphi, Visual Basic, Visual
C++, C++ Builder, dan Visual Prolog.
Dalam sebagian bahasa pemrograman berbasis sistem operasi Windows, misalnya Visual
Basic (VB), untuk akses langsung ke port paralel tidak disediakan perintah khusus. Sebagai
pemecahannya, VB menggunakan DLL (dynamic-link library) yang merupakan file library yang
berisi prosedur atau fungsi siap-pakai yang dibuat dengan menggunakan bahasa pemrograman lain,
misalnya Delphi. Prosedur atau fungsi yang ada di dalam file *.DLL dipanggil pada saat run-time
dari VB. Sebelum dapat dipanggil oleh VB, file *.DLL yang bersangkutan harus diletakkan terlebih
dahulu di dalam folder C:\Windows\System (untuk sistem operasi Windows 98). Sebelum
dapat dipanggil, prosedur atau fungsi yang bersangkutan harus dideklarasikan terlebih dahulu.
Untuk prosedur yang tidak mengembalikan nilai, format deklarasinya adalah sebagai berikut:

[Private|Public] Declare Sub procname Lib "libname" [Alias "alias"]


[([[ByVal] variable [As type] [,[ByVal] variable [As type]]...])]

Untuk fungsi (yang mengembalikan nilai), format deklarasinya diubah menjadi sebagai berikut:

[Private|Public] Declare Function funcname Lib "libname" [Alias "alias"]


[([[ByVal] variable [As type] [,[ByVal] variable [As type]]...])] As Type

Pada kedua deklarasi di atas, simbol procname adalah nama prosedur, funcname adalah
nama fungsi, “libname” adalah string yang berupa nama file *.DLL, variable adalah variabel
yang diperlukan pada prosedur atau fungsi, type adalah tipe data untuk variabel yang bersangkutan.
Kata kunci Private digunakan jika prosedur atau fungsi dideklarasikan di dalam modul Form
atau Class. Secara default, jika tidak dituliskan kata kunci Private atau Public, prosedur atau
fungsi adalah bersifat Public.

4
Sebagai contoh, untuk akses perangkat keras, digunakan file “IO.DLL” (diambil dari
internet) yang berisi prosedur PortOut (meniru prosedur outportb pada bahasa C) dan fungsi
PortIn (meniru fungsi inportb pada bahasa C). Untuk menggunakannya, deklarasinya adalah
sebagai berikut:

Private Declare Sub PortOut Lib “IO.DLL” (ByVal PortNo As Integer, ByVal
Data As Byte)

Private Declare Function PortIn Lib “IO.DLL” (ByVal PortNo As Integer) As


Byte

1.5.2 Penulisan Data ke Port Keluaran


Untuk menulis satu byte data (misalnya 8Ah) ke port 378h, dapat digunakan cara
sebagai berikut:

Bahasa Operasi Menulis ke Port Keterangan

Pascal Port[$378]:=$8A; $ adalah awalan untuk angka heksadesimal


dalam bahasa Pascal
Basic out &H378,&H8A &H adalah awalan untuk angka heksadesimal
dalam bahasa Basic
C/C++ outportb(0x378,0x8A); 0x adalah awalan untuk angka heksadesimal
dalam bahasa C/C++
Assembly mov al,8Ah h adalah akhiran untuk angka heksadesimal
(pada Intel mov dx,378h dalam bahasa assembly
out dx,al
80x86)
Prolog port_byte($378,$8A) $ adalah awalan untuk angka heksadesimal
dalam bahasa Prolog
Delphi asm Ini adalah penyisipan instruksi-instruksi
mov al,8Ah assembly ke dalam kode Delphi
mov dx,378h
out dx,al
end;
Visual Basic PortOut &H378, &H8A Berdasarkan deklarasi dari file IO.DLL

1.5.3 Pembacaan Data dari Port Masukan


Untuk membaca satu byte data dari port 379h, dapat digunakan cara sebagai berikut:

Operasi Membaca dari


Bahasa Keterangan
Port
Pascal X := port[$379]; Hasil pembacaan disimpan dalam variabel (misalnya) X
Basic X = inp(&H379) Hasil pembacaan disimpan dalam variabel (misalnya) X
C/C++ X = inportb(0x379); Hasil pembacaan disimpan dalam variabel (misalnya) X
Assembly mov dx,379h Hasil pembacaan disimpan dalam register AL
(pada Intel in al,dx
80x86)
Prolog port_byte($379,X) Hasil pembacaan disimpan dalam variabel (misalnya) X
Delphi asm Hasil pembacaan disimpan dalam variabel (misalnya) X
mov dx,379h
in al,dx
mov X,al
end;
Visual Basic X = PortIn (&H379) Berdasarkan deklarasi dari file IO.DLL

5
1.5.4 Operasi Manipulasi Bit
Pada Gambar 3, dapat dilihat bahwa Port Status memiliki sebuah bit yang aktif rendah,
yaitu bit 7 (MSB), sementara pada Port Kontrol terdapat tiga buah bit yang aktif rendah, yaitu bit 0,
bit 1, dan bit 3. Untuk kedua port ini perlu dilakukan operasi manipulasi bit khusus agar pembacaan
dan penulisan data tidak kacau.
Pada Port Status, hanya lima buah bit tertinggi yang digunakan dan berhubungan dengan
konektor ke luar komputer. Semua masukan ini dijemput dengan cara membaca 5-bit tertinggi dari
Port Status. Namun demikian, karena rangkaian antarmuka printer melakukan inversi (pembalikan
bit) secara hardware, logika 0 pada masukan ~S7 harus dibaca sebagai logika 1 dan sebaliknya.
Potongan program berikut ini menunjukkan contoh pembacaan 5-bit tertinggi dari Port Status
menggunakan bahasa C:

#define STATUS 0x379


...
unsigned int A;
...
A = ((inportb(STATUS)^0x80) >> 3);

Pada potongan program di atas, Port Status dibaca dan bit 7 (yaitu ~S7) dibalik dengan operasi
EXOR. Hasilnya kemudian digeser ke kanan tiga kali sehingga lima bit tertinggi berada pada posisi
lima bit terendah.

7 6 5 4 3 2 1 0
0 0 0 ~S S6 S5 S4 S3
7

Pada Port Kontrol, hanya empat buah bit terendah yang digunakan dan berhubungan
dengan konektor ke luar komputer. Dari keempat bit ini, bit 3, bit 1, dan bit 0 masing-masing
memiliki logika aktif rendah, yaitu terjadi pembalikan (inversi) secara hardware pada rangkaian
antarmuka port printer. Untuk bit-bit yang menggunakan logika inversi, hal ini harus diperhatikan
agar tidak mengacaukan maksudnya. Untuk itu, bit-bit data yang akan dikirimkan dapat dibalik
dengan cara menggunakan operasi EXOR (exclusive-OR) dengan nilai 0x0B (00001011 biner)
sebelum operasi penulisan. Misalkan diinginkan untuk mengirimkan suatu nilai 0x08 (00001000
biner) ke Port Kontrol, maka dapat digunakan potongan program berikut:

#define CONTROL 0x37A


...
int X;
...
X = 0x08; /* 0000 1000 */
outportb(CONTROL, X^0x0b);
/* ~C3=1, C2=0, ~C1=0, ~C0=0 */

Pada contoh di atas, hanya nibble (4-bit) rendah dari X yang berperan. Pada baris terakhir kode
program di atas, ~C3, ~C1, dan ~C0 merupakan keluaran dalam bentuk terbalik (logika aktif
rendah) dengan menggunakan operasi EXOR sehingga mengatasi inversi secara hardware.
Sebagai perbandingan, jika diinginkan mengeluarkan 1000 pada rendah dan tidak
melakukan inversi, hardware akan membalik bit 3, membiarkan bit 2 apa adanya, dan membalik bit
1 dan 0. Hasil yang muncul pada keluaran adalah 0011 yang jauh berbeda dari yang diharapkan.
Dengan menggunakan operasi EXOR, 1000 sebenarnya dikirimkan ke port sebagai 0011. Hardware
kemudian membalik bit 3, 1 dan 0 dan keluarannya adalah 1000 sesuai dengan yang diharapkan.
Seringkali, ketika menuliskan data, pemrogram hanya tertarik pada beberapa bit dari satu
byte data. Untuk membuat bit-bit pada posisi tertentu berlogika 0, maka dapat digunakan
operasi AND terhadap bit-bit pada posisi yang bersangkutan dengan 0, sementara bit-bit pada posisi

6
lainnya di-AND-kan dengan 1. Sebaliknya, untuk membuat bit-bit pada posisi tertentu berlogika
1, maka dapat digunakan operasi OR terhadap bit-bit pada posisi yang bersangkutan dengan 1,
sementara bit-bit pada posisi lainnya di-OR-kan dengan 0. Potongan program berikut ini
menunjukkan bit 2 dibuat tinggi (logika 1) selama 100 ms dan kemudian dibuat rendah (logika 0).

X = X | 0x04; /* bit 2 dibuat tinggi */


outportb(0x378,X);
delay(100);
X = X & 0xFB; /* bit 2 dibuat rendah */
outportb(0x378,X);

7
BAB II
APLIKASI 1: MODUL PENGENDALI 12-LED

Tujuan
Setelah menyelesaikan modul ini mahasiswa diharapkan
 mampu membuat rangkaian interface tampilan 12-LED
 mampu membuat program komputer untuk mengendalikan tampilan 12-LED

Teori Dasar
Aplikasi yang digunakan untuk mengendalikan tampilan 12-LED merupakan aplikasi yang
paling sederhana, karena untuk menghidupkan dan mematikan sebuah LED hanya dibutuhkan
tegangan standar TTL dengan komponen tambahan berupa sebuah resistor untuk pembatas arus.
Pada aplikasi yang menggunakan 12 buah LED ini, 8 buah LED dikendalikan oleh Port
Data, sedangkan 4 buah LED oleh Port Kontrol.

Bahan dan Peralatan


 Konektor DB-25 (jantan) 1 buah
 LED 12 buah
 Resistor 330 ohm 12 buah
 Kabel data 13 potong
 Komputer 1 unit

Rangkaian Interface

Gambar 4 Rangkaian interface pengendali 12-LED


Catatan:
 LED 0 sampai LED 7 dihubungkan dengan bit D0 sampai D7 pada Port Data.
 LED 8 sampai LED 11 dihubungkan masing-masing ke bit ~C0, ~C1, C2, dan ~C3 (dalam
hal ini, bit ~C0, ~C1, dan ~C3 adalah aktif rendah sehingga perlu diperhatikan dalam
pemrograman).

8
Prosedur
1. Rangkai peralatan sesuai dengan Gambar 4.
2. Hidupkan komputer dan jalankan software Visual Basic 6.0.
3. Hubungkan konektor DB-25 jantan ke konektor DB-25 betina pada komputer.
4. Tulis program sesuai dengan tugas yang diberikan.
5. Jalankan program.
6. Periksa hasil program terhadap rangkaian interface yang dipasang. Jika tidak sesuai
dengan hasil yang diinginkan, edit kembali program, kemudian ulangi langkah 5
dan 6.
7. Selesai

Tugas
1. Buatlah program yang memiliki kemampuan berikut:
 dapat menghidupkan 12 buah LED sekaligus
 dapat mematikan semua LED
 dapat membuat 12-LED menyala secara bergiliran membentuk lingkaran
 dapat berkedip-kedip
2. Buatlah program yang dapat menghidupkan dan mematikan satu atau lebih LED
yang diinginkan.
3. Buatlah program yang dapat menghidupkan LED secara memantul.

9
BAB III
APLIKASI 2: MODUL PENGENDALI
TAMPILAN SEVEN-SEGMENT

Tujuan
Setelah menyelesaikan modul ini mahasiswa diharapkan
 mampu membuat rangkaian interface tampilan seven-segment
 mampu membuat program komputer untuk mengendalikan tampilan seven-segment.

Teori Dasar
Pada dasarnya, untuk menampilkan angka pada satu buah seven-segment diperlukan sebuah
dekoder, misalnya dekoder 7447 yang mampu mengubah data biner 4-bit (kode BCD) menjadi
tampilan digit 0 sampai 9. Setiap segmen (segmen a sampai g) dalam sebuah seven-segment berupa
sebuah LED. Jika semua katoda dari masing-masing LED dalam seven-segment dihubungkan
secara bersama, maka seven-segment ini disebut common-cathode, sedangkan jika semua anoda
dihubungkan, maka seven-segment ini disebut common-anode. Setiap rangkaian LED perlu diberi
resistor sebagai pembatas arus untuk melindunginya terhadap arus listrik yang berlebihan. Nilai
resistor ditentukan berdasarkan sifat kerja LED. Agar dapat menyala, LED membutuhkan arus
antara 5 sampai 30 mA; semakin besar arus diberikan, semakin terang nyala LED. Sewaktu
menyala, jatuh tegangan di antara kedua terminal LED secara umum berkisar 1,5 V. Untuk LED
tunggal dengan tegangan catu sebesar +5 V dan arus sekitar 20 mA, nilai resistor yang dibutuhkan
adalah (5 – 1.5)/0.020 = 175 . Jika menggunakan dekoder 7447, jatuh tegangan pada dekoder itu
sendiri harus diperhitungkan. Untuk tampilan seven-segment yang digerakkan 7447, LED pada
setiap segmen akan menyala jika keluaran 7447 bertegangan rendah (berlogika 0). Tegangan
maksimum keluaran 7447 pada saat berlogika 0 adalah 0,4 V dengan arus 40 mA. Dengan data ini,
cukup aman jika tegangan anoda saat LED menyala dianggap 0,2 V dengan arus 20 mA, sehingga
jatuh tegangan pada resistor pembatas arus adalah 5 – 1,5 – 0,2 = 3,3 V. Ini berarti bahwa resistor
yang dibutuhkan adalah 3,3/0,02 = 165 , yang cukup aman menggunakan resistor standar 168 
yang tersedia di pasaran.
Dalam penampilan lebih dari satu digit, jika setiap seven-segment membutuhkan sebuah
dekoder 7447, maka rangkaian menjadi kurang efisien karena membutuhkan dekoder yang banyak
dan konsumsi daya yang besar. Penampilan dengan menggunakan rangkaian seperti ini disebut
penampilan statis. Sebagai contoh, untuk menampilkan 16 digit, dibutuhkan dekoder 16 buah.
Jika seven-segment menampilkan angka 8, artinya ketujuh LED menyala dan masing-masing
menarik arus 20 mA, maka ketujuh LED itu menarik arus 7 x 20 = 140 mA. Jika ke-16 seven-
segment secara bersamaan menampilkan angka 8, maka dibutuhkan arus yang sangat besar, yaitu
16 x 140 mA = 2240 mA = 2,24 A.
Untuk mengatasi kelemahan penampilan statis, digunakan penampilan dinamis. Dalam
penampilan ini, penampilan dilakukan bergilir digit demi digit, dan setiap saat hanya salah satu
digit tampilan yang diaktifkan dan hanya dalam waktu singkat, sehingga kebutuhan daya setiap saat
tidak lebih dari sebesar daya yang dibutuhkan oleh penampil 1 digit. Dengan periode hidup-mati
yang cukup cepat, antara 40 sampai 200 kali setiap detik, mata manusia masih melihat seolah-olah
LED tersebut menyala secara terus-menerus. Operasi mati-hidup ini juga menurunkan duty cycle
(lamanya periode hidup terhadap periode hidup-mati), tidak seperti pada penampilan statis yang
hidup terus-menerus (duty cycle 100%). Dalam cara ini digunakan teknik multiplexing, yaitu
mengirimkan data angka tampilan secara berurutan ke semua seven-segment, tetapi pada setiap saat
hanya satu seven-segment yang dihidupkan.
Aplikasi 2 ini menggunakan bantuan IC decoder/demultiplexer 74154 yang mempunyai 16
keluaran yang pada setiap saat hanya satu keluaran yang aktif (berlogika rendah). Setiap keluaran
dekoder ini digunakan untuk memilih seven-segment yang harus diaktifkan. Masukan pemilih 4-bit
untuk IC ini dihubungkan ke Port Kontrol pada bit ~C0, ~C1, C2, dan ~C3. Seven-segment yang
digunakan adalah jenis common-anode. Data biner untuk menghidupkan segmen-segmen a sampai
g pada masing-masing seven-segment tidak dilewatkan melalui dekoder 7447, tetapi langsung ke

10
segmen yang bersangkutan. Data biner ini diambil dari bit D0 sampai D6 (7 bit saja) pada Port
Data. Karena tidak menggunakan dekoder 7447, setiap seven-segment tidak hanya dapat
menampilkan angka 0 sampai 9, tetapi juga bentuk karakter lain, seperti huruf atau tanda baca
tertentu. Rangkaian lengkap untuk aplikasi dapat dilihat pada Gambar 5.
Dengan rangkaian seperti Gambar 5, penampilan dimulai dengan mengirimkan data angka
dari Port Data pada bit D0 sampai D7 (masing-masing untuk segmen a sampai g) untuk seven-
segment yang anodanya terhubung ke keluaran Y0 dari dekoder melalui transistor. Kemudian
dikirim data pemilih digit (4 bit) dari Port Kontrol ke 74154 sehingga keluaran Y0 aktif dan seven-
segment yang bersangkutan menampilkan data yang diberikan. Penyalaan digit ini dibiarkan
berlangsung sekitar 1 sampai 2 milidetik (atau disesuaikan dengan kecepatan komputer yang
digunakan). Kemudian data untuk digit berikutnya dikirim ke D0 sampai D7 diikuti dengan
pemberian data pemilih digit untuk mengaktifkan keluaran Y1. Setelah masa hidup dilampaui,
kembali dilakukan penampilan digit berikutnya sampai keluaran Y15 diaktifkan dengan cara yang
sama. Setelah semua digit ditampilkan secara bergiliran, proses penampilan diulangi lagi untuk
digit yang pertama sekali diaktifkan.

Bahan dan Peralatan


 Konektor DB-25 (jantan) 1 buah
 Common anode seven segment 16 buah
 Resistor 330 ohm 7 buah
 Resistor 1K 16 buah
 Kabel data 11 potong
 Komputer 1 unit
 Catu daya +5V 1 unit

Rangkaian Interface

Gambar 5 Rangkaian interface pengendali seven-segment dengan 74154

11
Prosedur
1. Rangkai peralatan sesuai dengan Gambar 5.
2. Hidupkan komputer dan jalankan software Visual Basic 6.0.
3. Hubungkan konektor DB-25 jantan ke konektor DB-25 betina pada komputer.
4. Tulis program sesuai dengan tugas yang diberikan.
5. Jalankan program.
6. Periksa hasil program terhadap rangkaian interface yang dipasang. Jika tidak sesuai
dengan hasil yang diinginkan, edit kembali program, kemudian ulangi langkah 5
dan 6.
7. Selesai.
Tugas
1. Buatlah program yang memiliki kemampuan berikut:
 dapat menampilkan 16 digit konstan
 dapat menampilkan tanggal sekarang
 dapat menampilkan jam sekarang
2. Buatlah program yang dapat menampilkan 16 digit yang berkedip-kedip
3. Buatlah program yang dapat menampilkan karakter berjalan.
4. Buatlah program untuk menampilkan counter
.

12
BAB IV
APLIKASI 3: MODUL PENGENDALI LAMPU PIJAR
Tujuan
Setelah menyelesaikan modul ini mahasiswa diharapkan
 mampu membuat rangkaian interface pengendali lampu pijar.
 mampu membuat program komputer untuk mengendalikan lampu pijar.

Teori Dasar
Untuk mengendalikan peralatan listrik rumah tangga, misalnya lampu pijar, kipas angin,
dan sebagainya, yang membutuhkan catu daya yang berbeda dengan tingkat tegangan TTL, maka
perlu dibuat rangkaian driver untuk peralatan yang bersangkutan. Untuk lampu pijar, misalnya,
dapat digunakan relay yang diaktifkan dengan transistor. Rangkaian untuk aplikasi ini dapat dilihat
pada Gambar 6.

Bahan dan Peralatan


 Konektor DB-25 (jantan) 1 buah
 Lampu pijar 4 buah
 Resistor 1K 16 buah
 Kabel data 4 potong
 Relay 4 buah
 Dioda 4 buah
 Transistor NPN 4 buah
 Komputer 1 unit
 Catu daya +12V 1 unit

Rangkaian Interface

Gambar 6 Rangkaian interface pengendali lampu pijar

13
Prosedur
1. Rangkai peralatan sesuai dengan Gambar 6.
2. Hidupkan komputer dan jalankan software Visual Basic 6.0.
3. Hubungkan konektor DB-25 jantan ke konektor DB-25 betina pada komputer.
4. Tulis program sesuai dengan tugas yang diberikan.
5. Jalankan program.
6. Periksa hasil program terhadap rangkaian interface yang dipasang. Jika tidak sesuai
dengan hasil yang diinginkan, edit kembali program, kemudian ulangi langkah 5
dan 6.
7. Selesai.
Tugas
1. Buatlah program yang memiliki kemampuan berikut:
 dapat menghidupkan semua lampu
 dapat mematikan semua lampu
 dapat menghidupkan lampu secara bergiliran
2. Buatlah program yang dapat menghidupkan semua lampu secara berkedip-kedip
3. Buatlah program yang dapat menghidupkan dan mematikan satu atau beberapa
lampu yang diinginkan.

14
BAB V
APLIKASI 4: MODUL PENGENDALI MOTOR STEPPER
Tujuan
Setelah menyelesaikan modul ini mahasiswa diharapkan
 mampu membuat rangkaian interface pengendali motor stepper.
 mampu membuat program komputer untuk mengendalikan motor stepper.

Teori Dasar
Motor stepper merupakan salah satu jenis motor yang dapat digunakan untuk
memindahkan sebuah benda (beban) dengan jarak perpindahan yang kecil. Berbeda halnya
dengan motor jenis lain yang bergerak dengan putaran yang kontinyu (mulus), motor
stepper bergerak dengan putaran yang kaku. Motor stepper bergerak dari posisi tertentu ke
posisi berikutnya seperti gerak melangkah (step). Motor stepper banyak digunakan untuk
berbagai keperluan, seperti pada pinter Epson LX-800, atau Epson LQ-2170 atau printer
lain yang sejenis (dot-matrix printer). Motor ini juga ditemukan pada floppy disk drive,
harddisk drive, plotter, dan lain-lain.
Motor stepper yang umum digunakan mempunyai jangkauan langkah (step)
berputar antara 0,9º sampai dengan 30º. Motor-motor itu adalah motor stepper dua atau
empat fase. Secara teoritis, sebuah motor stepper berukuran kecil dapat digerakkan secara
langsung oleh mikroprosesor. Dalam kenyataannya, arus dan tegangan yang dapat
dikeluarkan oleh mikroprosersor terlalu kecil untuk menggerakkan sebuah motor stepper
kecil. Sebagai perbandingan, gerbang-gerbang tipe TTL dalam mikroprosesor hanya
mampu mengeluarkan arus dalam orde mA atau tegangan antara 2 sampai 2,5 volt.
Sementara itu, untuk menggerakkan motor stepper dibutuhkan arus yang cukup besar
(dalam orde ampere) dengan tegangan berkisar 5 – 24 V. Untuk mengatasi masalah
tersebut, dibutuhkan sebuah perangkat tambahan yang dapat memenuhi kebutuhan arus dan
tegangan yang besar itu, yaitu dengan menambahkan suatu rangkaian transistor yang
disebut pasangan Darlington. Rangkaian aplikasi untuk pengendalian motor stepper ini
dapat dilihat seperti pada Gambar 7.
Sebuah motor stepper digerakkan dari posisi yang satu ke posisi yang lain
berikutnya dengan mengubah arus yang terhubung ke masing-masing fase. Pengubahan
arus tersebut mempunyai pola/kombinasi tertentu. Berikut ini adalah cara untuk
menggerakkan motor stepper 4-fase.

Tabel 2 kombinasi arus fase motor stepper


untuk langkah penuh (full-step)

Fase
CWW
Step
D3 D2 D1 D0
1 0 0 1 1
2 1 0 0 1
3 1 1 0 0
4 0 1 1 0
1 0 0 1 1
CCWW

15
Tabel 3 kombinasi arus fase motor stepper
untuk langkah paruh (half-step)
Fase
Step
D3 D2 D1 D0 CWW
1 0 0 1 1
2 0 0 0 1
3 1 0 0 1
4 1 0 0 0
5 1 1 0 0
6 0 1 0 0
7 0 1 1 0
CCWW
8 0 0 1 0
1 0 0 1 1

Pada Gambar 7, misalkan D0 dan D1 diberi arus (dalam keadaan ON). Bila arus
pada D1 diputus (OFF) dan D3 diberi arus (ON), motor stepper akan bergerak satu langkah
searah dengan putaran jarum jam. Bila arus pada D1 ditutup dan D2 diberi arus, motor
stepper bergerak lagi satu langkah searah putaran jaruim jam. Demikian seterusnya, motor
stepper dapat digerakkan langkah per langkah searah putaran jam.
Pengubahan kombinasi arus fase adalah untuk menggerakkan motor stepper
dengan langkah penuh (full-step). Gerakan motor dapat diperhalus dengan
menggerakkannya setengah-setengah langkah. Hal ini dilakukan dengan mengubah arus
fase motor sesuai dengan urutan yang ditunjukkan oleh Tabel 3. Urutan gerak dari langkah
pertama, kedua, ketiga, dan seterusnya akan menghasilkan gerakan separuh langkah searah
jarum jam; sebaliknya akan menghasilkan gerakan yang berlawanan dengan arah putaran
jam.

Bahan dan Peralatan


 Konektor DB-25 (jantan) 1 buah
 Motor stepper 1 buah
 Resistor 330 ohm 4 buah
 LED 4 buah
 Kabel data 4 potong
 Dioda 1N4000 4 buah
 Transistor 4 buah
 IC 74LS06 1 buah
 Komputer 1 unit
 Catu daya +12V 1 unit

16
Rangkaian Interface

Gambar 7 Rangkaian pengendali motor stepper

Prosedur
1. Rangkai peralatan sesuai dengan Gambar 7.
2. Hidupkan komputer dan jalankan software Visual Basic 6.0.
3. Hubungkan konektor DB-25 jantan ke konektor DB-25 betina pada komputer.
4. Tulis program sesuai dengan tugas yang diberikan.
5. Jalankan program.
6. Periksa hasil program terhadap rangkaian interface yang dipasang. Jika tidak sesuai
dengan hasil yang diinginkan, edit kembali program, kemudian ulangi langkah 5
dan 6.
7. Selesai.
Tugas
1. Buatlah program untuk mengendalikan motor stepper sehingga motor stepper
 dapat berputar CW 1 kali
 dapat berputar CCW 1 kali
 dapat berputar CW n kali
 dapat berputar CCW n kali
 dapat berputar CW menurut besar sudut yang diinginkan
 dapat berputar CCW menurut besar sudut yang diinginkan
2. Buatlah program sehingga motor stepper dapat berputar dan berhenti secara
interaktif menurut perintah yang diinginkan.

17
BAB VI
APLIKASI 5: MODUL PENGENDALI TRAFFIC LIGHT
Tujuan
Setelah menyelesaikan modul ini mahasiswa diharapkan
 mampu membuat rangkaian interface pengendali traffic light
 mampu membuat program komputer untuk mengendalikan traffic light.

Teori Dasar
Komponen elektronik yang digunakan pada Modul 5 ini tepat sama dengan Modul 1
(Modul Pengendali 12-LED) dan dihubungkan tepat seperti pada Modul 1, tetapi LED-LED
disusun sedemikian rupa sehingga merupakan miniatur traffic light yang terdapat pada simpang
empat. Setiap simpang empat pada aplikasi ini dilengkapi dengan tiga buah LED yang masing-
masing berwarna merah, kuning, dan hijau.

Gambar 8 Tata letak LED pada modul

Waktu menyala dan padam setiap LED diatur sehingga pada setiap satu siklus, hanya satu
jalur jalan raya yang dibolehkan melewatkan kendaraan. Pengaturan waktu ini dapat dirancang
dengan menggunakan tabel berikut ini.

Tabel 4 Urutan penyalaan LED untuk miniatur traffic light pada simpang empat
Selatan Timur Utara Barat
Urutan
M K H M K H M K H M K H
0 - - 5 5 - - 5 - - 5 - -
1 - 1 - 1 - - 1 - - 1 - -
2 5 - - - - 5 5 - - 5 - -
3 1 - - - 1 - 1 - - 1 - -
4 5 - - 5 - - - - 5 5 - -
5 1 - - 1 - - - 1 - 1 - -
6 5 - - 5 - - 5 - - - - 5
7 1 - - 1 - - 1 - - - 1 -
0 - - 5 5 - - 5 - - 5 - -

18
Keterangan:
M = LED merah 5 = waktu menyala LED (5 detik)
K = LED kuning 1 = waktu menyala LED (1 detik)
H = LED hijau - = padam

Bahan dan Peralatan


 Konektor DB-25 (jantan) 1 buah
 LED merah 4 buah
 LED kuning 4 buah
 LED hijau 4 buah
 Resistor 330 ohm 12 buah
 Kabel data 13 potong
 Tripleks 30x30 cm 1 keping
 Komputer 1 unit

Rangkaian Interface

Gambar 9 Rangkaian interface pengendali traffic light

Prosedur
1. Rangkai peralatan sesuai dengan Gambar 9.
2. Hidupkan komputer dan jalankan software Visual Basic 6.0.
3. Hubungkan konektor DB-25 jantan ke konektor DB-25 betina pada komputer.
4. Tulis program sesuai dengan tugas yang diberikan.
5. Jalankan program.
6. Periksa hasil program terhadap rangkaian interface yang dipasang. Jika tidak sesuai
dengan hasil yang diinginkan, edit kembali program, kemudian ulangi langkah 5
dan 6.
7. Selesai.

19
Tugas
1. Buatlah program untuk mengendalikan traffic light dengan urutan penyalaan LED
sesuai dengan Tabel 4.
2. Buatlah program untuk mengendalikan traffic light yang akan membuat LED
kuning pada semua sisi simpang empat berkedip terus-menerus selama jam di
komputer menunjukkan pukul 21:00 sampai 05:00.

20
BAB VII
APLIKASI 6: MODUL PENDETEKSIAN CAHAYA

Tujuan
Setelah menyelesaikan modul ini mahasiswa diharapkan
 mampu membuat rangkaian interface pendeteksi cahaya
 mampu membuat program komputer untuk mendeteksi cahaya.

Teori Dasar
Rangkaian untuk Aplikasi 6 menggunakan LDR untuk mendeteksi cahaya. Keluaran dari
pendeteksi cahaya dihubungkan ke port status pada port paralel. Cahaya yang jatuh pada LDR
menyebabkan transistor on atau off sehingga keadaan kolektor dapat berlogika 0 atau 1. Kolektor
transistor ini dihubungkan ke port status pada bit ~S7. Keadaan ~S7 ini selanjutnya digunakan
sebagai pengendali empat buah LED.

Bahan dan Peralatan


 Konektor DB-25 (jantan) 1 buah
 LED 4 buah
 Resistor 330 ohm 4 buah
 Resistor 100 ohm 1 buah
 Trimpot 1 buah
 Transistor NPN 1 buah
 LDR 1 buah
 Kabel data 5 potong
 Komputer 1 unit
 Catu daya +5V 1 unit

Rangkaian Interface

Gambar 10 Rangkaian interface pendeteksi cahaya dengan LDR

21
Prosedur
1. Rangkai peralatan sesuai dengan Gambar 10.
2. Hidupkan komputer dan jalankan software Visual Basic 6.0.
3. Hubungkan konektor DB-25 jantan ke konektor DB-25 betina pada komputer.
4. Tulis program sesuai dengan tugas yang diberikan.
5. Jalankan program.
6. Periksa hasil program terhadap rangkaian interface yang dipasang. Jika tidak sesuai
dengan hasil yang diinginkan, edit kembali program, kemudian ulangi langkah 5
dan 6.
7. Selesai.
Tugas
1. Buatlah program untuk mendeteksi cahaya dengan ketentuan bahwa jika cahaya
terang, matikan seluruh LED; sebaliknya, jika cahaya gelap, buat semua LED
berkedip-kedip.
2. Buatlah program pendeteksi cahaya seperti di atas, tetapi dengan tambahan bahwa
jika cahaya gelap, di samping semua LED berkedip, juga buat speaker komputer
berbunyi seperti sirine.

22
DAFTAR PUSTAKA
1. Anderson, Peter H., Use of a PC Printer Port for Control and Data Acquisition,
Internet Resource.
2. Majerus, Philippe, LPT (Parallel) Port, Internet Resource.
3. Stewart, Zhahai, Interfacing the IBM PC Parallel Printer Port, Internet Resource.
4. Putra, Agfianto Eko, Teknik Antarmuka Komputer: Konsep dan Aplikasi, Graha
Ilmu, Yogyakarta, 2002.
5. Prasetia, Retna, dan Catur Edi Widodo, Teori dan Praktek Interfacing Port Paralel
dan Port Serial Komputer dengan Visual Basic 6.0, Penerbit Andi, Yogyakarta,
2004.
6. Kadir, Abdul, Pemrograman Lanjutan Turbo C, Penerbit Andi, Yogyakarta, 1993.
7. Link, Wolfgang, Pengukuran, Pengendalian, dan Pengaturan dengan PC: Praktek
Otomasi dengan Pengaturan Numerik, Elex Media Komputindo, Jakarta, 1995.
8. Ibrahim, K.F., Teknik Digital (Terjemahan), Penerbit Andi, Yogyakarta, 1998.
9. Tarigan, Pernantin, Pemrograman Assembly untuk IBM PC dan Kompatibelnya,
USU Press, Medan, 1994.
10. Hall, Douglas V., Microprocessors and Interfacing, McGraw-Hill, Singapore, 1986.
11. Simanjuntak, Henri S.V., Dasar-dasar Mikroprosesor, Kanisius, Yogyakarta, 2001.
12. Rizkiawan, Rizal, Tutorial Perancangan Hardware, Elex Media Komputindo,
Jakarta, 1997.

23
LAMPIRAN 1
LISTING PROGRAM APLIKASI
DENGAN TURBO C
/* ======================
Program: LED-01.C
LED berjalan melingkar
Cara ke-1
====================== */
#include <stdio.h>
#define DATA 0x378
#define CONTROL DATA+2
main()
{ unsigned char i;
int j[]={523,587,659,698,784,880,988,1047,1175,1319,1397,1568};
clrscr();
do{
for(i=0;i<8;i++){
outportb(DATA,0x01<<i);
sound(j[i]);
delay(10000);
}
outportb(DATA,0x00);
for(i=0;i<4;i++){
outportb(CONTROL,(0x01<<i)^0x0B);
sound(j[i+8]);
delay(10000);
}
outportb(CONTROL,0x00^0x0B);
}while(!kbhit());
getch();
outportb(DATA,0x00);
outportb(CONTROL,0x00^0x0B);
nosound();
}

/* ******************************
Program: LED-01A.C
LED berjalan melingkar
Cara ke-2
******************************
*/

#include <stdio.h>
#include <dos.h>

#define Data 0x378


#define Control Data+2

main()
{
unsigned char PD[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
unsigned char PC[] = {0x0A,0x09,0x0F,0x03};
char i;

clrscr();
outportb(Data,0x00);
outportb(Control,0x0B);
do {
for(i=0;i<8;i++) {
outportb(Data,PD[i]);
delay(8000);
}
outportb(Data,0x00);
delay(8000);
for(i=0;i<4;i++) {

24
outportb(Control,PC[i]);
delay(8000);
}
outportb(Control,0x0B);
delay(8000);
} while(!kbhit());
}

/* ============================
Program: LED-02.C
LED berjalan secara memantul
Cara ke-1
============================ */
#include <stdio.h>
#include <conio.h>
#define DATA 0x378
#define CONTROL DATA+2
#define DELAY 3000
main()
{ unsigned char i;

clrscr();
textcolor(YELLOW);
cputs("LED berjalan secara memantul");
do{
for(i=0;i<8;i++){
outportb(DATA,0x01<<i);
delay(DELAY);
}
outportb(DATA,0x00);

for(i=0;i<4;i++){
outportb(CONTROL,(0x01<<i)^0x0B);
delay(DELAY);
}
outportb(CONTROL,0x00^0x0B);
sound(1047);delay(2000);nosound();

for(i=1;i<4;i++){
outportb(CONTROL,(0x08>>i)^0x0B);
delay(DELAY);
}
outportb(CONTROL,0x00^0x0B);

for(i=0;i<7;i++){
outportb(DATA,0x80>>i);
delay(DELAY);
}
outportb(DATA,0x00);
sound(523);delay(2000);nosound();

}while(!kbhit());
getch();
outportb(DATA,0x00);
outportb(CONTROL,0x00^0x0B);
}

/* *************************************
Program: LED-02A.C
LED berjalan secara memantul
Cara ke-2
*************************************
*/

#include <stdio.h>
#include <dos.h>

25
#define Data 0x378
#define Control Data+2

main()
{
unsigned char PD[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
unsigned char PC[] = {0x0A,0x09,0x0F,0x03};
char i;
int Tunda=5000;

clrscr();
outportb(Data,0x00);
outportb(Control,0x0B);
do {
for(i=0;i<8;i++) {
outportb(Data,PD[i]);
/*sound(PD[i]*500);*/
delay(Tunda);
}
outportb(Data,0x00);
for(i=0;i<4;i++) {
outportb(Control,PC[i]);
delay(Tunda);
}
outportb(Control,0x0B);

for(i=3;i>=0;i--) {
outportb(Control,PC[i]);
delay(Tunda);
}
outportb(Control,0x0B);
for(i=6;i>=1;i--) {
outportb(Data,PD[i]);
/*sound(PD[i]*500);*/
delay(Tunda);
}
outportb(Data,0x00);

} while(!kbhit());
nosound();
}

#include <stdio.h>
#include <math.h>
main()
{
char Pil,i,Tombol;
clrscr();
do{
clrscr();
printf("######### MENU #########\n");
printf("1. Menghidupkan semua LED\n");
printf("2. Mematikan semua LED\n");
printf("3. Menghidupkan LED berdasarkan tombol fungsi\n");
printf("4. Keluar\n\n\n");
printf("Pilih menu (1-4): ");
Pil=getch();
switch(Pil){
case '1':
clrscr();
printf("Sedang menghidupkan semua LED...\n");
gotoxy(1,25);printf("Tekan sembarang tombol...");
outportb(0x378,0xFF);
outportb(0x37a,0x04);
getch();break;
case '2':
clrscr();
printf("Sedang mematikan semua LED...\n");

26
gotoxy(1,25);printf("Tekan sembarang tombol...");
outportb(0x378,0x00);
outportb(0x37a,~0x04);
getch();break;
case '3':
do{
clrscr();
printf("Tekan tombol F1-F12\n\n");
Tombol=getch();
i=Tombol-0x85;
if((i==0)||(i==1)){
outportb(0x37a,inportb(0x37a)^(i==0?0x04:0x08));
gotoxy(1,25);printf("Tekan tombol Esc untuk ke menu utama...");
getch();}
i=Tombol-0x3b;
if((i>=0)&&(i<=9)){
if(i<=7)
outportb(0x378,inportb(0x378)^(char)pow(2,i));
else
outportb(0x37a,inportb(0x37a)^(i==8?0x01:0x02));
gotoxy(1,25);printf("Tekan tombol Esc untuk ke menu utama...");
getch();}
}while(Tombol!=0x1b);break;
}
}while(Pil!='4');
}

/* ==========================================
Program: 7SEG-01.C
Menampilkan angka konstan 0123456789AbCdEF
========================================== */
#include <stdio.h>
#define Data 0x378
#define Control Data+2
main()

{ unsigned char Angka[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,


0x88,0x83,0xc6,0xa1,0x86,0x8e};
unsigned char i=0;

clrscr();
outportb(Data,0xff);
do{
outportb(Data,Angka[i]);
outportb(Control,(15-i)^0x0b);
delay(200);
outportb(Data,0xff);
i==15?i=0:i++;
}while(!kbhit());
outportb(Data,0xFF);
getch();
}

/* ===============================
Program: 7SEG-02.C
Menampilkan jam sistem komputer
=============================== */
#include <stdio.h>
#include <dos.h>
#define Data 0x378
#define Control Data+2

main()
{ unsigned char Angka[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char i,a[16],jam,menit,detik,s100;
struct time *waktu;

27
clrscr();

outportb(Data,0xff);
do{
gettime(waktu);
gotoxy(33,13);
printf("%02d:%02d:%02d:%02d POLI",waktu->ti_hour,
waktu->ti_min,waktu->ti_sec,waktu->ti_hund);
jam=waktu->ti_hour;
menit=waktu->ti_min;
detik=waktu->ti_sec;
s100=waktu->ti_hund;
a[0]=jam/10;
a[1]=jam%10;
a[2]=0xbf;
a[3]=menit/10;
a[4]=menit%10;
a[5]=0xbf;
a[6]=detik/10;
a[7]=detik%10;
a[8]=0xbf;
a[9]=s100/10;
a[10]=s100%10;
a[11]=0xff;
a[12]=0x8c;
a[13]=0xc0;
a[14]=0xc7;
a[15]=0xcf;
for(i=0;i<16;i++){
if((i==2)||(i==5)||(i==8)||(i>10))
outportb(Data,a[i]);
else
outportb(Data,Angka[a[i]]);
outportb(Control,(15-i)^0x0b);
delay(100);
outportb(Data,0xff);
}
}while(!kbhit());
outportb(Data,0xFF);
getch();
}

/* =================================
Program: 7SEG-03.C
Menampilkan teks berjalan
================================= */
#include <stdio.h>
#include <dos.h>
#define Data 0x378
#define Control Data+2

main()
{ unsigned char Huruf[] =
{0x8c,0xa3,0xc7,0xcf,0x87,0x86,0x8a,0xc8,0xcf,0x8a,0xff};
unsigned char i,j;

clrscr();

outportb(Data,0xff);
do{
for(i=0;i<16;i++){
for(j=0;j<11;j++) {
outportb(Data,Huruf[j]);
outportb(Control,((i+10-j)%16)^0x0b);
delay(100);
outportb(Data,0xff);
}
delay(10000);

28
}
}while(!kbhit());
outportb(Data,0xFF);
getch();
}

#include <stdio.h>
#include <dos.h>
#define Data 0x378
#define Control Data+2

main()
{ unsigned char Angka[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char i,a[10],tgl,bln;
int thn;
struct time *tanggal;

clrscr();

outportb(Data,0xff);
getdate(tanggal);
gotoxy(35,13);
tgl=tanggal->da_day;
bln=tanggal->da_mon;
thn=tanggal->da_year;
printf("%02d-%02d-%04d",tgl,bln,thn);
a[0]=tgl/10;
a[1]=tgl%10;
a[2]=0xbf;
a[3]=bln/10;
a[4]=bln%10;
a[5]=0xbf;
a[6]=thn/1000;
a[7]=thn%1000/100;
a[8]=thn%1000%100/10;
a[9]=thn%1000%100%10;
do{

for(i=0;i<10;i++){
if((i==2)||(i==5))
outportb(Data,a[i]);
else
outportb(Data,Angka[a[i]]);
outportb(Control,(15-i)^0x0b);
delay(100);
outportb(Data,0xff);
}
}while(!kbhit());
outportb(Data,0xFF);
getch();
}

/* ==========================================
Program: 7SEG-05.C
Menampilkan counter 0000000 sampai 1000000
========================================== */
#include <stdio.h>
#include <dos.h>
#define Data 0x378
#define Control Data+2

main()
{ unsigned char Angka[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char i,a[7];
long int t=0;

clrscr();

29
outportb(Data,0xff);
do{
do{
gotoxy(40,13);
printf("%07d",t);
a[0]=(unsigned char)t/1000000;
a[1]=t%1000000/100000;
a[2]=t%1000000%100000/10000;
a[3]=t%1000000%100000%10000/1000;
a[4]=t%1000000%100000%10000%1000/100;
a[5]=t%1000000%100000%10000%1000%100/10;
a[6]=t%1000000%100000%10000%1000%100%10;
for(i=0;i<7;i++){
outportb(Data,Angka[a[i]]);
outportb(Control,(15-i)^0x0b);
delay(20000);
outportb(Data,0xff);
}
t==10000000?t=0:t++;
}while(!kbhit());
}while(!kbhit());
outportb(Data,0xFF);
getch();
}

/* ==================================
Program: PIJAR-01.C
Menghidupkan lampu pijar melingkar
================================== */
#include <stdio.h>
#define DATA 0x378
main()
{
char i;

clrscr();
do{for(i=0;i<4;i++){
outportb(DATA,0x01<<i);
delay(40000);
delay(40000);
delay(40000);
}
}while(!kbhit());
getch();
outportb(DATA,0x00);
}

/* ====================================
Program: PIJAR-02.C
Lampu pijar berjalan secara memantul
==================================== */
#include <stdio.h>
#include <conio.h>
#define DATA 0x378
main()
{ unsigned char i;
unsigned char PD[]={0x01,0x02,0x04,0x08,0x04,0x02};
clrscr();
textcolor(YELLOW);
cputs("Lampu pijar berjalan secara memantul");
do{
for(i=0;i<6;i++){
outportb(DATA,PD[i]);
delay(40000);
}

30
}while(!kbhit());
getch();
outportb(DATA,0x00);
}

/* ====================================
Program: PIJAR-03.C
Menghidupkan lampu pijar
dengan menu pilihan
==================================== */

#include <stdio.h>
#include <math.h>
main()
{
char Pil,i,Tombol;
clrscr();
do{
clrscr();
printf("######### MENU #########\n");
printf("1. Menghidupkan semua lampu pijar\n");
printf("2. Mematikan semua lampu pijar\n");
printf("3. Menghidupkan lampu pijar berdasarkan tombol fungsi\n");
printf("4. Keluar\n\n\n");
printf("Pilih menu (1-4): ");
Pil=getch();
switch(Pil){
case '1': clrscr();
printf("Sedang menghidupkan semua lampu pijar...\n");
gotoxy(1,25);printf("Tekan sembarang tombol...");
outportb(0x378,0xFF);
outportb(0x37a,0x04);
getch();break;
case '2': clrscr();
printf("Sedang mematikan semua lampu pijar...\n");
gotoxy(1,25);printf("Tekan sembarang tombol...");
outportb(0x378,0x00);
outportb(0x37a,~0x04);
getch();break;
case '3': do{
clrscr();
printf("Tekan tombol F1-F12\n\n");
Tombol=getch();
i=Tombol-0x3b;
if((i>=0)&&(i<=3))
outportb(0x378,inportb(0x378)^(char)pow(2,i));
gotoxy(1,25);printf("Tekan tombol Esc untuk ke menu utama...");
}while(Tombol!=0x1b);break;
}
}while(Pil!='4');
}

/* ==========================
Program: STEPPER.C
Pengendalian motor stepper
========================== */

#include <stdio.h>

void Putar_sudut(int arah,int sudut)


{ unsigned char Data[]={9,12,6,3},Putar[4];
unsigned char i,j;
if(arah==0)
for(j=0;j<4;j++)
Putar[j]=Data[j];
else
for(j=0;j<4;j++)

31
Putar[3-j]=Data[j];

for(i=0;i<(int)(50*sudut/360);i++)
for(j=0;j<4;j++){
outportb(0x378,Putar[j]);
delay(200);
}
}

void Putar_biasa(int arah,float x)


{ unsigned char Data[]={9,12,6,3},Putar[4];
unsigned char i,j;
if(arah==0)
for(j=0;j<4;j++)
Putar[j]=Data[j];
else
for(j=0;j<4;j++)
Putar[3-j]=Data[j];

for(i=0;i<(int)(50*x);i++)
for(j=0;j<4;j++){
outportb(0x378,Putar[j]);
sound((int)x*1000);delay(200);nosound();
}
}

main()
{ char Pil;
float x;
int sudut;
do{
clrscr();
printf("*** Pengendalian motor stepper ***\n\n");
printf("Pilihan:\n");
printf("1. Putar CW 1 kali\n");
printf("2. Putar CCW 1 kali\n");
printf("3. Putar CW n kali\n");
printf("4. Putar CCW n kali\n");
printf("5. Putar CW menurut sudut\n");
printf("6. Putar CCW menurut sudut\n");
printf("7. Selesai\n");
printf("Pilihan Anda: ");
Pil=getch();
switch(Pil){
case '1': Putar_biasa(0,1);break;
case '2': Putar_biasa(1,1);break;
case '3': clrscr();
printf("Berapa putaran: :");
scanf("%f",&x);
Putar_biasa(0,x);break;
case '4': clrscr();
printf("Berapa putaran: ");
scanf("%f",&x);
Putar_biasa(1,x);break;
case '5': clrscr();
printf("Sudut putar: ");
scanf("%d",&sudut);
Putar_sudut(0,sudut);break;
case '6': clrscr();
printf("Sudut putar: ");
scanf("%d",&sudut);
Putar_sudut(1,sudut);break;
default:;
}
}while(Pil!='7');

32
/* **********************************************
Program TRFLGHT.C
Pengendalian Traffic Light pada Simpang Empat
**********************************************
*/

#include <stdio.h>
#include <dos.h>

#define Data 0x378 /* Alamat port Data */


#define Control Data+2 /* Alamat port Control */

main()
{
unsigned char PD[] = {0x4C,0x4A,0x61,0x51,0x09,0x89,0x49,0x49};
unsigned char PC[] = {0x09,0x09,0x09,0x09,0x08,0x09,0x03,0x0F};
char i=0;

clrscr();
outportb(Data,0x00); /* matikan semua LED0 - LED7 */
outportb(Control,0x0B); /* matikan semua LED8 - LED11 */
do {
outportb(Data,PD[i]); /* hidupkan LED menurut pola urutan */
outportb(Control,PC[i]); /* hidupkan LED menurut pola urutan */
i%2==0 ? delay(5000) : delay(1000); /* atur lama nyala LED */
i==7 ? i=0 : i++; /* ulang untuk pola berikutnya */
} while(!kbhit()); /* ulang terus selama tidak ada
penekanan tombol */
outportb(Data,0x00); /* matikan semua LED */
}

/* **************************************
Program LDR.C
Detektor cahaya dengan LDR
**************************************
*/
#include <stdio.h>
#include <dos.h>

#define Data 0x378 /* Alamat port Data */


#define Status Data+1 /* Alamat port Status */
#define Control Data+2 /* Alamat port Control */

void Berkedip()
{
unsigned char i;

i=inportb(Data); /* baca keadaan LED */


if(i==0x00) /* jika semua LED mati */
outportb(Data,0x0F); /* hidupkan semua LED; */
else /* jika tidak, */
outportb(Data,0x00); /* matikan semua LED */
}

main()
{
char i=0;

clrscr();
outportb(Control,0x00); /* memberikan Vcc pada transistor */
outportb(Data,0x00); /* matikan semua LED */
do {
i=inportb(Status); /* baca port status */
if((i^0x80)&0x80!=0) /* jika PS7=1, maka */
outportb(Data,0x0F); /* hidupkan semua LED */
else /* kalau tidak, */
Berkedip(); /* buat LED berkedip */

33
delay(1000); /* tunda */
} while(!kbhit()); /* ulang terus selama tidak ada
penekanan tombol */
outportb(Data,0x00); /* matikan semua LED */
}

34
LAMPIRAN 2
LISTING PROGRAM APLIKASI
DENGAN VISUAL BASIC

‘ =================
‘ Program: Demo LED
‘ =================

Private Declare Sub PortOut Lib "IO.DLL" (ByVal PortNo As Integer, ByVal Data As
Byte)
Private Declare Function PortIn Lib "IO.DLL" (ByVal PortNo As Integer) As Byte
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub Check1_Click(Index As Integer)


Dim X As Byte
X = 2 ^ (Index - 9)
If Index < 9 Then
If Check1(Index).Value = 1 Then
PortOut &H378, PortIn(&H378) Or (2 ^ (Index - 1))
Shape1(Index).BackColor = &HFF
Shape1(Index).BackStyle = 1
Else
PortOut &H378, PortIn(&H378) Xor (2 ^ (Index - 1))
Shape1(Index).BackColor = &H80000005
Shape1(Index).BackStyle = 0
End If
Else
If Check1(Index).Value = 1 Then
If Index = 11 Then
PortOut &H37A, PortIn(&H37A) Or X ' ??
Else
PortOut &H37A, PortIn(&H37A) Xor X ' ??
End If
Shape1(Index).BackColor = &HFF
Shape1(Index).BackStyle = 1
Else
If Index = 11 Then
PortOut &H37A, PortIn(&H37A) Xor X ' ??
Else
PortOut &H37A, PortIn(&H37A) Or X ' ??
End If
Shape1(Index).BackColor = &H80000005
Shape1(Index).BackStyle = 0
End If
End If
End Sub

Private Sub Command1_Click() 'Hidupkan semua LED


PortOut &H378, &HFF
PortOut &H37A, &H4
End Sub

Private Sub Command2_Click() 'Matikan semua LED


PortOut &H378, &H0
PortOut &H37A, &HB
End Sub

Private Sub Command3_Click() 'Hidupkan LED melingkar


Do
DoEvents
For i = 0 To 7
DoEvents
PortOut &H378, 2 ^ i
Sleep 100
Next

35
PortOut &H378, 0

For i = 0 To 3
DoEvents
PortOut &H37A, (2 ^ i) Xor &HB
Sleep 100
Next
PortOut &H37A, &HB
Loop
PortOut &H378, 0
PortOut &H37A, &HB
End Sub

Private Sub Command4_Click() 'Hidupkan LED memantul


Do
DoEvents
For i = 0 To 7
DoEvents
PortOut &H378, 2 ^ i
Sleep 100
Next
PortOut &H378, 0

For i = 0 To 3
DoEvents
PortOut &H37A, (2 ^ i) Xor &HB
Sleep 100
Next
PortOut &H37A, &HB

For i = 3 To 0 Step -1
DoEvents
PortOut &H37A, (2 ^ i) Xor &HB
Sleep 100
Next
PortOut &H37A, &HB

For i = 7 To 0 Step -1
DoEvents
PortOut &H378, 2 ^ i
Sleep 100
Next
PortOut &H378, 0
Loop
PortOut &H378, 0
PortOut &H37A, &HB
End Sub

Private Sub Command5_Click() 'LED berkedip terus


Do
DoEvents
PortOut &H378, &HFF
PortOut &H37A, &H4
Sleep 200
PortOut &H378, 0
PortOut &H37A, &HB
Sleep 200
Loop
End Sub

‘ ===========================
‘ Program: Demo Seven-Segment
‘ ===========================

Private Declare Sub PortOut Lib "IO.DLL" (ByVal PortNo As Integer, ByVal Data As
Byte)

36
Private Declare Function PortIn Lib "IO.DLL" (ByVal PortNo As Integer) As Byte
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Dim Angka(16) As Byte


Dim Data As Integer, Control As Integer
Option Explicit

Public Sub Command1_Click()


Dim i As Byte
i = 1
Data = &H378
Control = &H37A
Angka(1) = &HC0: Angka(2) = &HF9: Angka(3) = &HA4: Angka(4) = &HB0
Angka(5) = &H99: Angka(6) = &H92: Angka(7) = &H82: Angka(8) = &HF8
Angka(9) = &H80: Angka(10) = &H90: Angka(11) = &H88: Angka(12) = &H83
Angka(13) = &HC6: Angka(14) = &HA1: Angka(15) = &H86: Angka(16) = &H8E

Do
DoEvents
PortOut Data, Angka(i)
PortOut Control, (16 - i) Xor &HB
Sleep 1
'PortOut Data, &HFF
If i = 16 Then i = 1 Else i = i + 1
Loop
PortOut Data, &HFF
End Sub

Private Sub Command2_Click()


Dim i As Byte
Data = &H378
Control = &H37A
Angka(1) = &HC0: Angka(2) = &HF9: Angka(3) = &HA4: Angka(4) = &HB0
Angka(5) = &H99: Angka(6) = &H92: Angka(7) = &H82: Angka(8) = &HF8
Angka(9) = &H80: Angka(10) = &H90: Angka(11) = &H88: Angka(12) = &H83
Angka(13) = &HC6: Angka(14) = &HA1: Angka(15) = &H86: Angka(16) = &H8E

Dim A(16) As Byte


Dim jam, menit, detik
Dim Sekarang
Do
DoEvents
jam = Hour(Now)
menit = Minute(Now)
detik = Second(Now)
Text1.Enabled = True
Text1.Text = CStr(Time) & " WIB"
Text2.Enabled = False
Text3.Enabled = False
A(1) = jam \ 10
A(2) = jam Mod 10
A(3) = &HBF
A(4) = menit \ 10
A(5) = menit Mod 10
A(6) = &HBF
A(7) = detik \ 10
A(8) = detik Mod 10
A(9) = &HFF
A(10) = &HFF
A(11) = &HFF
A(12) = &HFF
A(13) = &H8C
A(14) = &HC0
A(15) = &HC7
A(16) = &HCF
For i = 1 To 16
If i = 3 Or i = 6 Or i >= 9 Then
PortOut Data, A(i)
Else

37
PortOut Data, Angka(A(i) + 1)
End If
PortOut Control, (16 - i) Xor &HB
Sleep 1
'PortOut Data, &HFF
Next
Loop
End Sub

Private Sub Command3_Click()


Dim Huruf(11) As Byte
Huruf(0) = &H8C: Huruf(1) = &HC0: Huruf(2) = &HC7: Huruf(3) = &HCF: Huruf(4) =
&H87: Huruf(5) = &H86
Huruf(6) = &H8A: Huruf(7) = &HC8: Huruf(8) = &HCF: Huruf(9) = &H8A: Huruf(10) =
&HFF
Dim i, j
Data = &H378
Control = &H37A
Do
DoEvents
For i = 0 To 15
For j = 0 To 10
PortOut Data, Huruf(j)
PortOut Control, ((i + 10 - j) Mod 16) Xor &HB
Sleep 1
Next j
Sleep 10
Next i
Loop
End Sub

Private Sub Command4_Click()


Dim i As Byte
Data = &H378
Control = &H37A
Angka(0) = &HC0: Angka(1) = &HF9: Angka(2) = &HA4: Angka(3) = &HB0
Angka(4) = &H99: Angka(5) = &H92: Angka(6) = &H82: Angka(7) = &HF8
Angka(8) = &H80: Angka(9) = &H90

Dim A(16) As Byte


Dim tgl, bln, thn As Integer
Do
DoEvents
tgl = Day(Date)
bln = Month(Date)
thn = Year(Date)
Text1.Enabled = False
Text2.Enabled = True
Text2.Text = Format(Date, "dd-mm-yyyy")
Text3.Enabled = False
A(0) = tgl \ 10
A(1) = tgl Mod 10
A(2) = &HBF
A(3) = bln \ 10
A(4) = bln Mod 10
A(5) = &HBF
A(6) = thn \ 1000
A(7) = (thn Mod 1000) \ 100
A(8) = ((thn Mod 1000) Mod 100) \ 10
A(9) = thn Mod 1000 Mod 100 Mod 10
A(10) = &HFF
A(11) = &HFF
A(12) = &H8C
A(13) = &HC0
A(14) = &HC7
A(15) = &HCF
For i = 0 To 15
If i = 2 Or i = 5 Or i >= 10 Then
PortOut Data, A(i)

38
Else
PortOut Data, Angka(A(i))
End If
PortOut Control, (15 - i) Xor &HB
Sleep 1
'PortOut Data, &HFF
Next
Loop
End Sub

Private Sub Command5_Click()


Data = &H378
Control = &H37A
Angka(0) = &HC0: Angka(1) = &HF9: Angka(2) = &HA4: Angka(3) = &HB0
Angka(4) = &H99: Angka(5) = &H92: Angka(6) = &H82: Angka(7) = &HF8
Angka(8) = &H80: Angka(9) = &H90

Dim A(7) As Byte


Dim X As Long
Dim i As Byte
X = 0
Do
DoEvents
Text1.Enabled = False
Text2.Enabled = False
Text3.Enabled = True
Text3.Text = CStr(X)
A(0) = X \ 1000000
A(1) = (X Mod 1000000) \ 100000
A(2) = ((X Mod 1000000) Mod 100000) \ 10000
A(3) = (((X Mod 1000000) Mod 100000) Mod 10000) \ 1000
A(4) = ((((X Mod 1000000) Mod 100000) Mod 10000) Mod 1000) \ 100
A(5) = (((((X Mod 1000000) Mod 100000) Mod 10000) Mod 1000) Mod 100) \ 10
A(6) = X Mod 1000000 Mod 100000 Mod 10000 Mod 1000 Mod 100 Mod 10

For i = 0 To 6
PortOut Data, Angka(A(i))
PortOut Control, (15 - i) Xor &HB
Sleep 1
'PortOut Data, &HFF
Next
If X = 10000000 Then X = 0 Else X = X + 50000
Loop

End Sub

‘ ===========================
‘ Program: Demo Lampu Pijar
‘ ===========================

Private Declare Sub PortOut Lib "IO.DLL" (ByVal PortNo As Integer, ByVal Data As
Byte)
Private Declare Function PortIn Lib "IO.DLL" (ByVal PortNo As Integer) As Byte
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub Command1_Click() 'Hidupkan semua Lampu


PortOut &H378, &HFF
End Sub

Private Sub Command2_Click() 'Matikan semua Lampu


PortOut &H378, &H0
End Sub

Private Sub Command3_Click() 'Hidupkan Lampu melingkar


Do
DoEvents

39
For i = 0 To 3
DoEvents
PortOut &H378, 2 ^ i
Sleep 100
Next
Loop
PortOut &H378, 0
End Sub

Private Sub Command4_Click() 'Hidupkan Lampu memantul


Do
DoEvents
For i = 0 To 3
DoEvents
PortOut &H378, 2 ^ i
Sleep 100
Next
For i = 2 To 1 Step -1
DoEvents
PortOut &H378, 2 ^ i
Sleep 100
Next
Loop
PortOut &H378, 0
End Sub

Private Sub Command5_Click() 'Lampu berkedip terus


Do
DoEvents
PortOut &H378, &HFF
Sleep 200
PortOut &H378, 0
Sleep 200
Loop
End Sub

‘ ===========================
‘ Program: Demo Motor Stepper
‘ ===========================

Private Declare Sub PortOut Lib "IO.DLL" (ByVal PortNo As Integer, ByVal Data As
Byte)
Private Declare Function PortIn Lib "IO.DLL" (ByVal PortNo As Integer) As Byte
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub Command1_Click() ‘Berputar 1 putaran


Dim Data(4) As Byte
Dim I,j As Byte
Data(1) =9: Data(1) =12: Data(1) =6: Data(1) =3
Do
DoEvents
For j=1 to 50
For i=1 to 4
PortOut &H378,Data(i)
Sleep 1000
Next
Next
Loop
PortOut &H378,0
End Sub

40
41

Anda mungkin juga menyukai