Bagi sobat yang senang dengan pembuatan peraga
berupa LED matriks, kadang mengalami sedikit kesulitan dalam pembuatan data
yang harus ditetapkan untuk ditampilkan. Hal seperti ini juga dialami oleh
penulis. Tapi setiap kesulitan pasti ada solusi untuk mempermudahnya.
Di sini penulis akan menyajikan artikel
tentang pembuatan data atau membaca data yang ada menggunakan Visual Basic.
Ada 2 cara konversi yang diperlukan untuk mempermudah
mencari nilai dari data.
Pertama mengkonversi dari data bilangan heksadesimal
atau desimal ke bentuk tampilan LED matriks. Pada aplikasi sobat dapat secara
langsung memasukkan bilangan baik dalam format heksadesimal ataupun bilangan
desimal, setiap data yang dimasukkan akan secara lagsung ditampilkan pada
simulasi LED matriks. Jika input data dimasukkan pada kotak Heksadesimal secara
otomatis akan lansung juga dikonversi dalam bentuk desimal atau sebaliknya.
Kedua yaitu mengkonversi dari pola LED matriks
yang dibuat ke bilangan heksadesimal atau desimal. Sobat cukup menggunakan
mouse dan klik pada bulatan LED matriks yang diinginkan secara togel. Hasilnya
dari klik pada setiap LED matriks akan langsung menghasilkan nilai yang
bersesuaian dalam bentuk heksadesimal maupun desimal.
Berikut adalah tampilan dari aplikasi yang
dibuat pada saat pertama kali dijalankan.
Untuk memperoleh nilai bilangan heksa dan
desimal yang diinginkan, misalkan mencari data bertuliskan “Si”, maka kita
dapat melakukannya dengan klik mouse pada baris kolom matriks yang dimaksudkan
sehingga membentuk seperti berikut ini.
Pada gambar sebelah kiri diperlihat nilai data
yang tertera pada kondisi LED matrik dihidupkan pada aktif tinggi (active
high). Sehingga urutan data yang membentuk karakter “S” adalah 26H, 49H, 49H,
49H dan 32H dalam heksadesimal dan nilai desimalnya 38, 73, 73, 73,50. Pada
gambar bagian tengah kiri adalah sebaliknya untuk LED matrik aktif rendah.
Gambar selanjutnya pada bagian kanan
memperlihatkan jika urutan bit data dimulai dari MSB sebagai sisi atas dari
tampilan matriks.
Dari gambar di atas memperlihatkan hasil
tampilan LED matriks yang sama yaitu “Si” namun jika dilihat ternyata nilai bilangan
data yang dihasilkan berbeda-beda. Hal tersebut tergantung dari penggunaan logika
gerbang data untuk menggerakkan LED, apakah secara aktif tinggi (common katoda)
atau aktif rendah common anoda). Orientasi bit LSB dan MSB juga mempengaruhi
hasil nilai data.
Jadi aplikasi menampilkan 4 posisi dari
tampilan matriks yang mungkin dari data bilangan yang akan digunakan.
Nah, untuk membuat aplikasi di atas dapat
dilakukan dengan menggunakan Visual Basic. Langkah pertama setelah sobat
membuka aplikasi VB maka perlu dilakukan beberapa persiapan yaitu pembuatan tampilan
yang diinginkan.
Buatlah 3 buah frame masing-masing diberi
keterangan “LED Matriks”, “Heksadesimal” dan “Desimal” pada properti
caption-nya.
Pada frame “LED Matriks” kita masukkan shape berbentuk
“3 – Circle” dengan sebanyak 8 buah yaitu shpLEDA, shpLEDB dan seterusnya
hingga shpLEDH. Pastikan properti “FillStyle” adalah “0 – Solid”. Kedelapan
shape ini selanjutnya akan di copy-paste untuk mendapatkan array masing-masing
sebanyak 8 yaitu shpLEDA(0) – shpLEDA(7), shpLEDB(0) – shpLEDB(7) dan seterusnya.
Total shape yang membentuk matriks 8 x 8 menjadi 64 buah. Tambahkan juga label
sebanyak 8 buah dengan nama lblData yang dibuat secara array sehingga kita
mendapatkan lblData(0) – lblData(7).
Pada frame “Heksadesimal” kita perlu
memasukkan TextBox yang akan dinamai dengan txtHEX dengan properti “MaxLength”
ditetapkan 2 saja untuk nilai bilangan 0 sampai FF. TextBox ini juga di
copy-paste untuk mendapatkan 8 buah array txtHEX(0) – txtHex(7).
Sama halnya dengan frame “Desimal” yang perlu
dimasukkan TextBox dengan nama txtDES dengan properti MaxLength ditetapkan 3
dan di copy-paste sebanyak 8 array.
Untuk tombol perintah, akan ditambahkan 3 buah
“CommandButton” masing-masing bernama txtInvert dengan caption “HI”, txtPosisi
dengan caption “DN” dan txtReset dengan caption “RST”.
Nah, jika persiapan tampilan sudah dilakukan,
selanjutnya kita perlu memasukkan script yang akan dikerjakan oleh aplikasi.
Option
Explicit
Dim
i As Byte, r As Byte, h As String
Dim
PosX(7) As Double, PosY(7) As Double, PosH As Double, PosW As Double
Private
Sub cmdInvert_Click()
Dim
L As Byte
If cmdInvert.Caption = "HI" Then
cmdInvert.Caption = "LO"
Else
cmdInvert.Caption = "HI"
End If
For L = 0 To 7
txtDES(L).Text = 255 - Val(txtDES(L).Text)
Next L
End
Sub
Private
Sub cmdPosisi_Click()
If cmdPosisi.Caption = "DN" Then
cmdPosisi.Caption = "UP"
r = 8
For i = 0 To 7
r = r - 1
lblData(i).Caption = "D"
& r
Next i
Else
cmdPosisi.Caption = "DN"
For i = 0 To 7
lblData(i).Caption =
"D" & i
Next i
End If
ProsesHeksadesimal
End
Sub
Private
Sub cmdReset_Click()
Dim
rs
For rs = 0 To 7
If cmdInvert.Caption = "HI"
Then txtDES(rs).Text = "0" Else txtDES(rs).Text = "255"
Next rs
End
Sub
Private
Sub Form_Load()
PosW = shpLEDA(0).Width
PosH = shpLEDA(0).Height
PosY(0) = shpLEDA(0).Top
PosY(1) = shpLEDB(0).Top
PosY(2) = shpLEDC(0).Top
PosY(3) = shpLEDD(0).Top
PosY(4) = shpLEDE(0).Top
PosY(5) = shpLEDF(0).Top
PosY(6) = shpLEDG(0).Top
PosY(7) = shpLEDH(0).Top
For i = 0 To 7
PosX(i) = shpLEDA(i).Left
Next i
ProsesHeksadesimal
End
Sub
Private
Sub fraMatriks_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As
Single)
Dim
B As Byte, K As Byte
For i = 0 To 7
If X > PosX(i) And X < PosX(i) +
PosW Then K = i + 1: Exit For
Next i
For i = 0 To 7
If Y > PosY(i) And Y < PosY(i) +
PosH Then B = i + 1: Exit For
Next i
If B = 0 Or K = 0 Then Exit Sub
Select Case B
Case 1
If shpLEDA(K - 1).FillColor = vbRed
Then
shpLEDA(K - 1).FillColor =
&H8000000F
Else: shpLEDA(K -
1).FillColor = vbRed
End If
Case 2
If shpLEDB(K - 1).FillColor = vbRed
Then
shpLEDB(K - 1).FillColor =
&H8000000F
Else: shpLEDB(K -
1).FillColor = vbRed
End If
Case 3
If shpLEDC(K - 1).FillColor = vbRed
Then
shpLEDC(K - 1).FillColor =
&H8000000F
Else: shpLEDC(K -
1).FillColor = vbRed
End If
Case 4
If shpLEDD(K - 1).FillColor = vbRed
Then
shpLEDD(K - 1).FillColor =
&H8000000F
Else: shpLEDD(K -
1).FillColor = vbRed
End If
Case 5
If shpLEDE(K - 1).FillColor = vbRed
Then
shpLEDE(K - 1).FillColor =
&H8000000F
Else: shpLEDE(K -
1).FillColor = vbRed
End If
Case 6
If shpLEDF(K - 1).FillColor = vbRed
Then
shpLEDF(K - 1).FillColor =
&H8000000F
Else: shpLEDF(K -
1).FillColor = vbRed
End If
Case 7
If shpLEDG(K - 1).FillColor = vbRed
Then
shpLEDG(K - 1).FillColor =
&H8000000F
Else: shpLEDG(K - 1).FillColor = vbRed
End If
Case 8
If shpLEDH(K - 1).FillColor = vbRed
Then
shpLEDH(K - 1).FillColor =
&H8000000F
Else: shpLEDH(K -
1).FillColor = vbRed
End If
End Select
h = cmdInvert.Caption & " "
& cmdPosisi.Caption
i = 0
Select Case h
Case "HI DN"
If shpLEDA(K - 1).FillColor = vbRed
Then i = i + 1
If shpLEDB(K - 1).FillColor = vbRed
Then i = i + 2
If shpLEDC(K - 1).FillColor = vbRed
Then i = i + 4
If shpLEDD(K - 1).FillColor = vbRed
Then i = i + 8
If shpLEDE(K - 1).FillColor = vbRed
Then i = i + 16
If shpLEDF(K - 1).FillColor = vbRed
Then i = i + 32
If shpLEDG(K - 1).FillColor = vbRed
Then i = i + 64
If shpLEDH(K - 1).FillColor = vbRed
Then i = i + 128
Case "LO DN"
If shpLEDA(K - 1).FillColor =
&H8000000F Then i = i + 1
If shpLEDB(K - 1).FillColor =
&H8000000F Then i = i + 2
If shpLEDC(K - 1).FillColor =
&H8000000F Then i = i + 4
If shpLEDD(K - 1).FillColor =
&H8000000F Then i = i + 8
If shpLEDE(K - 1).FillColor =
&H8000000F Then i = i + 16
If shpLEDF(K - 1).FillColor =
&H8000000F Then i = i + 32
If shpLEDG(K - 1).FillColor =
&H8000000F Then i = i + 64
If shpLEDH(K - 1).FillColor =
&H8000000F Then i = i + 128
Case "HI UP"
If shpLEDA(K - 1).FillColor = vbRed
Then i = i + 128
If shpLEDB(K - 1).FillColor = vbRed
Then i = i + 64
If shpLEDC(K - 1).FillColor = vbRed
Then i = i + 32
If shpLEDD(K - 1).FillColor = vbRed
Then i = i + 16
If shpLEDE(K - 1).FillColor = vbRed
Then i = i + 8
If shpLEDF(K - 1).FillColor = vbRed
Then i = i + 4
If shpLEDG(K - 1).FillColor = vbRed
Then i = i + 2
If shpLEDH(K - 1).FillColor = vbRed
Then i = i + 1
Case "LO UP"
If shpLEDA(K - 1).FillColor =
&H8000000F Then i = i + 128
If shpLEDB(K - 1).FillColor =
&H8000000F Then i = i + 64
If shpLEDC(K - 1).FillColor =
&H8000000F Then i = i + 32
If shpLEDD(K - 1).FillColor =
&H8000000F Then i = i + 16
If shpLEDE(K - 1).FillColor =
&H8000000F Then i = i + 8
If shpLEDF(K - 1).FillColor =
&H8000000F Then i = i + 4
If shpLEDG(K - 1).FillColor =
&H8000000F Then i = i + 2
If shpLEDH(K - 1).FillColor =
&H8000000F Then i = i + 1
End Select
txtDES(K - 1).Text = i
End
Sub
Private
Sub txtDES_Change(Index As Integer)
txtHEX(Index).Text =
Hex(Val(txtDES(Index).Text))
ProsesHeksadesimal
End
Sub
Private
Sub txtDES_KeyPress(Index As Integer, KeyAscii As Integer)
If KeyAscii >= 48 And KeyAscii <= 57
Then Exit Sub
If KeyAscii = 8 Then Exit Sub
KeyAscii = 0
End
Sub
Private
Sub txtHEX_Change(Index As Integer)
On Error Resume Next
h = txtHEX(Index).Text
If txtHEX(Index).Text = "" Then
shpLEDA(Index).FillColor =
&H8000000F
shpLEDB(Index).FillColor =
&H8000000F
shpLEDC(Index).FillColor =
&H8000000F
shpLEDD(Index).FillColor =
&H8000000F
shpLEDE(Index).FillColor =
&H8000000F
shpLEDF(Index).FillColor =
&H8000000F
shpLEDG(Index).FillColor =
&H8000000F
shpLEDH(Index).FillColor =
&H8000000F
Else
For i = 0 To 255
If Hex(i) = txtHEX(Index).Text
Then Exit For
Next i
txtDES(Index).Text = i
End If
End
Sub
Private
Sub txtHEX_KeyPress(Index As Integer, KeyAscii As Integer)
If KeyAscii >= 48 And KeyAscii <= 57
Then Exit Sub
If KeyAscii >= 65 And KeyAscii <= 70
Then Exit Sub
If KeyAscii >= 97 And KeyAscii <= 102
Then KeyAscii = KeyAscii - 32: Exit Sub
If KeyAscii = 8 Then Exit Sub
KeyAscii = 0
End
Sub
Private
Sub ProsesHeksadesimal()
h = cmdInvert.Caption & " "
& cmdPosisi.Caption
Select Case h
Case "HI DN": ProsesHeksa1
Case "LO DN": ProsesHeksa2
Case "HI UP": ProsesHeksa3
Case "LO UP": ProsesHeksa4
End Select
End
Sub
Private
Sub ProsesHeksa1()
For r = 0 To 7
If txtHEX(r).Text <> ""
Then
i = Val(txtDES(r).Text)
If i >= 128 Then
shpLEDH(r).FillColor = vbRed: i
= i - 128
Else: shpLEDH(r).FillColor =
&H8000000F
End If
If i >= 64 Then
shpLEDG(r).FillColor = vbRed: i
= i - 64
Else: shpLEDG(r).FillColor =
&H8000000F
End If
If i >= 32 Then
shpLEDF(r).FillColor = vbRed: i
= i - 32
Else: shpLEDF(r).FillColor =
&H8000000F
End If
If i >= 16 Then
shpLEDE(r).FillColor = vbRed: i
= i - 16
Else: shpLEDE(r).FillColor =
&H8000000F
End If
If i >= 8 Then
shpLEDD(r).FillColor = vbRed: i
= i - 8
Else: shpLEDD(r).FillColor =
&H8000000F
End If
If i >= 4 Then
shpLEDC(r).FillColor = vbRed: i
= i - 4
Else: shpLEDC(r).FillColor =
&H8000000F
End If
If i >= 2 Then
shpLEDB(r).FillColor = vbRed: i
= i - 2
Else: shpLEDB(r).FillColor =
&H8000000F
End If
If i >= 1 Then
shpLEDA(r).FillColor = vbRed
Else: shpLEDA(r).FillColor =
&H8000000F
End If
End If
Next r
End
Sub
Private
Sub ProsesHeksa2()
For r = 0 To 7
If txtHEX(r).Text <> ""
Then
i = Val(txtDES(r).Text)
If i >= 128 Then
shpLEDH(r).FillColor =
&H8000000F: i = i - 128
Else: shpLEDH(r).FillColor =
vbRed
End If
If i >= 64 Then
shpLEDG(r).FillColor = &H8000000F:
i = i - 64
Else: shpLEDG(r).FillColor =
vbRed
End If
If i >= 32 Then
shpLEDF(r).FillColor =
&H8000000F: i = i - 32
Else: shpLEDF(r).FillColor =
vbRed
End If
If i >= 16 Then
shpLEDE(r).FillColor =
&H8000000F: i = i - 16
Else: shpLEDE(r).FillColor =
vbRed
End If
If i >= 8 Then
shpLEDD(r).FillColor =
&H8000000F: i = i - 8
Else: shpLEDD(r).FillColor =
vbRed
End If
If i >= 4 Then
shpLEDC(r).FillColor =
&H8000000F: i = i - 4
Else: shpLEDC(r).FillColor =
vbRed
End If
If i >= 2 Then
shpLEDB(r).FillColor =
&H8000000F: i = i - 2
Else: shpLEDB(r).FillColor =
vbRed
End If
If i >= 1 Then
shpLEDA(r).FillColor = &H8000000F
Else: shpLEDA(r).FillColor =
vbRed
End If
End If
Next r
End
Sub
Private
Sub ProsesHeksa3()
For r = 0 To 7
If txtHEX(r).Text <> ""
Then
i = Val(txtDES(r).Text)
If i >= 128 Then
shpLEDA(r).FillColor = vbRed: i = i -
128
Else
shpLEDA(r).FillColor =
&H8000000F
End If
If i >= 64 Then
shpLEDB(r).FillColor = vbRed: i = i -
64
Else: shpLEDB(r).FillColor =
&H8000000F
End If
If i >= 32 Then
shpLEDC(r).FillColor = vbRed: i = i -
32
Else: shpLEDC(r).FillColor =
&H8000000F
End If
If i >= 16 Then
shpLEDD(r).FillColor = vbRed: i = i -
16
Else: shpLEDD(r).FillColor =
&H8000000F
End If
If i >= 8 Then
shpLEDE(r).FillColor = vbRed: i = i - 8
Else: shpLEDE(r).FillColor =
&H8000000F
End If
If i >= 4 Then
shpLEDF(r).FillColor = vbRed: i = i - 4
Else: shpLEDF(r).FillColor =
&H8000000F
End If
If i >= 2 Then
shpLEDG(r).FillColor = vbRed: i = i - 2
Else: shpLEDG(r).FillColor =
&H8000000F
End If
If i >= 1 Then
shpLEDH(r).FillColor = vbRed
Else: shpLEDH(r).FillColor =
&H8000000F
End If
End If
Next r
End
Sub
Private
Sub ProsesHeksa4()
For r = 0 To 7
If txtHEX(r).Text <> ""
Then
i = Val(txtDES(r).Text)
If i >= 128 Then
shpLEDA(r).FillColor = &H8000000F:
i = i - 128
Else: shpLEDA(r).FillColor = vbRed
End If
If i >= 64 Then
shpLEDB(r).FillColor = &H8000000F:
i = i - 64
Else: shpLEDB(r).FillColor = vbRed
End If
If i >= 32 Then
shpLEDC(r).FillColor = &H8000000F:
i = i - 32
Else: shpLEDC(r).FillColor = vbRed
End If
If i >= 16 Then
shpLEDD(r).FillColor = &H8000000F: i = i
- 16
Else: shpLEDD(r).FillColor = vbRed
End If
If i >= 8 Then
shpLEDE(r).FillColor = &H8000000F:
i = i - 8
Else: shpLEDE(r).FillColor = vbRed
End If
If i >= 4 Then
shpLEDF(r).FillColor = &H8000000F:
i = i - 4
Else: shpLEDF(r).FillColor = vbRed
End If
If i >= 2 Then
shpLEDG(r).FillColor = &H8000000F:
i = i - 2
Else: shpLEDG(r).FillColor = vbRed
End If
If i >= 1 Then
shpLEDH(r).FillColor = &H8000000F
Else: shpLEDH(r).FillColor = vbRed
End If
End If
Next r
End
Sub
Sudah ya, terima
kasih sudah membaca artikel ini. Semoga apa yang penulis sampaikan bermanfaat
dan bisa diterapkan oleh sobat semua.
Salam....
Mantapp, ijin mempelajari dan akan saya ajarkan ke murid-murid saya
BalasHapus