1. ###################################################
# Program Delphi : Menghidupkan Dan Mematikan Led #
###################################################
Pembuatan program Bahasa Delphi komunikasi paralel dengan menggunakan komponen io.dll,
untuk menghidupkan dan mematikan LED.
Perhatikan pada gambar 20 tersebut. Delapan buah LED terhubung ke port 0, yang difungsikan
sebagai output. Pada konfigurasi tersebut LED akan nyala bila diberi logika LOW ‘0’ melalui
port 0, dan LED akan padam bila diberi logika HIGH ‘1’ melalui port 0.
Gambar 20. Rangkaian LED
2. Percobaan ON OFF 8 buah LED secara bersamaan
Rencanakan program untuk menghidupkan dan mematikan LED 8 buah, dengan menekan
tombol ON dan OFF, pada komunikasi paralel. Lakukan sesuai dengan langkah-langkah berikut
ini:
1. Hubungkan kabel paralel pada port paralel komputer ke rangkaian LED.
2. Rencanakan program dengan tampilan sebagai berikut.
Gambar 21. Tombol ON dan OFF
LISTING PROGRAM
implementation
{$R *.dfm}
procedure PortOut(Port : Word; Data : Byte); stdcall; external 'io.dll';
procedure TForm1.Button1Click(Sender: TObject);
begin
portout($378,0);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
portout($378,255);
end;
3. ######################################
# Program Visual Basic : Rangkaian LED #
######################################
Dibutuhkan suatu cara agar VB bisa melakukan akses perangkat keras. Salah satunya
dengan lib io.dll, yang bisa didownload dari http://www.geekhideout.com/iodll.shtml secara
gratis, yang harus disimpan atau ditempatkan pada folder C:/windows/system32 pada komputer.
Cara penggunaannya sangat mudah, pertama definisikan terlebih dahulu fungsi dan
prosedur untuk akses masukan maupun keluaran perangkat keras pada bagian modul khusus VB
sebagai berikut:
Public Declare Sub PortOut Lib "io.dll" _
(ByVal Port As Integer, ByVal Data As Byte)
Public Declare Sub PortWordOut Lib "io.dll" _
(ByVal Port As Integer, ByVal Data As Integer)
Public Declare Sub PortDWordOut Lib "io.dll" _
(ByVal Port As Integer, ByVal Data As Long)
Public Declare Function PortIn Lib "io.dll" _
(ByVal Port As Integer) As Byte
Public Declare Function PortWordIn Lib "io.dll" _
(ByVal Port As Integer) As Integer
Public Declare Function PortDWordIn Lib "io.dll" _
(ByVal Port As Integer) As Long
Public Declare Sub SetPortBit Lib "io.dll" _
(ByVal Port As Integer, ByVal Bit As Byte)
Public Declare Sub ClrPortBit Lib "io.dll" _
(ByVal Port As Integer, ByVal Bit As Byte)
Public Declare Sub NotPortBit Lib "io.dll" _
(ByVal Port As Integer, ByVal Bit As Byte)
Public Declare Function GetPortBit Lib "io.dll" _
(ByVal Port As Integer, ByVal Bit As Byte) As Boolean
Public Declare Function RightPortShift Lib "io.dll" _
4. (ByVal Port As Integer, ByVal Val As Boolean) As Boolean
Public Declare Function LeftPortShift Lib "io.dll" _
(ByVal Port As Integer, ByVal Val As Boolean) As Boolean
Public Declare Function IsDriverInstalled Lib "io.dll" () As Boolean
Kedua tinggal penggunaan fungsi dan prosedur tersebut secara biasa, fungsi PortIn
membutuhkan dua parameter yaitu alamat perangkat keras dan variabel hasil pembacaan data
dari perangkat keras dengan tipe data byte. Sedangkan prosedur PortOut membutuhkan dua
parameter juga yaitu alamat perangkat keras dan nilai atau variabel yang menyimpan nilai yang
akan dikirimkan ke perangkat keras yang bersangkutan.
PortOut : Mengirim data dalam format byte (8-bit) ke port tertentu.
PortWordOut : Mengirim data dalam format word (16-bit) ke port tertentu.
PortDWordOut : Mengirim data dalam format double word (32-bit) ke port tertentu.
PortIn : Membaca data falam format byte (8-bit) dari port tertentu.
PortWordIn : Membaca data falam format word (16-bit) dari port tertentu.
PortDWordIn : Membaca data falam format double word (32-bit) dari port tertentu.
GetPortBit : Membaca status dari bit tertentu.
SetPortBit : Set bit (=1) pada port tertentu.
ClrPortBit : Reset bit (=0) pada port tertentu.
NotPortBit : Lakukan inversi (NOT) bit pada port tertentu
RightPortShift : Geser bit dari port tertentu ke kanan, LSBMSB.
LeftPortShift : Geser bit dari port tertentu ke kiri, MSB LSB.
IsDriverInstalled : Akan memberikan nilai bukan-NOL jika io.dll sudah terinstal dan
berfungsi. Tujuan utama dari fungsi ini adalah untuk memastikan
bahwa penggerak mode kernel pada NT/2000/XP telah diinstal dan
dapat diakses.
Pemograman LED Driver adalah sebuah program yang digunakan untuk melakukan
pengontrolan nyala LED melalui port paralel. Program ini memerlukan rangkaian LED driver
yang dipasangkan pada port paralel dan program LED driver untuk menjalankannya.
Rangkaian LED Driver berikut digunakan untuk interfacing LED dengan port Paralel :
5. Gambar 25. Rangkaian LED Driver
PEMOGRAMAN LED DRIVER untuk Menghidupkan dan mematikan LED
Program ini digunakan untuk mematikan dan menghidupkan LED-LED yang terpasang pada
pin-pin data secara bersama-sama. Menggunakan bantuan komponen CheckBox, Anda bisa
mengganti dengan komponen lainnya selama bisa digunakan untuk proses Toggle (ON-OFF
secara bergantian). Status dari LED langsung ditunjukkan pada komponen tersebut.
Gambar 26. Tampilan Program menghidupkan dan mematikan LED
KOMPONEN VISUAL BASIC
Komponen Properti Subroutin
Form Name : Form1
Caption : Led Driver1
Private Sub Form_Load()
CheckBox Name : Check1
Caption : ON/OFF
Private Sub Check1_Click()
CommandButton Name : Command1
Caption : Keluar
Private Sub Command1_Click()
6. LISTING PROGRAM
Private Sub Form_Load()
If Not IsDriverInstalled Then
MsgBox "error", vbOKOnly
Unload Me
End If
End Sub
Private Sub Check1_Click()
If Check1.Value = 1 Then
PortOut &H378, &HFF
Check1.Caption = "Lampu ON semua"
Else
PortOut &H378, &H0
Check1.Caption = "Lampu OFF semua"
End If
End Sub
Private Sub Command1_Click()
Unload Me
End Sub
7. CONTOH PROGRAM
################################################
# Program C : Antarmuka LCD dengan Port Paralel #
################################################
Modul LCD yang tersedia dalam berbagai macam seperti 8x1, 8x2 16x1, 16x2, 20x2, 20x4, 40x4. Di sini
kita telah menggunakan 16x2 - yang berarti 2 baris 16 karakter. Ini adalah Hitachi HD44780 modul yang
kompatibel, memiliki 16 pin termasuk 2 pin untuk lampu latar.
Tabel berikut memberikan struktur pin modul LCD. Modul LCD tanpa backlight hanya akan memiliki 14
pin. Jika Anda menggunakan LCD seperti, mengabaikan pin 15 dan 16.
Tabel 7. Pin LCD
Untuk program modul LCD, pertama kita harus menginisialisasi LCD dengan mengirimkan beberapa kata
kontrol. RS harus rendah dan E harus tinggi ketika kita mengirim kontrol. R / W pin 0 berarti data
menulis atau kontrol ke LCD dan R / W pin 1 berarti membaca data dari LCD. Untuk mengirim data ke
LCD, membuat RS tinggi, R / W rendah, menempatkan data di pin 7 sampai 14 dan membuat E pin tinggi
dan rendah sekali. Anda dapat memahami metode yang tepat setelah melihat kode, kemudian dalam
tutorial ini. Di sini, kita akan menulis pada modul LCD dan tidak membaca kembali. Jadi, R / W adalah
secara langsung terhubung ke ground. Kita tidak perlu harus masukan data melalui, sehingga semua pin
output yang digunakan dalam aplikasi kita. Data pin LCD yang terhubung ke pin data port. Strobe sinyal
(Pin 1 dari konektor D25) diberikan ke E (Pin 6 LCD), Pilih printer (Pin 17 dari D25) terhubung ke RS (pin 4
dari LCD).
8. Gambar 17. Rangkaian Modul LCD Dengan DB25
Dalam diagram di atas, modul LCD dihubungkan ke port LPT menggunakan D25 konektor laki-laki.
Nomor pin 3 dari LCD adalah untuk menyesuaikan kontras, dihubungkan sedemikian rupa sehingga
dapat bervariasi dari 0V ke 5V.
Jika semuanya OK, Anda harus mendapatkan modul LCD sebagai berikut ketika berada dalam posisi ON.
Gambar 18. LCD Dalam Posisi ON
Jika Anda mendapatkan layar ini, maka kita dapat memulai pemrograman. Jika tidak periksa koneksi
Anda, cobalah dengan memvariasikan potensiometer 10K. Jika Anda mendapatkan tampilan ini juga,
Anda bisa mendapatkan kejelasan maksimum dengan memvariasikan pot. Bagi saya, pot yang
diperlukan untuk menjadi hampir 0V. Jadi, itu adalah OK jika Anda tidak menggunakan pot juga, hanya
menghubungkan pin 3 ke ground.
Tabel berikut menjelaskan bagaimana untuk menulis kata-kata control Ketika RS = 0 dan R / W = 0, data
dalam pin D0 untuk D7 akan memiliki arti sebagai berikut.
9. Tabel 8. Deskripsi Kontrol LCD
LISTING PROGRAM
#include <dos.h>
#include <string.h>
#include <conio.h>
#include <time.h>
#define PORTADDRESS 0x378 /* Enter Your Port Address Here */
#define DATA PORTADDRESS+0
#define STATUS PORTADDRESS+1
#define CONTROL PORTADDRESS+2
void lcd_init(void);
void lcd_write(char char2write);
void lcd_putch(char char2write);
void lcd_puts(char * str2write);
void lcd_goto(int row, int column);
void lcd_clear(void);
void lcd_home(void);
void lcd_cursor(int cursor);
void lcd_entry_mode(int mode);
void main(void)
{
lcd_init();
lcd_goto(1,1);
lcd_puts("Welcome To");
lcd_goto(1,0);
lcd_puts("electroSofts.com");
10. while(!kbhit() ) //wait until a key is pressed...
{}
}
void lcd_init()
{
outportb(CONTROL, inportb(CONTROL) & 0xDF);
//config data pins as output
outportb(CONTROL, inportb(CONTROL) | 0x08);
//RS is made high: control (register select)
lcd_write(0x0f);
delay(20);
lcd_write( 0x01);
delay(20);
lcd_write( 0x38);
delay(20);
}
void lcd_write(char char2write)
{
outportb(DATA, char2write);
outportb(CONTROL,inportb(CONTROL) | 0x01); /* Set Strobe */
delay(2);
outportb(CONTROL,inportb(CONTROL) & 0xFE); /* Reset Strobe */
delay(2);
}
void lcd_putch(char char2write)
{
outportb(CONTROL, inportb(CONTROL) & 0xF7);
//RS=low: data
lcd_write(char2write);
}
void lcd_puts(char *str2write)
{
outportb(CONTROL, inportb(CONTROL) & 0xF7);
//RS=low: data
11. while(*str2write)
lcd_write(*(str2write++));
}
void lcd_goto(int row, int column)
{
outportb(CONTROL, inportb(CONTROL) | 0x08);
if(row==2) column+=0x40;
/* Add these if you are using LCD module with 4 columns
if(row==2) column+=0x14;
if(row==3) column+=0x54;
*/
lcd_write(0x80 | column);
}
void lcd_clear()
{
outportb(CONTROL, inportb(CONTROL) | 0x08);
lcd_write(0x01);
}
void lcd_home()
{
outportb(CONTROL, inportb(CONTROL) | 0x08);
lcd_write(0x02);
}
void lcd_entry_mode(int mode)
{
/*
if you dont call this function, entry mode sets to 2 by default.
mode: 0 - cursor left shift, no text shift
1 - no cursor shift, text right shift
2 - cursor right shift, no text shift
3 - no cursor shift, text left shift
*/
outportb(CONTROL, inportb(CONTROL) | 0x08);
lcd_write(0x04 + (mode%4));
12. }
void lcd_cursor(int cursor)
{
/*
set cursor: 0 - no cursor, no blink
1 - only blink, no cursor
2 - only cursor, no blink
3 - both cursor and blink
*/
outportb( CONTROL, inportb(CONTROL) | 0x08 );
lcd_write( 0x0c + (cursor%4));
}
Dan Output Program Seperti Berikut :
Gambar 19. Output
APLIKASI SEVEN SEGMENT TERMULTIPLEKS DENGAN BASCOM
Posted by iswanto
Rangkaian seven segment termultipleks Seven Segment adalah rangkaian untuk menggerakkan 4 buah
penampil 7 segment secara langsung dari port keluaran mikrokontroller dengan data input Seven
Segment.Lebih jelas klik disini
13. 4.1. APLIKASI SEVEN SEGMENT TERMULTIPLEKS
Rangkaian seven segment termultipleks Seven Segment adalah rangkaian untuk menggerakkan 4 buah
penampil 7 segment secara langsung dari port keluaran mikrokontroller dengan data input Seven
Segment.
Gambar 4.1. Rangkaian aplikasi penggerak seven segmen termultipleks
4.4.1. PEMROGRAMAN SEVENT SEGMENT TERMULTIPLEKS
Setelah rangkaian sevent segment dibuat dan dihubungkan dengan port pararel mikrokontroller, maka
sekarang saatnya Anda membuat program yang digunakan untuk menampilkan data 1512 dan 4123
pada seven segment.
Program sebagai berikut ini
RST
P1_3
10
9
7
5
4
2
1
8
VCC
P2.3
P2.0
P0.1
P1_1
P0.2
R2
4K7
P1_7
P0.2
X1
12MHz
VCC
RST
VCC
RST
RESET
RST
U5
4511
7
1
2
6
3
4
5
13
12
11
10
9
15
14
A
B
C
D
LT
BI
LE
A
B
C
D
E
F
G
U5
4511
7
1
2
6
3
4
5
13
12
11
10
9
15
14
A
B
C
D
LT
BI
LE
A
B
C
D
E
F
G
C3
10u
P2.2
R_PULL UP
1
2
3
4
5
P1_2
P1_0
D3
1N4002
AC
VCC
P1_5
P0.1
P1_4
VCC
C7
30p
RST
VCC
JP4
HEADER 5
1
2
3
4
5
GND
RST
10
9
7
5
4
2
1
8
VCC
P0.3
P2.1
U5
4511
7
1
2
6
3
4
5
13
12
11
10
9
15
14
A
B
C
D
LT
BI
LE
A
B
C
D
E
F
G
10
9
7
5
4
2
1
8
10
9
7
5
4
2
1
8
P1_6
C6
30p
VCC
P0.0
P0.0
RST
VCC
U5
4511
7
1
2
6
3
4
5
13
12
11
10
9
15
14
A
B
C
D
LT
BI
LE
A
B
C
D
E
F
G
U8
AT89S51
9
18
19
29
30
31
1
2
3
4
5
6
7
8
21
22
23
24
25
26
27
28
10
11
12
13
14
15
16
17
39
38
37
36
35
34
33
32
RST
XTAL2
XTAL1
PSEN
ALE/PROG
EA/VPP
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
P2.0/A8
P2.1/A9
P2.2/A10
P2.3/A11
P2.4/A12
P2.5/A13
P2.6/A14
P2.7/A15
P3.0/RXD
P3.1/TXD
P3.2/INT0
P3.3/INT1
P3.4/T0
P3.5/T1
P3.6/WR
P3.7/RD
P0.0/AD0
P0.1/AD1
P0.2/AD2
P0.3/AD3
P0.4/AD4
P0.5/AD5
P0.6/AD6
P0.7/AD7
P0.3
VCC
RSTRST
14. '--------------------------------------------------------
'Program Bab 4.5 7-Segment Multiplekser Menyala
'--------------------------------------------------------
'DEKLARASI Cristal
'--------------------------------------------------------
$crystal = 12000000
'--------------------------------------------------------
'DEKLARASI Header
$regfile = "REG51.dat"
'--------------------------------------------------------
'DEKLARASI VARIABEL
Dim Ribuan1 As Integer
Dim Ribuan2 As Integer
Dim Ratusan1 As Integer
Dim Ratusan2 As Integer
Dim Puluhan1 As Integer
Dim Puluhan2 As Integer
Dim Data3 As Integer
Dim Data2 As Integer
Dim Data1 As Integer
Dim Data0 As Integer
Dim Datae As Integer
Dim Dataku As Integer
'--------------------------------------------------------
'DEKLARASI RUTIN
Declare Sub Displaysegment()
Declare Sub Segment()
'--------------------------------------------------------
'rutin utama
Do
Dataku = 1512
Call Displaysegment()
Wait 5
Dataku = 4385
Call Displaysegment()
Wait 5
Loop
End
'--------------------------------------------------------
' Rutin BCD
Sub Displaysegment()
Data3 = Dataku / 1000
Ribuan1 = Data3 * 1000
Ribuan2 = Dataku - Ribuan1
Data2 = Ribuan2 / 100
Ratusan1 = Data2 * 100
Ratusan2 = Ribuan2 - Ratusan1
Data1 = Ratusan2 / 10
15. Puluhan1 = Data1 * 10
Puluhan2 = Ratusan2 - Puluhan1
Data0 = Puluhan2
Datae = Data3
P0 = 14
Call Segment()
Datae = Data2
P0 = 13
Call Segment()
Datae = Data1
P0 = 11
Call Segment()
Datae = Data0
P0 = 7
Call Segment()
End Sub
'--------------------------------------------------------
' Rutin Segment
Sub Segment()
Select Case Datae
Case 0 : P2 = 0
Case 1 : P2 = 1
Case 2 : P2 = 2
Case 3 : P2 = 3
Case 4 : P2 = 4
Case 5 : P2 = 5
Case 6 : P2 = 6
Case 7 : P2 = 7
Case 8 : P2 = 8
Case 9 : P2 = 9
End Select
End Sub