TUGAS AKHIR
Diajukan Untuk Memenuhi Salah Satu Syarat
Disusun oleh:
YAKOBUS PRIAMBODO
NIM: 035114032
i
Calculator Based on Microcontroller
FINAL PROJECT
Presented as Partial Fulfillment of the Requirements
To Obtain the Sarjana Teknik Degree
In Electrical Engineering Study Program
By:
YAKOBUS PRIAMBODO
Student Number: 035114032
ii
iii
iv
v
HALAMAN PERSEMBAHAN DAN MOTTO HIDUP
vi
KALKULATOR BERBASIS MIKROKONTROLER
Yakobus Priambodo
035114032
INTISARI
vii
CALCULATOR BASED ON MICROCONTROLLER
Yakobus Priambodo
035114032
ABSTRACT
viii
KATA PENGANTAR
Kemungkinan semakin luas. Satu lagi karya Tuhan tercipta melalui tangan – tangan
Puji syukur dan terima kasih penulis panjatkan kepada Allah Bapa atas segala
Mikrokontroler” ini dapat diselesaikan dengan baik. Tugas akhir ini merupakan
salah satu syarat untuk memperoleh gelar Sarjana pada program studi Teknik Elektro
2. Kedua orang tuaku tercinta Ignatius Sukiman dan Yuliana Sudiyati atas segala
3. Bapak Martanto, S.T, M.T dosen pembimbing I yang telah banyak meluangkan
waktu untuk memberikan bimbingan dan saran. Penulis selalu ingat pesan
4. Bapak Ir. Tjendro dosen pembimbing II yang selalu rela diganggu untuk
5. Mas Mardi, mas Sur dan mas Ucup atas perhatiannya dikala pusing dengan TA.
6. Rekan-rekan lulusan Teknik Elektro USD, Merryana, S.T, Suryo, S.T dan
Sofian, S.T. Makasih ya atas saran dan “paksaan” untuk cepat-cepat lulus.
ix
7. Rekan-rekan TE ’03 khususnya Inggit Suminggit (alias Nobita), Denis si
makasih atas tempat singgah untuk tidur sehabis bimbingan dan kepada adiknya
9. Kepada Andreas Marso Wibowo, S.T the hobbit and my annoying brother
10. Kepada Thomas Ricky SeptifAnus, S.T yang selalu heboh dalam memberikan
11. Teman-teman di Jakarta, Jublek, Puput, Dewi, Asri dan alm. Tri “Gembul”
Tuhan memberkati kalian semua. Untuk Ajenk “Tembem” makasih doa dan
12. Semua orang yang telah membantu dalam penyusunan karya tulis ini.
Penulis mengakui bahwa karya tulis ini masih jauh dari sempurna. Segala
kritik dan saran yang membangun akan penulis terima dengan senang hati.
Penulis
x
DAFTAR ISI
xi
2.7 Algoritma Pembagian .......................………………………………… 9
2.8 Algoritma Kuadrat ................................................................................ 11
2.9 Algoritma Akar Kuadrat ........………………………………………... 11
2.10 Bilangan 2’S Komplemen ..............………………………………… 12
2.11 Algoritma Bilangan Bertanda ............................................................ 12
2.12 Konversi Biner dan BCD ke Heksadesimal........................................ 13
2.13 Konversi Desimal ke Heksadesimal .................................................. 13
2.14 Thyristor ............................................................................................. 14
2.15 Matriks Keypad .................................................................................. 15
2.16 LCD .................................................................................................... 16
2.17 Mikrokontroler AT89S52 .................................................................. 17
2.17.1 Konfigurasi Pin Mikrokontroler AT89S52............................. 17
2.17.2 RAM Internal ......................................................................... 19
2.17.3 Flash PEROM ........................................................................ 20
2.17.4 PSW (Program Status Word) ................................................. 20
2.17.5 Rangkaian Osilator Mikrokontroler ....................................... 21
2.17.6 Rangkaian Reset Mikrokontroler ........................................... 22
BAB III PERANCANGAN ALAT ........................................................................ 23
3.1 Bentuk Fisik Kalkulator ...........………………………………………. 24
3.2 Rangkaian Matriks Keypad ................................................................... 24
3.3 Rangkaian LCD ..................................……………………………….. 27
3.4 Rangkaian Mikrokontroler AT89S52 ................................................... 27
3.4.1 Rangkaian Osilator Mikrokontroler AT89S52 ............................ 28
3.4.2 Rangkaian Reset Mikrokontroler AT89S52 ................................ 28
3.5 Rangkaian Pengunci ON/OFF .............................................................. 29
3.6 Pemograman Mikrokontroler ................................................................ 31
3.6.1 Subrutin Mode .............................................................................. 32
3.6.2 Subrutin Masukan Data 1 ............................................................. 33
xii
3.6.3 Subrutin Operator ......................................................................... 36
3.6.4 Subrutin Masukan Data 2 ............................................................. 38
3.6.5 Subrutin Hasil .............................................................................. 41
3.6.6 Subrutin Menampilkan Karakter ke LCD .................................... 42
3.6.7 Subrutin Penambahan .................................................................. 44
3.6.8 Subrutin Pengurangan .................................................................. 45
3.6.9 Subrutin Perkalian ........................................................................ 46
3.6.10 Subrutin Pembagian .................................................................. 47
3.6.11 Subrutin Kuadrat ....................................................................... 48
3.6.12 Subrutin Akar Kuadrat .............................................................. 49
3.6.13 Konversi Biner ke Heksadesimal .............................................. 50
3.6.14 Konversi BCD ke Heksadeimal ................................................ 51
3.6.15 Konversi Desimal ke Heksadesimal ......................................... 52
3.6.16 Algoritma Tampilan Bilangan Negatif ..................................... 53
BAB IV HASIL DAN PEMBAHASAN …………...…………………………… 55
4.1 Bentuk Fisik Kalkulator ……………………………………………… 55
4.2 Penggunaan Alat ……………………………………………………... 57
4.2.1 Pemilihan MODE Kalkulator ………………………………….. 59
4.2.2 Tampilan Bilangan Negatif …………………………………….. 62
4.2.3 Tampilan Sisa Perhitungan …………………………………….. 64
4.2.4 Tampilan Pesan ERROR! ……………………………………… 67
4.3 Data Pengamatan ……………………………………………………... 68
4.3.1 Konversi Heksadesimal ke Biner …………..…………………... 68
4.3.2 Konversi Biner ke Heksadesimal ………………………………. 69
4.3.3 Konversi Heksadesimal ke BCD ...……………………………... 71
4.3.4 Konversi BCD ke Heksadesimal …………………………...…... 72
4.3.5 Konversi Heksadesimal ke Desimal …………………………… 73
4.3.6 Konversi Desimal ke Heksadesimal …………………………… 74
xiii
4.3.7 Operasi Kuadrat ………………………………………………... 76
4.3.7.1 Operasi Kuadrat Mode Heksadesimal ……………...…... 76
4.3.7.2 Operasi Kuadrat Mode Biner ……………………..……. 77
4.3.7.3 Operasi Kuadrat Mode Desimal ………………………... 78
4.3.7.4 Operasi Kuadrat Mode BCD ………………………….... 79
4.3.8 Operasi Perkalian ………………………………………………. 81
4.3.8.1 Operasi Perkalian Mode Heksadesimal ………………... 81
4.3.8.2 Operasi Perkalian Mode Biner …………………………. 82
4.3.8.3 Operasi Perkalian Mode Desimal …………………........ 83
4.3.8.4 Operasi Perkalian Mode BCD …………………………. 84
4.3.9 Operasi Pembagian …………………………………………….. 85
4.3.9.1 Operasi Pembagian Mode Heksadesimal ………………. 86
4.3.9.2 Operasi Pembagian Mode Biner ……………………….. 86
4.3.9.3 Operasi Pembagian Mode Desimal …………………….. 87
4.3.9.4 Operasi Pembagian Mode BCD ………………………... 88
4.3.10 Operasi Penambahan ………………………………………….. 89
4.3.10.1 Operasi Penambahan Mode Heksadesimal ………........ 89
4.3.10.2 Operasi Penambahan Mode Biner …………………..… 90
4.3.10.3 Operasi Penambahan Mode Desimal ……………….… 91
4.3.10.4 Operasi Penambahan Mode BCD …………………….. 92
4.3.11 Operasi Pengurangan …………………………………………. 93
4.3.11.1 Operasi Pengurangan Mode Heksadesimal ………….... 93
4.3.11.2 Operasi Pengurangan Mode Biner ……………………. 95
4.3.11.3 Operasi Pengurangan Mode Desimal …………………. 96
4.3.11.4 Operasi Pengurangan Mode BCD …………………….. 97
4.3.12 Operasi Akar Kuadrat ………………………………………… 99
4.3.12.1 Operasi Akar Kuadrat Mode Heksadesimal …………... 99
4.3.12.2 Operasi Akar Kuadrat Mode Biner ………………........ 100
xiv
4.3.12.3 Operasi Akar Kuadrat Mode Desimal ………………… 101
4.3.12.4 Operasi Akar Kuadrat Mode BCD ……………………. 102
4.3.13 Perhitungan Berulang Kali ……………………………………. 103
4.3.14 Konversi Berulang Kali ………………………………………. 104
BAB V KESIMPULAN DAN SARAN …………………………………………. 106
5.1 Kesimpulan …………………………………………………………... 106
5.2 Saran …………………………………………………………………. 106
DAFTAR PUSTAKA ............................................................................................. 107
LAMPIRAN ............................................................................................................ 108
xv
DAFTAR GAMBAR
Halaman
34
Gambar 3.8. Flowchart Subrutin Masukan Data 1 (lanjutan) .………….
xvi
Gambar 3.10. Flowchart Subrutin Masukan Data 2 ………..................... 38
xvii
Gambar 4.6. Tampilan hasil perhitungan ………………………………. 59
Gambar 4.12. Data positif yang akan diubah kedalam bentuk negatif … 63
xviii
DAFTAR TABEL
Halaman
xix
Tabel 4.9. Data operasi kuadrat bilangan biner ………………………... 77
Tabel 4.29. Data operasi akar kuadrat bilangan biner ………………….. 100
xx
Tabel 4.30. Data operasi akar kuadrat bilangan desimal ………………. 101
Tabel 4.31. Data operasi akar kuadrat sandi BCD ……………………... 102
xxi
BAB I
PENDAHULUAN
Namun saat ini ada kalkulator yang dapat digunakan untuk perhitungan bilangan
biner dan heksadesimal akan tetapi hanya pada operasi aritmatik perkalian,
Bilangan biner merupakan sistem dasar yang dipakai dalam komputer dimana
terdapat 2 angka dasar 0 dan 1 (yang disebut bit) dan setiap bit dikalikan dengan
angka dasar 2 dan pangkat sesuai dengan urutannya. Bilangan BCD (Binary-Coded
Decimal) atau lebih sering disebut kode BCD merupakan penggambaran 4 angka
bilangan biner, dimana setiap angka desimal diwakili oleh 4 bit. Pada bilangan
1
2
dan BCD pada kalkulator, maka penulis membuat alat Kalkulator Berbasis
1.2 Tujuan
Tujuan penelitian ini, peneliti mempunyai beberapa tujuan yang ingin dicapai
yaitu:
aritmatik.
algoritma komputasi.
1.3 Manfaat
Mengacu pada beberapa tujuan yang akan dicapai, diharapkan penelitian ini
2. Jumlah masukan dan hasil maksimum adalah 15 digit untuk tiap mode.
4. Terdapat empat pilihan mode yaitu, mode biner ,heksadesimal ,desimal dan
BCD.
akan mengolah data masukan dari keypad dan menampilkannya ke LCD. Agar dapat
algoritma-algoritma perhitungan.
BAB I. PENDAHULUAN
dan LCD.
Membahas pengamatan kerja, pengambilan data dan analisis data dari alat
yang dibuat.
DASAR TEORI
yang disusun oleh matriks keypad. Data masukan tersebut kemudian diproses oleh
Kode biner biasa disebut BIN merupakan bilangan yang digunakan dalam
sitem digital. Pada kode ini mempunyai basis 2 yang hanya menggunakan dua buah
bilangan dasar, 0 dan 1 yang disebut bit. Nilai 0 mewakili logika rendah sedangkan
pangkat sesuai urutannya. Sistem ini dinamakan power of two 2n. Bit yang dikalikan
dengan 2n terbesar dinamakan MSB (Most Significant Bit) dan yang dikalikan
dengan 2n terkecil dinamakan LSB (Least Significant Bit). Sebagai contoh nilai biner
1010 mewakili nilai 10 bilangan desimal dengan perhitungan sebagai berikut. [2]
MSB LSB
1010 = 1 x 23 + 0 x 22 + 1 x 21 + 0 x 20
= 8 + 0 + 2 + 0
= 10
5
6
dengan simbol 0 – 9 dan A – F. Sistem penyandiannya sama dengan kode biner hanya
saja angka dasar 2 diganti dengan 16. Nilai dapat dilihat pada tabel 2.1.
0000 0 1000 8
0001 1 1001 9
0010 2 1010 A
0011 3 1011 B
0100 4 1100 C
0101 5 1101 D
0110 6 1110 E
0111 7 1111 F
dimana 1 nibble diganti dengan 1 digit. Pada sistem komputer nilai 1 byte (8 bit)
Pada sistem digital, angka desimal dikodekan tiap angkanya kedalam bentuk
biner. Pengodean ini dinamakan Binary Coded Decimal (BCD). Setiap angka pada
sistem desimal dikodekan kedalam 4 bit, hal ini dikarenakan pada sistem angka
desimal terdapat 10 angka yang harus dikodekan sehingga diperlukan minimal 4 bit
untuk setiap angkanya. Pengodean dari sistem desimal ke bentuk BCD dapat dilihat
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
8
7 0 1 1 1
6 + 0 1 1 0+
13 1 1 0 1
13 1 1 0 1
6- 0 1 1 0-
7 0 1 1 1
akan dikali dengan pengali P dan hasil perkalian awal S. Langkah-langkah yang harus
dilakukan :
Sebagai contoh :
C S P
0 0 0 0 0 0 0 1 0 Geser kanan 1 kali
Æ 0 0 0 0 0 0 0 0 1 Tambahkan dengan S dengan H
Geser kanan 1 kali
0 0 0 1 1 +
0 0 0 1 1
Hasil
geser kiri dan kurangkan. Operasi ini berlaku untuk bilangan integer sehingga akan
muncul sisa bagi dari proses. Misal bilangan H akan dibagi dengan pembagi P dan
Sebagai contoh :
2 10 Æ 102 1010
2
C S H
Awal 0 0 0 0 0 1 0 1 0 Ket:
Subb = kurangkan
Å 0 0 0 0 1 0 1 0
Å = geser kiri
Subb 1 0 -
Set H0 1 1 1 1 1
1 0+
0 0 0 0 1 0 1 0 0
Å 0 0 0 1 0 1 0 0
Subb 1 0 -
Set H0 0 0 0 0 0
1 0 0 1
Å 0 0 0 0 1 0 0 1
Subb 1 0 -
Set H0 1 1 1 1 1
1 0+
0 0 0 0 1 0 0 1 0
Å 0 0 0 1 0 0 1 0
Subb 1 0 -
0 0 0 0 0 0 1 0 1
Proses operasi kuadrat sama dengan operasi perkalian. Hanya saja pada
operasi kuadrat bilangan pengali P sama dengan bilangan yang akan dikali H.
Register). Metode ini berlaku pada bentuk biner atau heksadesimal, sehingga
bilangan yang akan dicari nilai akar kuadratnya harus diubah terlebih dahulu dalam
1. Hitung jumlah bit yang akan dicari nilai akar kuadratnya (n)
2. Set nilai awal hasil akar kuadrat (P) = 0
3. Set MSB P = 1
4. Kemudian kuadratkan P
5. Bandingkan P dengan bilangan yang akan dicari akar kuadratnya (Q)
6. Jika P < Q simpan nilai P, jika P > Q clear bit P
7. Set bit berikutnya, kembali ke langkah 5 sampai P > Q
Sebagai contoh :
Hasil awal 0 0
Set 1 0
Kuadratkan 0 1 0 0
Bandingkan 0 1 0 0 < 1 0 1 0
Set 1 1
Kuadratkan
1 0 0 1
5 Æ 0101
Pada operasi perkalian dan pembagian tanda pada kedua bilangan disimpan
terlebih dahulu. Apabila hanya salah satu bilangan saja yang bertanda maka hasil
perhitungan diubah ke dalam bentuk 2’s komplemennya. Jika kedua buah bilangan
bertanda, hasilnya tidak perlu diubah ke dalam bentuk 2’s komplemennya. [5]
13
BCD juga merupakan sandi biner yang digunakan untuk bilangan desimal.
Pengubahannya adalah dengan cara pengubahan tiap satu nibble. Bilangan biner dan
BCD terlebih dahulu dipisahkan tiap nibble mulai dari LSB. Setelah dipisahkan tiap
bit dalan satu nibble dikalikan dengan bobot 8421 sesuai dengan urutannya kemudian
dijumlahkan. Sebagai contoh dapat dilihat pada proses pengubahan dibawah. [6]
1011012 Æ 0 0 1 0 1101
1 nibble 1 nibble
Æ 0.8 + 0.4 + 1.2 + 0.1 || 1.8 + 1.4 + 0.2 +1.1
2 D
1011012 Æ 2D16
angkan desimal dengan An , nilai n adalah urutan angka. Setelah dikalikan, hasilnya
ditambahkan semua. Sebagai contoh dapat dilihat pada proses pengubahan dibawah.
[7]
2.14 Thyristor
keadaan. Pengoperasiannya berada pada kondisi dari tidak menghantarkan arus listrik
A
A = ANODA
G K = KATODA
G = GATE
K
dan OFF. Apabila kaki GATE diberi tegangan, maka thyristor akan ON sampai kaki
GATE dimatikan. Agar dapat menghantarkan arus listrik, maka pada keadaan ON
besarnya beda potensial kaki ANODA harus lebih besar dari beda potensial kaki
KATODA.
pada kaki GATE sebesar IL (Latching Current). IL merupakan arus minimum yang
dibutuhkan agar thyristor ON. Sedangkan untuk membuat keadaan OFF adalah
dengan cara mengurangi besarnya arus pada kaki GATE sampai sebesar IH (Holding
Current). IH adalah arus minimum yang dibutuhkan agar thyristor OFF. [8]
15
Kofigurasi matriks keypad terdiri dari tombol-tombol yang tersusun atas baris
dan kolom. Rangkaian matriks keypad sederhana dapat dilihat pada gambar 2.2.
1 2 3
B1
4 5 6
B2
7 8 9
B3
* 0 #
B4
K1 K2 K3
digunakan pada mikrokontroler. Pada gambar 2.2 adalah matriks keypad 4 x 3 yang
artinya terdiri dari 4 baris dan 3 kolom. Matriks keypad ini tersusun dari 12 tombol,
berurutan (scanning). Sebagai contoh apabila ingin mengecek angka 1, maka terlebih
dahulu kolom K1 diberi logika ‘1’, lalu dilakukan pengecekan tiap baris. Apabila
baris B1 = ‘1’ artinya tombol 1 sedang ditekan. Pengecekan ini juga berlaku untuk
tombol yang lainnya dengan pengecekan baris dan kolom secara bergantian.
16
2.16 LCD
LCD (Liquid Crystal Display) adalah suatu tampilan dari bahan cairan kristal
yang dioperasikan dengan menggunakan sisitem dot matriks. LCD dalam berbagai
aplikasi elektronik sering digunakan sebagai tampilan seperti jam digital, kalkulator,
2 x 16. Ukuran tersebut menandakan bahwa LCD memiliki layar tampilan yang
terdiri dari 2 baris dan 16 kolom. Total jumlah karakter yang dapat ditampilkan
adalah sebanyak 32 karakter dengan 16 karakter pada tiap baris dan masing-masing
Pada penggunaan LCD ada beberapa pin yang penting. Pin-pin tersebut dapat
Erasable Read Only Memory). FPEROM adalah ROM (Read Only Memory) yang
FPEROM, 256 byte RAM (Random Accsess Memory), 32 jalur I/O (input/output),
watchdog timer, dua data pointer, tiga 16-bit timer/counter, jalur komunikasi serial
memiliki fungsi ganda. Konfigurasi pin Mikrokontroler AT89S52 dapat dilihat pada
gambar 2.3 dan fungsi pin dapat dilihat pada tabel 2.4.
sampai dengan R7. Register ini dapat diubah dari bank 0 (default) ke bank 1,
bank 2 dan bank 3 dengan cara mengubah nilai RS0 dan RS1 pada register
PSW.
b. Bit addressable RAM. RAM yang dapat diakses secara pengalamatan bit
c. RAM serbaguna. RAM ini dapat diakses secara pengalamatan langsung dan
tak langsung terletak pada alamat 30H sampai 7FH. Lokasi RAM Internal
0 1 2 3 4 5 6 7 8 9 A B C D E F
10 BANK 2 BANK 3
30
:
: RAM Serbaguna
:
:
F0
dieksekusi jika sistem di-reset. Bila pin EA/VPP berlogika ‘1’ maka mikrokontroler
aktif berdasarkan program yang ada di Flash PEROM. Bila pin EA/VPP berlogika
‘0’ maka mikrokontroler aktif berdasarkan program yang ada di memori eksternal.
PSW (Program Status Word) berisikan bit-bit status yang berkaitan dengan
kondisi CPU. PSW bersifat bit-adressable artinya tiap-tipa bit dapat dialamati satu-
persatu tanpa harus merubah satu kesatuan byte. Bit-bit penyusun PSW dapat dilihat
Keterangan :
CY = Menerima carry out dari bit 1 operasi aritmatik
AC = Menerima carry out dari bit 1 operasi penjumlahan
F0 = Status multiguna
RS1 = Bit 1 pemilih bank register
RS0 = Bit 0 pemilih bank register
OV = Limpahan operasi aritmatik
PSW.1 = Didefinisikan pengguna
P = Paritas genap akumulator, menjaga agar di akumulator selalu genap
21
PSW dapat digunakan untuk memilih bank memory (Bank 0 – Bank 3).
Pemilihan dilakukan dengan mengatur bit RS0 dan bit RS1 menurut tabel 2.6.
kapasitor yang digunakan adalah 30 pF. Rangkaian osilator dapat dilihat pada
gambar 2.5.
VCC
MIKROKONTROLER
9
(RESET)
R
Pada gambar 2.6 apabila saklar tidak ditekan, pin reset pada mikrokontroler
akan mendapatkan logika rendah ‘0’. Sedangkan saat saklar ditekan pin akan
mendapatkan logiga tinggi ‘1’ dan akan mereset mikrokontoler. Lamanya waktu yang
dibutuhkan untuk mereset adalah dua siklus mesin dan memenuhi persamaan :
T=RxC (2.1)
BAB III
PERANCANGAN ALAT
perangkat keras memiliki tiga bagian utama yaitu unit masukan, unit pemroses data
dan unit keluaran. Unit masukan tersusun dari rangkaian matriks keypad, unit
Perancangan perangkat lunak berupa flowchart program yang akan diisikan ke dalam
mikrokontroler. Secara umum diagram blok sistem dapat dilihat pada gambar 3.1.
Pada bagian ini akan dijelaskan tentang perancangan bentuk fisik kakulator,
23
24
LCD. Perancangan bentuk fisik kalkulator dapat dilihat pada gambar 3.2.
tersusun atas 8 baris dan 4 kolom. Keypad ini dihubungkan dengan port 1 dan port 3
mikrokontroler AT89S52, untuk barisnya terhubung dengan jalur P3.0 sampai P3.7.
Cara kerja dari matriks keypad adalah dengan sistem scanning tombol satu per
satu. Kolom 1 sampai dengan kolom 5 (P1.0 - P1.3) berfungsi sebagai keluaran
setiap kolom secara bergantian, sehingga apabila ada tombol yang ditekan maka baris
tersebut akan memiliki kondisi ‘1’ pula. Sebagai contoh apabila tombol ‘DEL’
ditekan maka baris 8 (P3.7) dan kolom 4 (P1.3) akan berkondisi ‘1’, demikian pula
untuk penekanan tombol-tombol lainnya. Kombinasi baris dan kolom matriks keypad
P1.0 P1.1 P1.2 P1.3 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7
0 1 0 0 0 0 0 0 0 0 0 0 1
1 1 0 0 0 0 0 0 0 0 0 1 0
4 1 0 0 0 0 0 0 0 0 1 0 0
7 1 0 0 0 0 0 0 0 1 0 0 0
D 1 0 0 0 0 0 0 1 0 0 0 0
A 1 0 0 0 0 0 1 0 0 0 0 0
1 0 0 0 0 1 0 0 0 0 0 0
1 0 0 0 1 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0 0 1
2 0 1 0 0 0 0 0 0 0 0 1 0
5 0 1 0 0 0 0 0 0 0 1 0 0
8 0 1 0 0 0 0 0 0 1 0 0 0
E 0 1 0 0 0 0 0 1 0 0 0 0
B 0 1 0 0 0 0 1 0 0 0 0 0
CE 0 1 0 0 0 1 0 0 0 0 0 0
Å 0 1 0 0 1 0 0 0 0 0 0 0
+/- 0 0 1 0 0 0 0 0 0 0 0 1
3 0 0 1 0 0 0 0 0 0 0 1 0
6 0 0 1 0 0 0 0 0 0 1 0 0
9 0 0 1 0 0 0 0 0 1 0 0 0
F 0 0 1 0 0 0 0 1 0 0 0 0
C 0 0 1 0 0 0 1 0 0 0 0 0
x2 0 0 1 0 0 1 0 0 0 0 0 0
Æ 0 0 1 0 1 0 0 0 0 0 0 0
= 0 0 0 1 0 0 0 0 0 0 0 1
DEL 0 0 0 1 0 0 0 0 0 0 1 0
- 0 0 0 1 0 0 0 0 0 1 0 0
+ 0 0 0 1 0 0 0 0 1 0 0 0
÷ 0 0 0 1 0 0 0 1 0 0 0 0
x 0 0 0 1 0 0 1 0 0 0 0 0
√ 0 0 0 1 0 1 0 0 0 0 0 0
MODE 0 0 0 1 1 0 0 0 0 0 0 0
27
diperhatikan pada LCD adalah RS (Register Select), E (Enable), dan jalur I/O
(Input/Outpur) data. Hubungan pin-pin LCD dan mikrokontroler dapat dilihat pada
tabel 3.2.
VCC
U1
40
39 1
VCC
P0.0/AD0 P1.0/T2
KOLOM
38 2
37 P0.1/AD1 P1.1/T2-EX 3
36 P0.2/AD2 P1.2 4
35 P0.3/AD3 P1.3 5
VCC 34 P0.4/AD4 P1.4 6
33 P0.5/AD5 P1.5 7
32 P0.6/AD6 P1.6 8
MATRIKS KEYPAD
P0.7/AD7 P1.7 8 x 4
VCC RS E D0 21 10
22 P2.0/A8 P3.0/RXD 11
. 23 P2.1/A9 P3.1/TXD 12
24 P2.2/A10 P3.2/INTO 13
BARIS
.
LCD . 25 P2.3/A11 P3.3/INT1 14
MODULE . 26 P2.4/A12 P3.4/TO 15
27 P2.5/A13 P3.5/T1 16
28 P2.6/A14 P3.6/WR 17
D7 P2.7/A15 P3.7/RD
GND
29
C1 PSEN 30 VCC
19 ALE/PROG
18 XTAL1 31
GND
XTAL2 EA/VPP
1
9 RESET
30pF XTAL RST
C3
C2
20
12 MHz AT89C52 10uF
2
30pF R1
10K
kristal 12 MHz. Hal ini untuk mendapatkan siklus mesin (duty cycle) sebesar 1 µs.
Untuk dapat mereset mikrokontroler maka pin RESET harus diberi masukan
logika “1” selama dua siklus mesin saat osilator bekerja. Pada perancangan
digunakan siklus mesin sebesar 1 µs, sehingga waktu yang dibutuhkan untuk mereset
mikrokontroler adalah sebesar 2 µs. Berdasarkan persamaan 2.1 jika ditentukan nilai
yang digunakan adalah thyristor MCR100. Rangkaian pengunci dapat dlihat pada
gambar 3.5.
VCC = 9V OFF
1 2
MCR100 LM7805
A K 1
IN OUT
3 Vout = 5V
GND
G
R1
2
ON
1 2
R2
Besarnya tegangan di kaki GATE (VG) yang diinginkan adalah 4,5V. Dengan
R2
4,5 = 9
R1 + R 2
R2
0,5 =
R1 + R 2
R1 + R 2 = 2 R 2
R1 = R2 (2)
30
VCC
R1 + R 2 = ; R1 = R2
IL
VCC
2 R1 =
IL
9
R1 =
2.10.10 −3
R1 = 450Ω
R1 = R2 = 450Ω (3)
Untuk menyesuaikan dengan nilai resistor yang ada di pasaran digunakan nilai R1
Untuk membuat thyristor ke keadaan OFF nilai arus IL harus dikurangi sampai
ke nilai arus IH. Berdasarkan datasheet nilai IH yang dibutuhkan adalah lebih kecil
dari 5mA. Untuk mencapai kondisi ini arus pada kaki ANODA dan KATODA harus
5,5V.
31
tersebut adalah Mode, Masukan Data 1, Operator, Masukan Data 2, Hasil dan
Tampilan LCD. Flowchart program utama dapat dilihat pada gambar 3.6.
START
CEK MODE
CEK MASUKAN
DATA 1
CEK OPERATOR
CEK MASUKAN
DATA 2
CEK HASIL
END
Mode terdiri dari tiga jenis, BIN untuk biner, HEX untuk heksadesimal, DEC
untuk desimal dan BCD untuk BCD. Ketiga jenis tersebut diberi kode untuk
membedakan satu sama lain. Kode tersebut dapat dilihat pada tabel 3.3. Flowchart
subrutin MODE dapat dilihat pada gambar 3.7.
Tabel 3.3. Kode untuk masing-masing Mode
MODE KODE
BIN 01H
HEX 02H
DEC 03H
BCD 04H
adalah dengan cara menyimpan data yang dimasukan pertama kali kemudian
menggeser alamat RAM yang ditempati. Setelah alamat RAM digeser, data masukan
berikutnya disimpan di alamat baru tersebut. Proses ini akan berlangsung terus
sampai jumlah data yang dibolehkan. Flowchart subrutin Masukan Data 1 dapat
Keenam operasi ini diberi kode untuk membedakan satu sama lain. Tujuan
pemberian kode-kode ini untuk memudahkan pengolahan data. Kode-kode ini akan
disimpan untuk kemudian dicek saat proses perhitungan data dimulai. Kode-kode
yang digunakan dapat dilihat pada tabel 3.4. Flowchart subrutin Operator dapat
Perkalian x 01H
Pembagian ÷ 02H
Penjumlahan + 03H
Pengurangan - 04H
Kuadrat x2 --
Akar Kuadrat √ --
37
Data 2 sama halnya dengan penyimpanan Data 1 hanya saja alamat RAM Internal
yang digunakan berbeda. Flowchart subrutin Masukan Data 2 dapat dilihat pada
gambar 3.10
Pada subrutin Hasil, Data 1 dan Data 2 akan dihitung sesuai Operator yang
dimulai terlebih dahulu akan dicek mode yang digunakan. Apabila mode yang
digunakan biner dan BCD maka Data 1 dan Data 2 dikonversi ke dalam bentuk
operator yang digunakan baru kemudian dihitung dan hasilnya ditampilkan ke LCD.
Awal proses inisialisasi adalah dengan memberikan logika rendah pada port
RS (Register Select) dan R/W (Read/Write) kemudian memberikan intruksi tentang
panjang data yang akan digunakan. Instruksi ini disebut function set yang bertujuan
agar LCD mengetahui batas instruksi yang dikirimkan berikutnya. Pada perancangan
ini digunakan panjang data sebesar 8 bit dengan cara memberikan data 3FH pada
LCD.
Kemudian LCD diberi instruksi display ON/OFF control yang berfungsi
mengaktifkan display dan cursor dengan memberikan data 0DH pada LCD. Instruksi
berikutnya adalah entry mode set yang berfungsi untuk pergerakan cursor, data 04H
untuk geser kiri dan 06H untuk geser kanan.
Setelah inisialisasi dilakukan yang berikutnya adalah menampilkan karakter
ke LCD. Untuk menampilkan karakter terlebih dahulu RS diberi logika tinggi (RS =
“1”) dan R/W diberi logika rendah (R/W = “0”). Pengiriman intruksi yang terakhir
adalah nilai data karakter yang akan ditampilkan. Flowchart tampilan LCD dapat
dilihat pada gambar 3.12.
sudah dijelaskan di dalam dasar teori. Flowchart subrutin penambahan dapat dilihat
sudah dijelaskan di dalam dasar teori. Flowchart subrutin pengurangan dapat dilihat
dijelaskan di dalam dasar teori. Flowchart subrutin perkalian dapat dilihat pada
gambar 3.15.
dijelaskan di dalam dasar teori. Untuk hasil pembagian akan ditampilkan pada baris
pertama LCD dan sisa pembagian pada baris kedua LCD. Flowchart subrutin
dijelaskan di dalam dasar teori. Flowchart subrutin kuadrat dapat dilihat pada gambar
3.17.
sudah dijelaskan di dalam dasar teori. Flowchart subrutin akar kuadrat dapat dilihat
algoritma yang sudah dijelaskan di dalam dasar teori. Flowchart konversi desimal ke
desimal dan BCD penampilan bilangan negaitfnya diberi tanda negatif (‘-‘) pada
LCD di baris satu sebelah kiri. Sedangkan untuk bilangan biner dan heksadesimal
Bentuk fisik dari kalkulator yang dirancang ditunjukkan pada gambar 4.1.
Kalkulator yang dibuat terdiri dari keypad sebagai masukan dan LCD sebagai
keluaran. LCD berada pada posisi paling atas dan keypad dibawahnya. Pada keypad
terdapat label angka-angka dan operator yang dapat dipilih sebagai masukan. Tombol
ON dan tombol OFF berada di sebelah kanan diantara LCD dan keypad.
55
56
pengunci ON/OFF dan batu baterai sebagai catu daya. Bagian dalam kalkulator dapat
pemroses data, kristal sebagai osilator mikrokontroler, tombol reset dan pin-pin sisir
tegangan 5V dan pin sisir penghubung rangkian dengan tombol ON/OFF. Batu
tombol ON. Setelah tombol ON ditekan kondisi default adalah pada sandi
adalah F. Tampilan data masukan berada di sebelah kanan baris kedua dari LCD.
yang tersedia adalah kuadrat (x2), akar kuadrat (√), perkalian (x), pembagian (÷),
penambahan (+), pengurangan (-) dan bilangan negatif (+/-). Pada pembahasan ini
akan muncul simbol operator yang dipilih di sebelah kanan baris pertama LCD.
Tampilan operator seperti pada gambar 4.4 pada bagian yang diberi lingkaran.
masukan kedua adalah 9. Setelah penekanan tombol 9, maka tampilan LCD seperti
tombol sama dengan (=). Setelah penekanan tombol sama dengan, simbolnya akan
muncul di sebelah kanan baris pertama LCD seperti pada gambar 4.6 yang diberi
tanda lingkaran garis putus-putus. Hasil perhitungan terletak di baris kedua LCD
seperti pada gambar 4.6 yang diberi tanda elips garis penuh.
basis bilangan yang dapat dipilih yaitu heksadesimal, biner, desimal dan BCD.
Informasi mengenai sandi yang digunakan terletak di bagian tengah baris pertama
LCD dengan tulisan simbol HEX untuk heksadesimal, BIN untuk biner, DEC untuk
desimal dan BCD untuk sandi BCD. Pembahasan mode kalkulator mengacu pada
proses konversi nilai 18 heksadesimal kedalam bentuk sandi biner, desimal dan BCD.
Langkah 1. Beri masukan data awal. Sebagai contoh data awal yang akan
maka akan mucul tulisan MODE pada bagian tengah baris pertama LCD seperti pada
gambar 4.8.
yang pertama adalah ke dalam bentuk biner. Nilai 18H dalam bentuk binernya adalah
11000 biner (untuk selanjutnya sandi biner mengikuti format 110002). Tampilan data
Konversi berikutnya adalah kedalam bentuk desimal. Nilai 18H dalam bentuk
Bentuk konversi yang terakhir adalah kedalam bentuk sandi BCD. Sandi BCD
adalah representasi sandi desimal kedalam bentuk biner. Nilai 24 desimal diubah
kedalam sandi BCD adalah 100100BCD. Tampilan hasil konversi dapat dilihat pada
gambar 4.11.
kedalam bentuk komplemen 16. Untuk sandi biner, bilangan negatifnya diubah
kedalam bentuk komplemen 2. Sedangkan untuk bilangan desimal dan sandi BCD,
representasi bilangan negatifnya adalah dengan diberi tanda negatif (-). Pembahasan
Kondisi awal kalkulator berada pada sistem sandi heksadesimal dengan nilai
postif 9H seperti pada gambar 4.12. Untuk mengetahui nilai negatifnya, pengguna
penekanan tombol +/- maka tampilan akan seperti pada gambar 4.13.
63
Gambar 4.12. Data positif yang akan diubah kedalam bentuk negatifnya.
mengubah kedalam sandi biner, terlebih dahulu harus dilakukan pengubahan mode
seperti yang dijelaskan sebelumnya. Tampilan negatif sandi biner dapat dilihat pada
gambar 4.14.
Sedangkan untuk bilangan desimal dan sandi BCD nilai negatifnya ditandai
dengan simbol “-“ di sebelah kiri baris pertama LCD. Tampilan bilangan negatif
desimal dapat dilihat pada gambar 4.15 dan tampilan bilangan negatif sandi BCD
pada gambar 4.16 simbol negatifnya adalah bagian yang diberi tanda lingkaran.
point, maka dalam proses pembagian akan ditampilkan hasil dan sisa pembagiannya.
dengan nilai data masukan pertama adalah 9H seperti pada gambar 4.17.
Langkah 2. Menekan tombol operator pembagian bagi (÷) dan pada tampilan
akan muncul simbol “÷” di sebelah kanan baris pertama LCD seperti pada gambar
4.18.
sama dengan (“=”). Setelah penekanan tombol “=” maka akan muncul hasil
pembagiannya di LCD. Hasil pembagian terletak pada baris kedua LCD. Sedangkan
sisa pembagian terletak pada baris pertama LCD dengan ditandai tulisan “SISA = “
Apabila sisa pembagian adalah nol (0), tulisan “SISA = “ pada LCD baris
maksimum yang sudah ditetapkan atau pengguna salah memberi masukan maka akan
muncul tulisan “ERROR!” pada baris pertama LCD terlihat pada gambar 4.21. Ada
selanjutnya. Apabila muncul pesan “ERROR!” maka hanya ada satu tombol yang
dapat ditekan yaitu tombol “C”. Setelah penekanan tombol “C”, kalkulator dapat
digunakan kembali.
68
hasil perhitungan alat dengan dengan hasil dari kalkulator pembanding. Kalkulator
pembanding yang digunakan adalah aplikasi kalkulator yang tersedia pada komputer.
memberikan masukan data saat kalkulator berada pada mode heksadesimal (HEX)
Pada tabel 4.1 pengujian dilakukan dengan cara memberi masukan pada mode
sampai 4 angka heksadesimal 7FFFH sesuai dengan hasil kalkulator pembanding dan
dapat ditampilkan hasilnya pada mode BIN karena jumlah angka hasil konversinya
menampilkan pesan ERROR!. Hal ini karena hasil konversi 8000H, dapat dilihat
pada hasil kalkulator pembanding adalah 1000 0000 0000 00002 sudah melebihi dari
15 angka. Pemberian masukan lebih dari 7FFFH akan menampilkan pesan ERROR!
Nilai masukan maksimum untuk konversi mode HEX ke mode BIN adalah
7FFFH dengan hasil konversi 111 1111 1111 11112. Pesan ERROR! pada LCD akan
pengambilan data sebelumnya. Kondisi awal kalkulator berada pada mode biner
berhenti sampai nilai 111 1111 1111 11112 karena nilai ini adalah batas maksimum
70
masukan data untuk mode biner. Data konversi biner ke heksadesimal dapat dilihat
Dari tabel 4.2 pemberian masukan pada mode biner sampai batas masukan
maksimum masukannya 15 angka yaitu 111 1111 1111 11112 hasil konversi ke mode
LCD mode heksadesimal yaitu 7FFFH. Hal ini karena hasil konversi tidak melebihi
dari 15 angka.
maksimumnya adalah 111 1111 1111 11112 dan hasil konversi ke mode heksadesimal
tidak akan memunculkan pesan ERROR! karena hasil konversi tidak lebih dari 15
angka.
71
pengambilan data ini kalkulator pembanding diganti dengan perhitungan secara teori
konversi kedalam bentuk sandi BCD. Data konversi heksadesimal ke biner dapat
Pada tabel 4.3 pemberian masukan sampai 4 angka heksadesimal 1F3FH hasil
konversi ke mode BCD sesuai dengan hasil kalkulator pembanding dan dapat
ditampilkan di LCD. Hal ini karena hasil konversi 1F3FH ke mode BCD adalah 111
Saat pemberian masukan lebih 1F40H pada LCD muncul pesan ERROR!. Hal
ini karena hasil konversi 1F40H ke mode BCD yaitu 1000 0000 0000 0000BCD sudah
72
lebih dari 15 angka. Pemberian masukan lebih dari 1F3FH pada konversi mode
heksadesimal ke mode BCD akan muncul pesan ERROR! karena hasil konversinya
adalah 1F3FH. Pesan ERROR! akan muncul apabila hasil konversi sudah melebihi 15
angka.
pengambilan data sebelumnya. Kondisi awal kalkulator berada pada mode BCD
berhenti sampai nilai 111 1001 1001 1001BCD karena nilai ini adalah batas maksimum
masukan mode BCD. Data konversi BCD ke heksadesimal pada tabel 4.4.
Pada tabel 4.4 pemberian masukan maksimum 15 angka pada mode BCD
yaitu 111 1001 1001 1001BCD hasil konversi mode BCD ke heksadesimal sesuai
dengan hasi perhitungan teori dan dapat ditampilkan pada LCD. Hal ini karena hasil
konversi 111 1001 1001 1001BCD ke mode heksadesimal adalah 1F3FH tidak lebih
dari 15 angka.
Pesan ERROR! pada LCD akan muncul apabila pemberian masukan 1010,
1011, 1100, 1101, 1110 atau 1111 pada konversi mode BCD ke mode heksadesimal.
Pada tabel 4.5 pengujian dilakukan dengan cara memberi masukan mode
mode desimal sesuai dengan kalkulator pembanding dan dapat ditampilkan di LCD.
ERROR!. Hal ini karena hasil konversi 38D7EA4C68000H ke mode desimal, dapat
dilihat pada hasil kalkulator pembanding adalah 1000000000000000 sudah lebih dari
ERROR! pada LCD karena hasil konversi ke mode desimalnya sudah lebih dari 15
angka.
adalah nilai maksimum masukan data dalam mode DEC. Data konversi heksadesimal
Dari tabel 4.2 pemberian masukan pada mode desimal sampai batas masukan
LCD mode heksadesimal yaitu 38D7EA4C67FFFH. Hal ini karena hasil konversi
memunculkan pesan ERROR! karena hasil konversi tidak lebih dari 15 angka.
76
kemudian mencari hasil kuadratnya. Pengujian ini dilakukan terhadap keempat mode
yang tersedia yaitu mode HEX, mode BIN, mode DEC dan mode BCD.
Pada tabel 4.8 pengambilan data dengan tujuan untuk mencari batas masukan
maksimum operasi kuadrat mode HEX. Dari data tersebut dapat diketahui bahwa
masukan lebih dari 3FFFFFFFH akan muncul pesan ERROR! pada LCD karena hasil
Pada tabel 4.9 pemberian masukan sampai 8 angka biner 1011 01012 hasil
kuadratnya sesuai dengan kalkulator pembanding dan dapat ditampilkan di LCD. Hal
ini karena hasil kuadrat 1011 01012 adalah 111 1111 1111 10012 tidak lebih 15 angka.
Saat pemberian masukan 1011 01102 hasil kuadratnya muncul pesan ERROR!
pada LCD. Hal ini karena hasil kuadrat 1011 01102, dapat dilihat pada hasil
kalkulator pembanding adalah 1000 0001 0110 01002 sudah lebih dari 15 angka.
Nilai masukan maksimum operasi kuadrat mode biner adalah 1011 01102.
Pesan ERROR! akan muncul di LCD apabila hasil kuadrat lebih dari 15 angka.
Pada tabel 4.10 pemberian masukan sampai 8 angka desimal 31622776 hasil
kuadratnya sesuai dengan kalkulator pembanding dan dapat ditampilkan di LCD. Hal
ini karena hasil kuadrat 31622776 adalah 999999961946176 tidak lebih 15 angka.
pada LCD. Hal ini karena hasil kuadrat 31622777, dapat dilihat pada hasil kalkulator
Hasil kuadrat dengan nilai masukan lebih dari 31622776 akan menyebabkan
munculnya oesan ERROR! pada LCD. Pesan ERROR! akan muncul di LCD apabila
digunakan tidak mendukung operasi mode BCD. Data operasi kuadrat sandi BCD
Pada tabel 4.11 pemberian masukan sampai 8 angka BCD 1000 1001BCD hasil
kuadratnya sesuai dengan kalkulator pembanding dan dapat ditampilkan di LCD. Hal
ini karena hasil kuadrat 10001001BCD adalah 111 1001 0010 0001BCD tidak lebih 15
angka.
ERROR! pada LCD. Hal ini karena hasil kuadrat 1001 0000BCD, dapat dilihat pada
hasil perhitungan teori adalah 1000 0001 0000 0000BCD sudah lebih dari 15 angka.
Pesan ERROR juga akan muncul apabila pemberian masukan 1010 sampai 1111
Nilai masukan maksimum operasi kuadrat mode BCD adalah 1001 0000BCD,
Hasil kuadrat dengan nilai masukan lebih dari 1001 0000BCD akan menyebabkan
munculnya pesan ERROR! pada LCD. Pesan ERROR! akan muncul di LCD apabila
hasil kuadrat lebih dari 15 angka dan pemberian masukan 1010, 1011, 1100, 1101,
yang tersedia yaitu mode HEX, mode BIN, mode DEC dan mode BCD.
dari kalkulator. Data operasi perkalian mode heksadesimal pada tabel 4.12.
Pada tabel 4.12 data No. 1 sampai No. 12 hasil perkalian sesuai dengan hasil
kalkulator pembanding dan dapat ditampilkan di LCD karena hasil perkaliannya tidak
lebih dari 15 angka. Sedangkan data No. 13 sampai No. 15 muncul pesan ERROR!
pada LCD karena hasil perkaliannya sudah lebih dari 15 angka. Pesan ERROR! akan
Untuk data No. 16 sampai No. 20 jumlah angkanya adalah 16 angka, karena
ini adalah perkalian dengan hasil bilangan negatif. Pada tampilan bilangan negatif
untuk mode heksadesimal angka FH paling kiri adalah penunjuk bilangan negatif
dari kalkulator. Data operasi perkalian mode heksadesimal pada tabel 4.13.
Pada tabel 4.13 data No. 1 sampai No. 12 hasil perkalian sesuai dengan hasil
kalkulator pembanding dan dapat ditampilkan di LCD karena hasil perkaliannya tidak
lebih dari 15 angka. Sedangkan data No. 13 sampai No. 15 muncul pesan ERROR!
pada LCD karena hasil perkaliannya sudah lebih dari 15 angka. Pesan ERROR! akan
Untuk data No. 16 sampai No. 20 jumlah angkanya adalah 16 angka, karena
ini adalah perkalian dengan hasil bilangan negatif. Pada tampilan bilangan negatif
untuk mode heksadesimal angka 12 paling kiri adalah penunjuk bilangan negatif
dari kalkulator dengan cara memberi dua masukan nilai kemudian mengalikannya.
Pada tabel 4.14 data No. 1 sampai No. 8 hasil perkalian sesuai dengan hasil
kalkulator pembanding dan dapat ditampilkan di LCD karena hasil perkaliannya tidak
lebih dari 15 angka. Sedangkan data No. 9 sampai No. 10 muncul pesan ERROR!
pada LCD karena hasil perkaliannya sudah lebih dari 15 angka. Pesan ERROR! akan
dari kalkulator. Hasil kalkulator pembading diganti dengan perhitungan teori karena
tidak mendukung operasi dalam mode BCD. Data operasi perkalian mode BCD pada
tabel 4.15.
85
Pada tabel 4.14 data No. 1 sampai No. 8 hasil perkalian sesuai dengan hasil
perhitungan teori dan dapat ditampilkan di LCD karena hasil perkaliannya tidak lebih
dari 15 angka. Sedangkan data No. 9 sampai No. 10 muncul pesan ERROR! pada
LCD karena hasil perkaliannya sudah lebih dari 15 angka. Pesan ERROR! akan
hasil perhitungan dari alat yang dibuat. Nilai sisa bagi pada kalkulator pembanding
diperoleh dengan cara mengalikan hasil bagi dengan pembagi kemudian bilangan
yang dibagi dikurangi dengan hasil perkalian tadi. Pengujian dilakukan terhadap
mengetahui kebenaran hasil perhitungan dari alat. Data operasi pembagian mode
Dari tabel 4.16 hasil operasi pembagian mode heksadesimal tidak akan
muncul pesan ERROR! karena hasil pembagiannya tidak pernah lebih dari 15 angka.
kebenaran hasil perhitungan dari alat. Sisa pembagian pada mode ini berupa mode
Dari tabel 4.17 hasil operasi pembagian mode biner tidak akan muncul pesan
untuk mengetahui kebenaran hasil perhitungan dari alat. Sisa pembagian pada mode
ini berupa mode desimal. Data operasi pembagian mode desimal pada tabel 4.18.
Dari tabel 4.18 hasil operasi pembagian mode desimal tidak akan muncul
pesan ERROR! karena hasil pembagiannya tidak pernah lebih dari 15 angka.
kebenaran hasil perhitungan dari alat. Hasil dari kalkulator pembanding digantikan
mendukung perhitungan dalam mode BCD. Data operasi pembagian mode BCD
Dari tabel 4.19 hasil operasi pembagian mode biner tidak akan muncul pesan
penambahan maksimal yang masih bisa ditampilkan oleh alat. Pengujian dilakukan
Dari tabel 4.20 data No. 1 sampai No. 9 tidak muncul pesan ERROR! pada
LCD karena hasil penambahannya tidak lebih dari 15 angka. Sedangkan pada data
No. 10 muncul pesan ERROR! pada LCD karena hasil penambahannya sudah lebih
dari 15 angka. Pesan ERROR! akan muncul pada LCD apabila hasil penambahan
angka karena hasil penambahannya adalah bilangan negatif. Angka FH paling kiri
tabel 4.21.
13 (-10110) + (-1010) 1111 1111 1110 0000 1111 1111 1110 0000
14 (-1110101) + (-1100) 1111 1111 0111 1111 1111 1111 0111 1111
15 (-11001101) + (-111) 1111 1111 0010 1100 1111 1111 0010 1100
Dari tabel 4.21 data No. 1 sampai No. 8 tidak muncul pesan ERROR! pada
LCD karena hasil penambahannya tidak lebih dari 15 angka. Sedangkan pada data
No. 9 sampai No. 10 muncul pesan ERROR! pada LCD karena hasil penambahannya
sudah lebih dari 15 angka. Pesan ERROR! akan muncul pada LCD apabila hasil
angka karena hasil penambahannya adalah bilangan negatif. Angka 12 paling kiri
tabel 4.22.
Dari tabel 4.22 data No. 1 sampai No. 5 tidak muncul pesan ERROR! pada
LCD karena hasil penambahannya tidak lebih dari 15 angka. Sedangkan pada data
No. 6 sampai No. 7 muncul pesan ERROR! pada LCD karena hasil penambahannya
sudah lebih dari 15 angka. Pesan ERROR! akan muncul pada LCD apabila hasil
Pada data No. 8 sampai data No. 10 jumlah angka hasil penambahannya
adalah bilangan negatif yang ditandai dengan karakter “-“ pada tampilan LCD.
perhitungan mode BCD. Data operasi penambahan mode BCD pada tabel 4.23.
Dari tabel 4.22 data No. 1 sampai No. 6 tidak muncul pesan ERROR! pada
LCD karena hasil penambahannya tidak lebih dari 15 angka. Sedangkan pada data
No. 7 muncul pesan ERROR! pada LCD karena hasil penambahannya sudah lebih
dari 15 angka. Pesan ERROR! akan muncul pada LCD apabila hasil penambahan
Pada data No. 8 sampai data No. 10 jumlah angka hasil penambahannya
adalah bilangan negatif yang ditandai dengan karakter “-“ pada tampilan LCD.
kebenaran hasil perhitungan dari alat yang dibuat dengan membandingkan dari hasil
yang tersedia.
mengetahui kebenaran hasil perhitungan dari alat. Data operasi pengurangan mode
Pada tabel 4.24 data No. 1 sampai No. 8 hasil pengurangannya sesuai dengan
kalkulator pembanding dan tidak muncul pesan ERROR! pada LCD. Hal ini karena
Data No. 9 sampai No. 18 jumlah angka tampilan LCD adalah 16 angka
karena hasil pengurangannya adalah bilangan negatif. Angka FH paling kiri pada
Pada data No. 19 dan No. 20 muncul pesan ERROR! pada LCD karena saat
Hasil perhitungan ini sudah melebihi dari 15 angka positif sehingga muncul pesan
ERROR! pada LCD. Pesan ERROR! pada LCD akan muncul saat hasil perhitungan
mengetahui kebenaran hasil perhitungan dari alat. Data operasi pengurangan mode
Pada tabel 4.25 data No. 1 sampai No. 8 hasil pengurangannya sesuai dengan
kalkulator pembanding dan tidak muncul pesan ERROR! pada LCD. Hal ini karena
Data No. 9 sampai No. 18 jumlah angka tampilan LCD adalah 16 angka
karena hasil pengurangannya adalah bilangan negatif. Angka FH paling kiri pada
Pada data No. 19 dan No. 20 muncul pesan ERROR! pada LCD karena saat
perhitungan ini sudah melebihi dari 15 angka positif sehingga muncul pesan ERROR!
pada LCD. Pesan ERROR! pada LCD akan muncul saat hasil perhitungan positf lebih
dari 15 angka.
untuk mengetahui kebenaran hasil perhitungan dari alat. Data operasi pengurangan
5 3 – 12 -9 -9
6 (-95486) – 654 -96140 -96140
7 (-587) – 23 -610 -610
8 (-25) – 5 -30 -30
9 999999999999998 – (-2) 1000000000000000 ERROR!
10 999999999999999 – (-3) 1000000000000002 ERROR!
Pada tabel 4.26 data No. 1 sampai No. 8 hasil pengurangannya sesuai dengan
kalkulator pembanding dan tidak muncul pesan ERROR! pada LCD. Hal ini karena
hasil pengurangannya tidak lebih dari 15 angka. Tampilan bilangan negatif pada
Pada data No. 9 dan No. 10 muncul pesan ERROR! pada LCD karena saat
perhitungan ini sudah melebihi dari 15 angka positif sehingga muncul pesan ERROR!
pada LCD. Pesan ERROR! pada LCD akan muncul saat hasil perhitungan positf lebih
dari 15 angka.
Pengambilan data operasi pengurangan mode BCD dilakukan secara acak untuk
mengetahui kebenaran hasil perhitungan dari alat. Data operasi pengurangan mode
Pada tabel 4.27 data No. 1 sampai No. 8 hasil pengurangannya sesuai dengan
kalkulator pembanding dan tidak muncul pesan ERROR! pada LCD. Hal ini karena
hasil pengurangannya tidak lebih dari 15 angka. Tampilan bilangan negatif pada
Pada data No. 9 dan No. 10 muncul pesan ERROR! pada LCD karena saat
pemberian masukan 111 1001 1001 1001 – (-1) proses perhitungan yang terjadi
Hasil perhitungan ini sudah melebihi dari 15 angka positif sehingga muncul pesan
ERROR! pada LCD. Pesan ERROR! pada LCD akan muncul saat hasil perhitungan
kebenaran hasil perhitungan dari alat yang dibuat dengan membandingkan hasil
kalkulator pembanding.
kemudian dihitung nilai akarnya. Hal ini dikarenakan kalkulator pembanding yang
Nilai akar yang diambil hanya nilai integer. Data operasi akar kuadrat mode
Pada tabel 4.28 hasil kuadrat masukan nilai positif sesuai dengan hasil
kalkulator pembanding dan tidak muncul pesan ERROR! karena hasil kuadratnya
Pesan ERROR! akan muncul apabila masukan nilai negatif diakarkan, karena
Untuk menghitung nilai akar kuadrat mode biner, pada kalkulator pembanding
nilai biner di konversi terlebih dahulu ke dalam bentuk desimal kemudian dihitung
nilai akarnya. Hal ini dikarenakan kalkulator pembanding yang digunakan tidak
mendukung untuk perhitungan akar kuadrat mode biner. Nilai akar yang diambil
hanya nilai integer. Data operasi akar kuadrat mode biner pada tabel 4.29.
Hasil Keluaran
No Masukan
Kalkulator Pembanding Tampilan LCD
1 √111 10 10
2 √1001 11 11
3 √10000 100 100
4 √11000 100 100
5 √1001000 1000 1000
6 √1100010101 11100 11100
7 √1100100001 11100 11100
8 √10000000000 100000 100000
9 √10000010000 100000 100000
10 √110010101010101 10100001 10100001
11 √110011001100110 10100001 10100001
12 √111111111111001 10110101 10110101
13 √111111111111111 10110101 10110101
14 √(-1001000) -- ERROR!
15 √(-1100010101) -- ERROR!
101
Pada tabel 4.29 hasil kuadrat masukan nilai positif sesuai dengan hasil
kalkulator pembanding dan tidak muncul pesan ERROR! karena hasil kuadratnya
Pesan ERROR! akan muncul apabila masukan nilai negatif diakarkan, karena
Pada tabel 4.30 hasil kuadrat masukan nilai positif sesuai dengan hasil
kalkulator pembanding dan tidak muncul pesan ERROR! karena hasil kuadratnya
Pesan ERROR! akan muncul apabila masukan nilai negatif diakarkan, karena
Untuk menghitung nilai akar kuadrat mode BCD, pada kalkulator pembanding
nilai BCD di konversi terlebih dahulu ke dalam bentuk desimal kemudian dihitung
nilai akarnya. Hal ini dikarenakan kalkulator pembanding yang digunakan tidak
mendukung untuk perhitungan akar kuadrat mode BCD. Nilai akar yang diambil
hanya nilai integer. Data operasi akar kuadrat mode BCD pada tabel 4.31.
Hasil Keluaran
No Masukan
Kalkulator Pembanding Tampilan LCD
1 √1001 11 11
2 √100000 100 100
3 √110110 110 110
4 √1110000 1000 1000
5 √10000001 1001 1001
6 √10011001 1001 1001
7 √100000000 10000 10000
8 √100010000 10000 10000
9 √100110000 10001 10001
10 √100110011001 110001 110001
11 √1000000000000 110001 110001
12 √111100101010000 10001001 10001001
13 √111100110011001 10001001 10001001
14 √(-10011001) 1001 1001
15 √(-100000000) 10000 10000
103
Pada tabel 4.31 hasil kuadrat masukan nilai positif sesuai dengan hasil
kalkulator pembanding dan tidak muncul pesan ERROR! karena hasil kuadratnya
tidak pernah lebih dari 15 angka. Pesan ERROR! akan muncul apabila masukan nilai
negatif diakarkan, karena nilai negatif tidak memiliki hasil akar kuadrat.
Perhitungan berulang kali adalah pengujian alat dengan diberi masukan yang
menggunakan lebih dari satu jenis operator dan diakhiri dengan tombol sama dengan.
9x2–7 11 11
9 + 12 x 5 69 105
105 – 24 x 3 + 1 34 244
10101 + 100 – 111 10010 10010
1001 x 101 ÷ 110 111 111
BCD
Dari tabel 4.32 pada bagian yang dicetak miring, hasil perhitungan alat
berbeda dengan kalkulator pembanding. Hal ini disebabkan karena perhitungan pada
alat adalah berdasarkan urutan operator yang ditekan. Sebagai contoh jika diberi
dengan urutan eksekusi kuadrat, akar kuadrat, kali, bagi, tambah dan kurang. Sebagai
contoh dengan masukan 9 + 12 x 5, maka yang dihitung terlebih dahulu adalah nilai
karakter yang ke-16 maka program akan berhenti melakukan proses scanning keypad.
Program scanning keypad dapat dilihat pada lampiran listing program hal 2 bagian
kemudian mengubah data masukan ke mode yang berbeda berulang kali secara
berurutan. Sebagai contoh nilai 9H akan diubah ke mode biner menghasilkan 10012
kemudian diubah ke mode desimal menghasilkan nilai 9 dan yang terakhir diubah ke
mode BCD menghasilkan 1001BCD. Data konversi berulang kali pada tabel 4.33.
4.33. Data konversi berulang kali.
Masukan Urutan Mode Konversi
No Mode BIN DEC BCD
HEX
1 9 1001 9 1001
2 4F 100 1111 79 111 1001
3 -9 1111 1111 1111 0111 65527 ERROR!
4 -4F 1111 1111 1011 0001 65457 ERROR!
Urutan Mode Konversi
BIN BCD DEC
5 9 1001 1001 9
6 4F 100 1111 111 1001 79
7 -9 1111 1111 1111 0111 ERROR! --
8 -4F 1111 1111 1011 0001 ERROR! --
Urutan Mode Konversi
DEC BCD BIN
9 9 9 1001 1001
10 4F 79 111 1001 100 1111
11 -9 -9 1001 1001
12 -4F -79 111 1001 100 1111
Urutan Mode Konversi
DEC BIN BCD
13 9 9 1001 1001
14 4F 79 100 1111 111 1001
15 -9 -9 1111 1111 1111 0111 ERROR!
16 -4F -79 1111 1111 1011 0001 ERROR!
Urutan Mode Konversi
BCD BIN DEC
17 9 1001 1001 9
18 4F 111 1001 100 1111 79
19 -9 -1001 1001 9
20 -4F -111 1001 100 1111 79
Dari tabel 4.33 proses konversi data ke ketiga mode yang berbeda secara
untuk bilangan negatif terdapat kesalahan saat proses konversi lebih dari satu kali.
Hal ini disebabkan data pada register penyimpan kode negatif hilang karena
5.1 Kesimpulan
2. Pesan ERROR akan muncul di LCD apabila hasil perhitungan lebih dari 15
digit.
5. Proses konversi bilangan negatif hanya dapat satu kali pengubahan mode
5.2 Saran
106
DAFTAR PUSTAKA
107
LAMPIRAN 1
RANGKAIAN KALKULATOR
BERBASIS MIKROKONTROLER
Rangkaian Kalkulator Berbasis Mikrokontroler
LAMPIRAN 2
LISTING PROGRAM
1 0000 ;================================================
2 0000 ; Program Kalkulator Berbasis Mikrokontroler
3 0000 ;================================================
5 0000 LCD_RS bit P0.6
6 0000 LCD_E bit P0.7
7 0000 Data_LCD equ P2
8 0000 ;
9 0000 Kolom equ P1
10 0000 Baris equ P3
11 0000 Baris1 bit P3.0
12 0000 Baris2 bit P3.1
13 0000 Baris3 bit P3.2
14 0000 Baris4 bit P3.3
15 0000 Baris5 bit P3.4
16 0000 Baris6 bit P3.5
17 0000 Baris7 bit P3.6
18 0000 Baris8 bit P3.7
19 0000 Kolom1 bit P1.0
20 0000 Kolom2 bit P1.1
21 0000 Kolom3 bit P1.2
22 0000 Kolom4 bit P1.3
23 0000 ;
24 0000 Kode_BIN equ #01H
25 0000 Kode_HEX equ #02H
26 0000 Kode_DEC equ #03H
27 0000 Kode_BCD equ #04H
28 0000 Data_Operator equ 2BH
29 0000 Data_Negatif equ 2FH
30 0000 Terima_atas equ 30H
31 0000 Terima_bawah equ 40H
32 0000 Key_Data equ 20H
33 0000 Data_Hasil equ 21H
35 0000 Data_1_Temp equ 50H
36 0000 Data_2_Temp equ 60H
37 0000 Data_1 equ 70H
38 0000 Data_2 equ 80H
39 0000 Hasil equ 090H
40 0000 Sisa equ 0A0H
41 0000 Jml_Byte equ #8
43 0000 org 00H
45 0000 mov sp,#08H
47 0003 ;================================================
48 0003 ; Inisilisasi LCD
49 0003 ;================================================
50 0003 Inist_LCD:
51 0003 lcall LTunda
52 0006 lcall LTunda
53 0009 mov A,#03FH ;Fuction set 8 bit
54 000B lcall Write_inst
55 000E lcall Write_inst
56 0011 lcall LTunda
57 0014 mov A,#03H ;Cursor home
58 0016 lcall Write_inst
59 0019 mov A,#0DH ;Display ON, cursor OFF, bilnk O
60 001B lcall Write_inst
61 001E mov A,#06H ;increment, no display shift
62 0020 lcall Write_inst
63 0023 mov A,#01H ;display clear
64 0025 lcall Write_inst
65 0028 mov A,#80H ;cursor pada posisi awal
66 002A lcall Write_inst
67 002D mov A,#0CH ; cursor OFF, blink OFF
68 002F lcall Write_inst
70 0032 ;================================================
71 0032 ; MAIN PROGRAM
72 0032 ;================================================
74 0032 Start:
75 0032 mov R7,#Kode_HEX
76 0034 mov R0,#Terima_atas
77 0036 mov DPTR,#Judul4 ;Tampilan awal = Mode Hex
78 0039 lcall Pindah_RAM
79 003C lcall Baris_atas
80 003F lcall LTunda
81 0042 mov R0,#Terima_bawah
82 0044 mov Data_Negatif,#0
83 0047 acall Tampilan_C
1
86 0049 Next_Data:
87 0049 mov (Key_Data+2),#Data_2_Temp ;Masukan Data 2
88 004C mov (Key_Data+6),#(Data_2_Temp+15)
89 004F mov (Key_Data+7),#Data_2
90 0052 mov Data_Operator,(Data_Operator+1)
91 0055 lcall Hapus_Karakter
92 0058 sjmp Scan
94 005A ;================================================
95 005A Hitung:
96 005A acall Cek_Mode_Hitung
98 005C mov R0,#(Data_1_Temp+15) ;Menggabungkan data satuan
99 005E mov R1,#(Data_1_Temp+14)
100 0060 acall Gabung_Data
101 0062 mov R0,#(Data_2_Temp+15)
102 0064 mov R1,#(Data_2_Temp+14)
103 0066 acall Gabung_Data
105 0068 mov R0,#(Data_1_Temp+15) ;Simpan data bentuk satuannya
106 006A mov R1,#Data_1
107 006C acall Simpan_Data
108 006E mov R0,#(Data_2_Temp+15)
109 0070 mov R1,#Data_2
110 0072 acall Simpan_Data
111 0074 ;=================================================
112 0074 acall Cek_Operator
113 0076 acall Cek_Mode_Tampilan
114 0078 mov R0,#Data_1_Temp
115 007A acall Cek_Spasi
116 007C mov R0,#Data_2_Temp
117 007E acall Cek_Spasi
118 0080 mov R0,#Data_1_Temp
119 0082 mov R1,#Terima_bawah
120 0084 acall Copy_Data
121 0086 lcall Baris_bawah
122 0089 mov A,Data_Operator
123 008B cjne A,#02H,Tidak_Sisa
124 008E lcall Tampilan_Sisa
126 0091 Tidak_Sisa:
127 0091 acall Cek_Mode_Akhir
128 0093 acall Copy_D2T_D1T
129 0095 mov A,Data_Hasil ;Cek apakah "=" ditekan ?
130 0097 cjne A,#0FFH,Next_Data
131 009A mov Data_Operator,#00H
132 009D mov (Data_Operator+1),#00H
133 00A0 mov Data_Hasil,#00H
134 00A3 sjmp Next_Data
137 00A5 ;================================================
138 00A5 ; Subrutin Scanning keypad 8 x 4
139 00A5 ;================================================
140 00A5 Scan:
141 00A5 mov 29H,#15 ;Maksimum 15 data
142 00A8 Loop_Scan:
143 00A8 ajmp Cek_Mode
144 00AA Loop_Scan_2:
145 00AA mov sp,#08H
146 00AD mov A,Key_Data
147 00AF mov R0,#(Terima_bawah+15)
148 00B1 mov R1,(Key_Data+2)
149 00B3 add A,#30H ;Ubah ke bentuk ASCII
150 00B5 mov @R0,A
151 00B6 acall Pindah_Data_Temp
152 00B8 lcall Baris_bawah
153 00BB acall Pindah_TB
154 00BD djnz 29H,Loop_Scan
155 00C0 ljmp Operator_2
157 00C3 ;================================================
158 00C3 ; Subrutin Pindah Data ke Data_Temp
159 00C3 ;================================================
160 00C3 Pindah_Data_Temp:
161 00C3 mov R0,#Terima_bawah
162 00C5 mov R3,#16
163 00C7 Loop_Data_Temp:
164 00C7 clr C
165 00C8 mov A,@R0 ;R0 = Alamat data asal
166 00C9 subb A,#30H
167 00CB jc Tidak_Kurang_30H
168 00CD Cek_Huruf: ;Cek apakah masukan Huruf ?
2
169 00CD clr C
170 00CE subb A,#0AH
171 00D0 jnc Lebih_Besar_9
172 00D2 add A,#0AH
173 00D4 Loop_Data_Temp_2:
174 00D4 mov @R1,A
175 00D5 inc R0
176 00D6 inc R1
177 00D7 djnz R3,Loop_Data_Temp
178 00D9 ret
180 00DA Tidak_Kurang_30H:
181 00DA clr C
182 00DB add A,#10H
183 00DD sjmp Cek_Huruf
185 00DF Lebih_Besar_9:
186 00DF clr C
187 00E0 add A,#03H
188 00E2 sjmp Loop_Data_Temp_2
190 00E4 ;================================================
191 00E4 ; Subrutin pindah data ke Terima_bawah
192 00E4 ;================================================
193 00E4 Pindah_TB:
194 00E4 push 01H
195 00E6 mov R3,#15
196 00E8 mov R0,#(Terima_bawah)
197 00EA mov R1,#(Terima_bawah+1)
198 00EC Loop_Pindah_TB:
199 00EC mov A,@R1
200 00ED mov @R0,A
201 00EE inc R0
202 00EF inc R1
203 00F0 djnz R3,Loop_Pindah_TB
204 00F2 pop 01H
205 00F4 ret
207 00F5 ;================================================
208 00F5 ; Tunggu tombol dilepas
209 00F5 ;================================================
210 00F5 Tunggu_tombol_dilepas:
211 00F5 jnb Baris1,$
212 00F8 jnb Baris2,$
213 00FB jnb Baris3,$
214 00FE jnb Baris4,$
215 0101 jnb Baris5,$
216 0104 jnb Baris6,$
217 0107 jnb Baris7,$
218 010A jnb Baris8,$
219 010D Reset_Keypad:
220 010D setb Kolom1
221 010F setb Kolom2
222 0111 setb Kolom3
223 0113 setb Kolom4
224 0115 ret
226 0116 ;================================================
227 0116 ; KEYPAD 8 x 4
228 0116 ;================================================
230 0116 ;================================================
231 0116 ; Subrutin MODE
232 0116 ;================================================
234 0116 Mode:
235 0116 acall Reset_Keypad
236 0118 mov R0,#(Data_2_Temp+15)
237 011A mov R1,#(Data_2_Temp+14)
238 011C acall Gabung_Data
239 011E mov R0,#(Data_2_Temp+15)
240 0120 mov R1,#Data_1
241 0122 acall Simpan_Data
243 0124 BCD:
244 0124 clr Kolom4
245 0126 jb Baris2,BIN
246 0129 acall Tunggu_tombol_dilepas
247 012B mov R7,#Kode_BCD ;Simpan kode BCD
248 012D mov (Data_Negatif-2),Data_Negatif
249 0130 acall Cek_Mode_Tampilan
250 0132 push 30H
251 0134 mov R0,#Terima_atas
252 0136 mov DPTR,#Judul2 ; Tampilkan BCD
3
253 0139 lcall Pindah_RAM
254 013C pop 30H
255 013E lcall Baris_atas
256 0141 acall Ubah_Mode
257 0143 acall Loop_Tampilan_C
258 0145 acall Cek_Mode_Akhir
259 0147 setb Kolom4
260 0149 ret
261 014A BIN:
262 014A jb Baris3,HEX
263 014D acall Tunggu_tombol_dilepas
264 014F mov R7,#Kode_BIN ;Simpan kode BIN
265 0151 mov (Data_Negatif-2),Data_Negatif
266 0154 acall Cek_Mode_Tampilan
267 0156 mov R0,#Terima_atas
268 0158 mov DPTR,#Judul3 ; Tampilkan BIN
269 015B lcall Pindah_RAM
270 015E lcall Baris_atas
271 0161 acall Ubah_Mode
272 0163 acall Loop_Tampilan_C
273 0165 acall Cek_Mode_Akhir
274 0167 setb Kolom4
275 0169 ret
276 016A HEX:
277 016A jb Baris4,DEC
278 016D acall Tunggu_tombol_dilepas
279 016F mov R7,#Kode_HEX ;Simpan kode HEX
280 0171 mov (Data_Negatif-2),Data_Negatif
281 0174 acall Cek_Mode_Tampilan
282 0176 mov R0,#Terima_atas
283 0178 mov DPTR,#Judul4 ; Tampilkan HEX
284 017B lcall Pindah_RAM
285 017E lcall Baris_atas
286 0181 acall Ubah_Mode
287 0183 acall Cek_Mode_Akhir
288 0185 lcall Hapus_Temp
289 0188 setb Kolom4
290 018A ret
291 018B DEC:
292 018B jb Baris5,BCD
293 018E acall Tunggu_tombol_dilepas
294 0190 mov R7,#Kode_DEC ;Simpan kode DEC
295 0192 mov (Data_Negatif-2),Data_Negatif
296 0195 acall Cek_Mode_Tampilan
297 0197 push 30H
298 0199 mov R0,#Terima_atas
299 019B mov DPTR,#Judul5 ; Tampilkan DEC
300 019E lcall Pindah_RAM
301 01A1 pop 30H
302 01A3 lcall Baris_atas
303 01A6 acall Ubah_Mode
304 01A8 lcall Hapus_Temp
305 01AB setb Kolom4
306 01AD ret
308 01AE Ubah_Mode:
309 01AE mov R0,#Data_1_Temp
310 01B0 acall Cek_Spasi
311 01B2 mov R0,#Data_1_Temp
312 01B4 mov R1,#Terima_bawah
313 01B6 acall Copy_Data
314 01B8 lcall Baris_bawah
315 01BB ret
318 01BC ;================================================
319 01BC ; Scanning Keypad Mode Hex
320 01BC ;================================================
321 01BC Hex_Key:
322 01BC Huruf_A: ;Huruf A (41H = 30 +11)
323 01BC acall Reset_Keypad
324 01BE clr Kolom1
325 01C0 jb Baris3,Huruf_D
326 01C3 lcall LTunda
327 01C6 acall Tunggu_tombol_dilepas
328 01C8 acall Cek_Mode_Awal
329 01CA mov Key_Data,#11H
330 01CD setb Kolom1
331 01CF ajmp Loop_Scan_2
4
332 01D1 Huruf_D: ;Huruf D (44H = 30 + 14)
333 01D1 jb Baris4,Huruf_B
334 01D4 lcall LTunda
335 01D7 acall Tunggu_tombol_dilepas
336 01D9 acall Cek_Mode_Awal
337 01DB mov Key_Data,#14H
338 01DE setb Kolom1
339 01E0 ajmp Loop_Scan_2
340 01E2 Huruf_B:
341 01E2 acall Reset_Keypad
342 01E4 clr Kolom2 ;Huruf B (42H = 30 + 12)
343 01E6 jb Baris3,Huruf_E
344 01E9 lcall LTunda
345 01EC acall Tunggu_tombol_dilepas
346 01EE acall Cek_Mode_Awal
347 01F0 mov Key_Data,#12H
348 01F3 setb Kolom2
349 01F5 ajmp Loop_Scan_2
350 01F7 Huruf_E: ;Huruf E (45H = 30 +15)
351 01F7 jb Baris4,Huruf_C
352 01FA lcall LTunda
353 01FD acall Tunggu_tombol_dilepas
354 01FF acall Cek_Mode_Awal
355 0201 mov Key_Data,#15H
356 0204 setb Kolom2
357 0206 ajmp Loop_Scan_2
358 0208 Huruf_C: ;Huruf_C (43H = 30 + 13)
359 0208 acall Reset_Keypad
360 020A clr Kolom3
361 020C jb Baris3,Huruf_F
362 020F lcall LTunda
363 0212 acall Tunggu_tombol_dilepas
364 0214 acall Cek_Mode_Awal
365 0216 mov Key_Data,#13H
366 0219 setb Kolom3
367 021B ajmp Loop_Scan_2
368 021D Huruf_F: ;Huruf F (46H = 30 + 16)
369 021D jb Baris4,Angka_7
370 0220 lcall LTunda
371 0223 acall Tunggu_tombol_dilepas
372 0225 acall Cek_Mode_Awal
373 0227 mov Key_Data,#16H
374 022A setb Kolom3
375 022C ajmp Loop_Scan_2
376 022E Dec_Key:
377 022E Angka_7: ;Angka 7 (37H = 30 + 7)
378 022E acall Reset_Keypad
379 0230 clr Kolom1
380 0232 jb Baris5,Angka_4
381 0235 lcall LTunda
382 0238 acall Tunggu_tombol_dilepas
383 023A acall Cek_Mode_Awal
384 023C mov Key_Data,#7H
385 023F setb Kolom1
386 0241 ajmp Loop_Scan_2
387 0243 Angka_4: ;Angka_4 (34H = 30 + 4)
388 0243 jb Baris6,Angka_8
389 0246 lcall LTunda
390 0249 acall Tunggu_tombol_dilepas
391 024B acall Cek_Mode_Awal
392 024D mov Key_Data,#4H
393 0250 setb Kolom1
394 0252 ajmp Loop_Scan_2
395 0254 Angka_8: ;Angka_8 (38H = 30 + 8)
396 0254 acall Reset_Keypad
397 0256 clr Kolom2
398 0258 jb Baris5,Angka_5
399 025B lcall LTunda
400 025E acall Tunggu_tombol_dilepas
401 0260 acall Cek_Mode_Awal
402 0262 mov Key_Data,#8H
403 0265 setb Kolom2
404 0267 ajmp Loop_Scan_2
405 0269 Angka_5: ;Angka_5 (35H = 30 + 5)
406 0269 jb Baris6,Angka_2
407 026C lcall LTunda
5
408 026F acall Tunggu_tombol_dilepas
409 0271 acall Cek_Mode_Awal
410 0273 mov Key_Data,#5H
411 0276 setb Kolom2
412 0278 ajmp Loop_Scan_2
413 027A Angka_2: ;Angka_2 (32H = 30 + 2)
414 027A jb Baris7,Angka_9
415 027D lcall LTunda
416 0280 acall Tunggu_tombol_dilepas
417 0282 acall Cek_Mode_Awal
418 0284 mov Key_Data,#2H
419 0287 setb Kolom2
420 0289 ajmp Loop_Scan_2
421 028B Angka_9: ;Angka_9 (39H = 30 + 9)
422 028B acall Reset_Keypad
423 028D clr Kolom3
424 028F jb Baris5,Angka_6
425 0292 lcall LTunda
426 0295 acall Tunggu_tombol_dilepas
427 0297 acall Cek_Mode_Awal
428 0299 mov Key_Data,#9H
429 029C setb Kolom3
430 029E ajmp Loop_Scan_2
431 02A0 Angka_6: ;Angka_6 (36H = 30 + 6)
432 02A0 jb Baris6,Angka_3
433 02A3 lcall LTunda
434 02A6 acall Tunggu_tombol_dilepas
435 02A8 mov Key_Data,#6H
436 02AB setb Kolom3
437 02AD ajmp Loop_Scan_2
438 02AF Angka_3: ;Angka_3 (33H = 30 + 3)
439 02AF jb Baris7,Angka_1
440 02B2 lcall LTunda
441 02B5 acall Tunggu_tombol_dilepas
442 02B7 acall Cek_Mode_Awal
443 02B9 mov Key_Data,#3H
444 02BC setb Kolom3
445 02BE ajmp Loop_Scan_2
446 02C0 Bin_Key:
447 02C0 Angka_1: ;Angka_1 (31H = 30 + 1)
448 02C0 acall Reset_Keypad
449 02C2 clr Kolom1
450 02C4 jb Baris7,Angka_0
451 02C7 lcall LTunda
452 02CA acall Tunggu_tombol_dilepas
453 02CC acall Cek_Mode_Awal
454 02CE mov Key_Data,#1H
455 02D1 setb Kolom1
456 02D3 ajmp Loop_Scan_2
457 02D5 Angka_0: ;Angka_0 (30H = 30 + 0)
458 02D5 jb Baris8,Operator
459 02D8 lcall LTunda
460 02DB acall Tunggu_tombol_dilepas
461 02DD acall Cek_Mode_Awal
462 02DF mov Key_Data,#0H
463 02E2 setb Kolom1
464 02E4 ajmp Loop_Scan_2
465 02E6 Operator:
466 02E6 Key_Mode:
467 02E6 acall Reset_Keypad
468 02E8 clr Kolom4
469 02EA jb Baris1,Key_Akar
470 02ED acall Tunggu_tombol_dilepas
471 02EF acall Cek_Mode_Awal
472 02F1 mov R0,#Terima_atas
473 02F3 mov DPTR,#Judul1 ; tampilkan MODE
474 02F6 lcall Pindah_RAM
475 02F9 lcall Baris_atas
476 02FC acall Cek_Mode_Hitung
477 02FE acall Mode
478 0300 setb Kolom4
479 0302 ajmp Next_Data
480 0304 Key_Akar:
481 0304 jb Baris2,Key_Kali
482 0307 acall Tunggu_tombol_dilepas
483 0309 mov sp,#08H
6
484 030C mov A,Data_Negatif
485 030E cjne A,#00H,Gak_Bisa_Akar
486 0311 acall Cek_Mode_Awal
487 0313 mov (Terima_atas+14),#0E8H ;Simbol Akar (E8H)
488 0316 lcall Baris_atas
489 0319 lcall Akar
490 031C cjne R7,#3H,Key_Akar_BD
491 031F mov R0,#Sisa
492 0321 mov R1,#Data_2_Temp
493 0323 lcall Copy_Data
494 0326 Key_Akar_BD:
495 0326 acall Cek_Mode_Akhir
496 0328 setb Kolom4
497 032A ajmp Next_Data
499 032C Gak_Bisa_Akar:
500 032C ljmp Sistem_Error
502 032F Key_Kali: ;Kode Kali = 1
503 032F jb Baris3,Key_Bagi
504 0332 acall Tunggu_tombol_dilepas
505 0334 acall Cek_Mode_Awal
506 0336 mov (Terima_atas+14),#078H ;Simbol Kali (78H)
507 0339 lcall Baris_atas
508 033C mov (Data_Operator+1),#1H ;Simpan Kode Kali
509 033F mov A,Data_Operator
510 0341 cjne A,#00H,Proses
511 0344 acall Copy_D2T_D1T
512 0346 mov (Data_Negatif-1),Data_Negatif
513 0349 mov Data_Negatif,#00H
514 034C setb Kolom4
515 034E ajmp Next_Data
516 0350 Key_Bagi: ;Kode Bagi = 2
517 0350 jb Baris4,Key_Tambah
518 0353 acall Tunggu_tombol_dilepas
519 0355 acall Cek_Mode_Awal
520 0357 mov (Terima_atas+14),#0FDH ;Simbol Bagi (FDH)
521 035A lcall Baris_atas
522 035D mov (Data_Operator+1),#2H ;Simpan Kode Bagi
523 0360 mov A,Data_Operator
524 0362 cjne A,#00H,Proses
525 0365 acall Copy_D2T_D1T
526 0367 mov (Data_Negatif-1),Data_Negatif
527 036A mov Data_Negatif,#00H
528 036D setb Kolom4
529 036F ajmp Next_Data
530 0371 Key_Tambah: ;Kode Tambah = 3
531 0371 jb Baris5,Key_Kurang
532 0374 acall Tunggu_tombol_dilepas
533 0376 acall Cek_Mode_Awal
534 0378 mov (Terima_atas+14),#02BH ;Simbol Tambah (2BH)
535 037B lcall Baris_atas
536 037E mov (Data_Operator+1),#3H ;Simpan Kode Tambah
537 0381 mov A,Data_Operator
538 0383 cjne A,#00H,Proses
539 0386 acall Copy_D2T_D1T
540 0388 mov (Data_Negatif-1),Data_Negatif
541 038B mov Data_Negatif,#00H
542 038E setb Kolom4
543 0390 ajmp Next_Data
544 0392 Key_Kurang: ;Kode Kurang = 4
545 0392 jb Baris6,Key_DEL
546 0395 acall Tunggu_tombol_dilepas
547 0397 acall Cek_Mode_Awal
548 0399 mov (Terima_atas+14),#0B0H ;Simbol Kurang (B0H)
549 039C lcall Baris_atas
550 039F mov (Data_Operator+1),#4H ;Simpan Kode Kurang
551 03A2 mov A,Data_Operator
552 03A4 cjne A,#00H,Proses
553 03A7 acall Copy_D2T_D1T
554 03A9 mov (Data_Negatif-1),Data_Negatif
555 03AC mov Data_Negatif,#00H
556 03AF setb Kolom4
557 03B1 ajmp Next_Data
559 03B3 Proses:
560 03B3 ajmp Hitung
562 03B5 Key_DEL:
563 03B5 jb Baris7,Key_Hasil
7
564 03B8 lcall LTunda
565 03BB acall Tunggu_tombol_dilepas
566 03BD acall Cek_Mode_Awal
567 03BF acall Tampilan_DEL
568 03C1 setb Kolom4
569 03C3 ajmp Cek_Mode
570 03C5 Key_Hasil:
571 03C5 jb Baris8,Key_C
572 03C8 acall Tunggu_tombol_dilepas
573 03CA acall Cek_Mode_Awal
574 03CC mov (Terima_atas+14),#03DH ;Simbol "=" (3DH)
575 03CF lcall Baris_atas
576 03D2 mov Data_Hasil,#0FFH
577 03D5 setb Kolom4
578 03D7 mov A,Data_Operator
579 03D9 cjne A,#00H,Calculate
580 03DC ajmp Next_Data
581 03DE Key_C:
582 03DE acall Reset_Keypad
583 03E0 clr Kolom1
584 03E2 jb Baris1,Key_CE
585 03E5 lcall LTunda
586 03E8 acall Tunggu_tombol_dilepas
587 03EA acall Tampilan_C
588 03EC setb Kolom1
589 03EE ajmp Next_Data
590 03F0 Key_CE:
591 03F0 jb Baris2,Key_Kuadrat
592 03F3 lcall LTunda
593 03F6 acall Tunggu_tombol_dilepas
594 03F8 acall Tampilan_CE
595 03FA setb Kolom1
596 03FC ajmp Next_Data
597 03FE Key_Kuadrat:
598 03FE acall Reset_Keypad
599 0400 clr Kolom3
600 0402 jb Baris2,Key_Tanda
601 0405 acall Tunggu_tombol_dilepas
602 0407 mov sp,#08H
603 040A acall Cek_Mode_Awal
604 040C lcall Kuadrat
605 040F cjne R7,#3H,Key_Kuadrat_BD
606 0412 mov R0,#Sisa
607 0414 mov R1,#Data_2_Temp
608 0416 lcall Copy_Data
609 0419 Key_Kuadrat_BD:
610 0419 acall Cek_Mode_Akhir
611 041B setb Kolom3
612 041D ajmp Next_Data
613 041F Key_Tanda:
614 041F jb Baris8,Loop_Operator
615 0422 lcall LTunda
616 0425 acall Tunggu_tombol_dilepas
617 0427 mov sp,#08H
618 042A mov A,Data_Negatif
619 042C cpl A
620 042D mov Data_Negatif,A
621 042F acall Cek_Mode_Awal
622 0431 acall Bilangan_Negatif
623 0433 setb Kolom3
624 0435 ajmp Next_Data
626 0437 Loop_Operator:
627 0437 ajmp Cek_Mode
629 0439 Calculate:
630 0439 ajmp Hitung
634 043B ;================================================
635 043B ; Subrutin Bilangan Negatif
636 043B ;================================================
637 043B Bilangan_Negatif:
638 043B clr C
639 043C mov A,#02H
640 043E subb A,R7
641 043F jc Bil_Dec ;Cek apakah Mode Dec atau BCD
643 0441 push 2EH
644 0443 mov R0,#Data_1_Temp
645 0445 mov R1,#0B0H
8
646 0447 acall Copy_Data
647 0449 acall Cek_Mode_Hitung
648 044B mov R0,#(Data_2_Temp+15) ;Menggabungkan data satuan
649 044D mov R1,#(Data_2_Temp+14)
650 044F acall Gabung_Data
651 0451 mov R0,#(Data_2_Temp+15)
652 0453 mov R1,#Data_1
653 0455 acall Simpan_Data
655 0457 mov (Data_Negatif-2),(Data_Negatif)
656 045A acall Cek_Mode_Tampilan
657 045C mov R0,#Data_1_Temp
658 045E acall Cek_Spasi
659 0460 mov R0,#Data_1_Temp
660 0462 mov R1,#Terima_bawah
661 0464 acall Copy_Data
662 0466 lcall Baris_bawah
663 0469 acall Cek_Mode_Akhir
664 046B mov R0,#0B0H
665 046D mov R1,#Data_1_Temp
666 046F acall Copy_Data
667 0471 mov R0,#0B0H
668 0473 acall Hapus_Nilai
669 0475 pop 2EH
670 0477 ret
672 0478 Bil_Dec:
673 0478 mov A,Data_Negatif
674 047A cjne A,#0FFH,Hapus_Tanda ;Cek sudah ada tanda negatif?
675 047D mov Terima_atas,#0B0H
676 0480 lcall Baris_atas
677 0483 ret
679 0484 Hapus_Tanda:
680 0484 mov Terima_atas,#20H
681 0487 lcall Baris_atas
682 048A ret
684 048B ;================================================
685 048B ; Subrutin Cek Mode Keypad
686 048B ;================================================
687 048B Cek_Mode:
688 048B cjne R7,#01H,Cek_Mode_Hex
689 048E ajmp Bin_Key
690 0490 Cek_Mode_Hex:
691 0490 cjne R7,#02H,Cek_Mode_Dec
692 0493 ajmp Hex_Key
693 0495 Cek_Mode_Dec:
694 0495 cjne R7,#03H,Cek_Mode_BCD
695 0498 ajmp Dec_Key
696 049A Cek_Mode_BCD:
697 049A cjne R7,#04H,Cek_Mode
698 049D ajmp Bin_Key
700 049F ;================================================
701 049F ; Subrutin Cek Mode Awal
702 049F ;================================================
703 049F Cek_Mode_Awal:
704 049F cjne R7,#01H,Cek_Mode_Hex_Awal
705 04A2 mov R0,#Terima_atas
706 04A4 mov DPTR,#Judul3
707 04A7 lcall Pindah_RAM
708 04AA lcall Baris_atas
709 04AD ret
710 04AE Cek_Mode_Hex_Awal:
711 04AE cjne R7,#02H,Cek_Mode_Dec_Awal
712 04B1 mov R0,#Terima_atas
713 04B3 mov DPTR,#Judul4
714 04B6 lcall Pindah_RAM
715 04B9 lcall Baris_atas
716 04BC ret
717 04BD Cek_Mode_Dec_Awal:
718 04BD cjne R7,#03H,Cek_Mode_BCD_Awal
719 04C0 mov R0,#Terima_atas
720 04C2 mov DPTR,#Judul5
721 04C5 lcall Pindah_RAM
722 04C8 lcall Baris_atas
723 04CB ret
724 04CC Cek_Mode_BCD_Awal:
725 04CC cjne R7,#04H,Cek_Mode_Awal
726 04CF mov R0,#Terima_atas
9
727 04D1 mov DPTR,#Judul2
728 04D4 lcall Pindah_RAM
729 04D7 lcall Baris_atas
730 04DA ret
732 04DB ;================================================
733 04DB ; Subrutin Cek Mode Akhir
734 04DB ;================================================
735 04DB Cek_Mode_Akhir:
736 04DB cjne R7,#01H,Cek_Mode_Hex_Akhir
737 04DE mov R0,#(Data_Negatif-2)
738 04E0 cjne @R0,#0FFH,BIN_Akhir
739 04E3 mov R0,#Data_1
740 04E5 acall Negatifkan
742 04E7 mov R0,#(Data_1_Temp)
743 04E9 acall Hapus_Nilai
744 04EB mov R0,#Data_1
745 04ED mov R1,#(Data_1_Temp+15)
746 04EF acall Pisah_Data
747 04F1 mov R0,#(Data_1_Temp+15)
748 04F3 mov R1,#0CFH
749 04F5 lcall Tampilan_Bin
751 04F8 BIN_Akhir:
752 04F8 mov R0,#0C0H
753 04FA mov R1,#Data_2_Temp
754 04FC mov R2,#16
755 04FE Loop_BIN:
756 04FE clr C
757 04FF mov A,@R0
758 0500 subb A,#30H
759 0502 mov @R1,A
760 0503 inc R0
761 0504 inc R1
762 0505 djnz R2,Loop_BIN
763 0507 mov R0,#0C0H
764 0509 acall Hapus_Nilai
765 050B mov R0,#Data_1_Temp
766 050D acall Hapus_Nilai
767 050F lcall Hapus_Temp
768 0512 mov (Data_Negatif),(Data_Negatif-2)
769 0515 mov (Data_Negatif-1),#00H
770 0518 mov (Data_Negatif-2),#00H
771 051B ret
772 051C Cek_Mode_Hex_Akhir:
773 051C cjne R7,#02H,Cek_Mode_Dec_Akhir
774 051F mov R0,#Data_1_Temp
775 0521 acall Hapus_Nilai
776 0523 mov R0,#Data_2_Temp
777 0525 acall Hapus_Nilai
778 0527 mov R0,#(Data_Negatif-2)
779 0529 cjne @R0,#0FFH,Cek_Mode_Hex_Akhir_2
780 052C mov R0,#Data_1
781 052E acall Negatifkan
782 0530 Cek_Mode_Hex_Akhir_2:
783 0530 mov R0,#Data_1
784 0532 mov R1,#(Data_2_Temp+15)
785 0534 acall Pisah_Data
786 0536 lcall Hapus_Temp
787 0539 mov (Data_Negatif),(Data_Negatif-2)
788 053C mov (Data_Negatif-1),#00H
789 053F mov (Data_Negatif-2),#00H
790 0542 ret
791 0543 Cek_Mode_Dec_Akhir:
792 0543 cjne R7,#03H,Cek_Mode_BCD_Akhir
793 0546 mov R0,#Data_1_Temp
794 0548 acall Hapus_Nilai
795 054A lcall Hapus_Temp
796 054D ret
797 054E Cek_Mode_BCD_Akhir:
798 054E cjne R7,#04H,Cek_Mode_Akhir
799 0551 acall BIN_Akhir
800 0553 ret
803 0554 ;================================================
804 0554 ; Subrutin Cek Mode Hitung
805 0554 ;================================================
806 0554 Cek_Mode_Hitung:
807 0554 cjne R7,#01H,Cek_Mode_Hex_Hitung
10
808 0557 mov Key_Data,#(Data_1_Temp+15)
809 055A lcall Konv_Bin_Hex
810 055D mov Key_Data,#(Data_2_Temp+15)
811 0560 lcall Konv_Bin_Hex
812 0563 ret
813 0564 Cek_Mode_Hex_Hitung:
814 0564 cjne R7,#02H,Cek_Mode_Dec_Hitung
815 0567 ret
816 0568 Cek_Mode_Dec_Hitung:
817 0568 cjne R7,#03H,Cek_Mode_BCD_Hitung
818 056B mov R0,#Terima_atas
819 056D acall Hapus_Nilai
820 056F mov Terima_atas,(Data_1_Temp+15)
821 0572 mov (Key_Data+4),#(Data_1_Temp+14)
822 0575 lcall Konv_Dec_Hex
823 0578 mov R0,#Terima_atas
824 057A acall Hapus_Nilai
825 057C mov Terima_atas,(Data_2_Temp+15)
826 057F mov (Key_Data+4),#(Data_2_Temp+14)
827 0582 lcall Konv_Dec_Hex
828 0585 ret
829 0586 Cek_Mode_BCD_Hitung:
830 0586 cjne R7,#04H,Cek_Mode_Hitung
831 0589 mov Key_Data,#(Data_1_Temp+15)
832 058C lcall Konv_BCD_Hex
833 058F mov R0,#Terima_atas
834 0591 acall Hapus_Nilai
835 0593 mov Terima_atas,(Data_1_Temp+15)
836 0596 mov (Key_Data+4),#(Data_1_Temp+14)
837 0599 lcall Konv_Dec_Hex
839 059C mov Key_Data,#(Data_2_Temp+15)
840 059F lcall Konv_BCD_Hex
841 05A2 mov R0,#Terima_atas
842 05A4 acall Hapus_Nilai
843 05A6 mov Terima_atas,(Data_2_Temp+15)
844 05A9 mov (Key_Data+4),#(Data_2_Temp+14)
845 05AC lcall Konv_Dec_Hex
846 05AF ret
848 05B0 ;================================================
849 05B0 ; Subrutin Cek Mode Tampilan
850 05B0 ;================================================
851 05B0 Cek_Mode_Tampilan: ;Data diletakkan di Data_1
852 05B0 mov R0,#Data_1_Temp
853 05B2 acall Hapus_Nilai
854 05B4 mov R0,#Data_2_Temp
855 05B6 acall Hapus_Nilai
856 05B8 lcall Hapus_Karakter
858 05BB ljmp Cek_Mode_Max
859 05BE mov R0,#Data_1_Temp
860 05C0 acall Hapus_Nilai
861 05C2 mov R0,#Data_2_Temp
862 05C4 acall Hapus_Nilai
864 05C6 Belum_Max:
865 05C6 cjne R7,#01H,Cek_Mode_Hex_Tampilan
866 05C9 mov R0,#(Data_Negatif-2)
867 05CB cjne @R0,#0FFH,Cek_Mode_Bin_Tampilan_2
868 05CE mov R0,#Data_1
869 05D0 acall Negatifkan
870 05D2 Cek_Mode_Bin_Tampilan_2:
871 05D2 mov R0,#Data_1
872 05D4 mov R1,#(Data_1_Temp+15)
873 05D6 acall Pisah_Data
874 05D8 mov R0,#(Data_1_Temp+15)
875 05DA mov R1,#0CFH
876 05DC lcall Tampilan_Bin
877 05DF mov R0,#0C0H
878 05E1 mov R1,#Data_1_Temp
879 05E3 acall Copy_Data
881 05E5 mov A,Data_Operator
882 05E7 cjne A,#02H,Tmpl_Bin_End
883 05EA mov R0,#Sisa
884 05EC mov R1,#(Data_2_Temp+15)
885 05EE acall Pisah_Data
886 05F0 mov R0,#(Data_2_Temp+15)
887 05F2 mov R1,#0DFH
888 05F4 lcall Tampilan_Bin
11
889 05F7 mov R0,#0D0H
890 05F9 mov R1,#Data_2_Temp
891 05FB acall Copy_Data
893 05FD Tmpl_Bin_End:
894 05FD ret
896 05FE Cek_Mode_Hex_Tampilan:
897 05FE cjne R7,#02H,Cek_Mode_Dec_Tampilan
898 0601 mov R0,#(Data_Negatif-2)
899 0603 cjne @R0,#0FFH,Cek_Mode_Hex_Tampilan_2
900 0606 mov R0,#Data_1
901 0608 acall Negatifkan
902 060A Cek_Mode_Hex_Tampilan_2:
903 060A acall Tampilan_Hex
904 060C ret
906 060D Cek_Mode_Dec_Tampilan:
907 060D cjne R7,#03H,Cek_Mode_BCD_Tampilan
908 0610 acall Tampilan_Dec
909 0612 mov R0,#(Data_Negatif-2)
910 0614 cjne @R0,#0FFH,Cek_Mode_Dec_Tampilan_2
911 0617 push 3EH
912 0619 push 3FH
913 061B acall Cek_Mode_Dec_Awal
914 061D pop 3FH
915 061F pop 3EH
916 0621 mov Terima_atas,#0B0H
917 0624 lcall Baris_atas
918 0627 mov (Data_Negatif),(Data_Negatif-2)
919 062A mov (Data_Negatif-1),#00H
920 062D mov (Data_Negatif-2),#00H
921 0630 Cek_Mode_Dec_Tampilan_2:
922 0630 ret
924 0631 Cek_Mode_BCD_Tampilan:
925 0631 cjne R7,#04H,Ulang_Cek_Mode_Tampilan
926 0634 lcall Tampilan_BCD
927 0637 mov R0,#0C0H
928 0639 mov R1,#Data_1_Temp
929 063B acall Copy_Data
930 063D mov R0,#(Data_Negatif-2)
931 063F cjne @R0,#0FFH,Cek_Mode_BCD_Tampilan_2
932 0642 push 3EH
933 0644 push 3FH
934 0646 acall Cek_Mode_BCD_Awal
935 0648 pop 3FH
936 064A pop 3EH
937 064C mov Terima_atas,#0B0H
938 064F lcall Baris_atas
939 0652 mov (Data_Negatif),(Data_Negatif-2)
940 0655 mov (Data_Negatif-1),#00H
941 0658 mov (Data_Negatif-2),#00H
942 065B Cek_Mode_BCD_Tampilan_2:
943 065B ret
945 065C Ulang_Cek_Mode_Tampilan:
946 065C ajmp Cek_Mode_Tampilan
948 065E ;================================================
949 065E ; Subrutin Cek Operator
950 065E ;================================================
951 065E Cek_Operator:
952 065E mov A,Data_Operator
953 0660 cjne A,#01H,Cek_Operator_Bagi
954 0663 lcall Perkalian
955 0666 acall Copy_Hasil_Data1
956 0668 acall Operasi_Bil_Dec_3
957 066A ret
958 066B Cek_Operator_Bagi:
959 066B cjne A,#02H,Cek_Operator_Tambah
960 066E mov R0,#Data_2
961 0670 mov R2,#Jml_Byte
962 0672 Cek_Operator_Bagi_Nol:
963 0672 cjne @R0,#00H,Bukan_Nol
964 0675 inc R0
965 0676 djnz R2,Cek_Operator_Bagi_Nol
966 0678 ljmp Sistem_Error
967 067B Bukan_Nol:
968 067B lcall Pembagian
969 067E clr C
970 067F mov A,#02H
12
971 0681 subb A,R7
972 0682 jnc Cek_Operator_Bagi_2 ;Cek apakah Mode Dec atau BCD
973 0684 mov R0,#Sisa
974 0686 mov R1,#(Terima_atas+15)
975 0688 mov R2,#2
976 068A Bagi_Dec:
977 068A mov A,@R0
978 068B mov @R1,A
979 068C inc R0
980 068D dec R1
981 068E djnz R2,Bagi_Dec
982 0690 Cek_Operator_Bagi_2:
983 0690 acall Copy_Hasil_Data1
984 0692 acall Copy_Sisa_Data2
985 0694 acall Operasi_Bil_Dec_3
986 0696 ret
987 0697 Cek_Operator_Tambah:
988 0697 sjmp Operasi_Bil_Dec ;Cek apakah Mode Dec atau BCD
989 0699 Cek_Operator_Tambah_2:
990 0699 mov A,Data_Operator
991 069B mov R0,#Data_1
992 069D mov R1,#Data_2
993 069F cjne A,#03H,Cek_Operator_Kurang
994 06A2 lcall Penambahan
995 06A5 mov R0,#(Data_1+7)
996 06A7 cjne @R0,#0FFH,Cek_Operator_Tambah_3
997 06AA mov R0,#Data_1
998 06AC acall Negatifkan
999 06AE mov (Data_Negatif-2),#0FFH
1000 06B1 Cek_Operator_Tambah_3:
1001 06B1 ret
1002 06B2 Cek_Operator_Kurang:
1003 06B2 mov R0,#Data_1
1004 06B4 mov R1,#Data_2
1005 06B6 cjne A,#04H,Cek_Operator
1006 06B9 lcall Pengurangan
1007 06BC mov R0,#(Data_1+7)
1008 06BE cjne @R0,#0FFH,Cek_Operator_Kurang_2
1009 06C1 mov R0,#Data_1
1010 06C3 acall Negatifkan
1011 06C5 mov (Data_Negatif-2),#0FFH
1012 06C8 Cek_Operator_Kurang_2:
1013 06C8 ret
1015 06C9 Operasi_Bil_Dec:
1016 06C9 mov A,(Data_Negatif-1)
1017 06CB cjne A,#0FFH,Operasi_Bil_Dec_2
1018 06CE mov R0,#Data_1
1019 06D0 acall Negatifkan
1020 06D2 Operasi_Bil_Dec_2:
1021 06D2 mov A,(Data_Negatif)
1022 06D4 cjne A,#0FFH,Cek_Operator_Tambah_2
1023 06D7 mov R0,#Data_2
1024 06D9 acall Negatifkan
1025 06DB sjmp Cek_Operator_Tambah_2
1027 06DD Operasi_Bil_Dec_3:
1028 06DD mov A,Data_Negatif
1029 06DF xrl A,(Data_Negatif-1)
1030 06E1 mov (Data_Negatif-2),A
1031 06E3 ret
1033 06E4 Negatifkan:
1034 06E4 push 00H
1035 06E6 mov R2,#8
1036 06E8 Loop_Negatifkan:
1037 06E8 mov A,@R0
1038 06E9 cpl A
1039 06EA mov @R0,A
1040 06EB inc R0
1041 06EC djnz R2,Loop_Negatifkan
1042 06EE pop 00H
1043 06F0 mov A,#1H
1044 06F2 add A,@R0
1045 06F3 mov @R0,A
1046 06F4 ret
1048 06F5 ;================================================
1049 06F5 ; Subrutin Cek Karakter Spasi
1050 06F5 ;================================================
13
1051 06F5 Cek_Spasi:
1052 06F5 mov R2,#15
1053 06F7 Loop_Cek_Spasi:
1054 06F7 cjne @R0,#30H,Bukan_Spasi
1055 06FA mov @R0,#20H
1056 06FC inc R0
1057 06FD djnz R2,Loop_Cek_Spasi
1058 06FF ret
1060 0700 Bukan_Spasi:
1061 0700 ret
1063 0701 ;================================================
1064 0701 ; Subrutin Gabung Data
1065 0701 ;================================================
1066 0701 Gabung_Data:
1067 0701 mov R3,#8
1068 0703 Loop_Gabung_Data:
1069 0703 clr A
1070 0704 xch A,@R1
1071 0705 swap A
1072 0706 add A,@R0
1073 0707 mov @R0,A
1074 0708 dec R0
1075 0709 dec R0
1076 070A dec R1
1077 070B dec R1
1078 070C djnz R3,Loop_Gabung_Data
1079 070E ret
1081 070F ;================================================
1082 070F ; Subrutin Simpan Data
1083 070F ;================================================
1084 070F Simpan_Data:
1085 070F mov R3,#8
1086 0711 Loop_Simpan_Data:
1087 0711 mov A,@R0
1088 0712 mov @R1,A
1089 0713 dec R0
1090 0714 dec R0
1091 0715 inc R1
1092 0716 djnz R3,Loop_Simpan_Data
1093 0718 ret
1095 0719 ;================================================
1096 0719 ; Subrutin Hapus nilai
1097 0719 ;================================================
1098 0719 Hapus_Nilai:
1099 0719 mov R2,#16 ;Ada 16 data
1100 071B Loop_Hapus_Nilai:
1101 071B mov @R0,#0 ;Alamat yang ingin dihapus
1102 071D inc R0
1103 071E djnz R2,Loop_Hapus_Nilai
1104 0720 ret
1106 0721 ;================================================
1107 0721 ; Subrutin Pisah Data
1108 0721 ;================================================
1109 0721 Pisah_Data:
1110 0721 mov R2,#8 ;Ada 8 byte
1111 0723 Loop_Pisah_Data:
1112 0723 mov A,@R0 ;R0 = Alamat asal data
1113 0724 xchd A,@R1 ;R1 = Alamat tujuan data
1114 0725 swap A
1115 0726 dec R1
1116 0727 inc R0
1117 0728 mov @R1,A
1118 0729 dec R1
1119 072A djnz R2,Loop_Pisah_Data
1120 072C ret
1122 072D ;================================================
1123 072D ; Subrutin Copy Hasil Ke Data_1
1124 072D ;================================================
1125 072D Copy_Hasil_Data1:
1126 072D mov R0,#Hasil
1127 072F mov R1,#Data_1
1128 0731 acall Copy_Data
1129 0733 ret
1131 0734 ;================================================
1132 0734 ; Subrutin Copy Sisa Ke Data_2
1133 0734 ;================================================
14
1134 0734 Copy_Sisa_Data2:
1135 0734 mov R0,#Sisa
1136 0736 mov R1,#Data_2
1137 0738 acall Copy_Data
1138 073A ret
1140 073B ;================================================
1141 073B ; Subrutin Copy Sisa Ke Data_2
1142 073B ;================================================
1143 073B Copy_D2T_D1T:
1144 073B mov R0,#Data_2_Temp
1145 073D mov R1,#Data_1_Temp
1146 073F acall Copy_Data
1147 0741 ret
1149 0742 ;================================================
1150 0742 ; Subrutin Copy Data
1151 0742 ;================================================
1152 0742 Copy_Data:
1153 0742 mov R3,#15 ;Ada 15 data
1154 0744 Loop_Copy_Data:
1155 0744 mov A,@R0 ;R0 = Alamat asal data
1156 0745 mov @R1,A ;R1 = Alamat tujuan data
1157 0746 inc R0
1158 0747 inc R1
1159 0748 djnz R3,Loop_Copy_Data
1160 074A ret
1162 074B ;================================================
1163 074B ; Subrutin Tampilan Tombol C
1164 074B ;================================================
1165 074B Tampilan_C:
1166 074B mov R0,#Terima_bawah
1167 074D mov DPTR,#Judul6
1168 0750 lcall Pindah_RAM
1169 0753 lcall Baris_bawah
1170 0756 acall Cek_Mode_Awal
1171 0758 Loop_Tampilan_C:
1172 0758 mov R0,#Data_1_Temp
1173 075A acall Hapus_Nilai
1174 075C mov R0,#Data_2_Temp
1175 075E acall Hapus_Nilai
1176 0760 mov R0,#Data_1
1177 0762 acall Hapus_Nilai
1178 0764 mov R0,#Data_2
1179 0766 acall Hapus_Nilai
1180 0768 mov R0,#Hasil
1181 076A acall Hapus_Nilai
1182 076C mov R0,#Sisa
1183 076E acall Hapus_Nilai
1184 0770 mov Data_Operator,#00H
1185 0773 mov (Data_Operator+1),#00H
1186 0776 mov Data_Negatif,#00H
1187 0779 mov (Data_Negatif-1),#00H
1188 077C mov (Data_Negatif-2),#00H
1189 077F mov Data_Hasil,#00H
1190 0782 mov R0,#0D0H
1191 0784 acall Hapus_Nilai
1192 0786 ret
1194 0787 ;================================================
1195 0787 ; Subrutin Tampilan Tombol CE
1196 0787 ;================================================
1197 0787 Tampilan_CE:
1198 0787 mov R0,#Terima_bawah
1199 0789 mov DPTR,#Judul6 ;Tampikan ' 0'
1200 078C lcall Pindah_RAM
1201 078F lcall Baris_bawah
1202 0792 acall Cek_Mode_Awal
1203 0794 Loop_Tampilan_CE:
1204 0794 mov R0,#Data_2_Temp
1205 0796 acall Hapus_Nilai
1206 0798 mov R0,#Data_1
1207 079A acall Hapus_Nilai
1208 079C mov R0,#Data_2
1209 079E acall Hapus_Nilai
1210 07A0 mov R0,#Hasil
1211 07A2 acall Hapus_Nilai
1212 07A4 mov R0,#Sisa
1213 07A6 acall Hapus_Nilai
15
1214 07A8 clr Data_Negatif
1215 07AA ret
1217 07AB ;================================================
1218 07AB ; Subrutin Tampilan Tombol DEL
1219 07AB ;================================================
1220 07AB Tampilan_DEL:
1221 07AB mov R0,#(Terima_bawah+13)
1222 07AD mov R1,#(Terima_bawah+15)
1223 07AF mov R2,#13
1224 07B1 Loop_Tampilan_DEL:
1225 07B1 mov A,@R0
1226 07B2 mov @R1,A
1227 07B3 dec R0
1228 07B4 dec R1
1229 07B5 djnz R2,Loop_Tampilan_DEL
1230 07B7 lcall Baris_bawah
1231 07BA mov R1,(Key_Data+2)
1232 07BC acall Pindah_Data_Temp
1233 07BE acall Pindah_TB
1234 07C0 ret
1236 07C1 ;================================================
1237 07C1 ; Subrutin Tampilan Hex
1238 07C1 ;================================================
1239 07C1 Tampilan_Hex:
1240 07C1 mov R0,#Data_1
1241 07C3 mov R1,#(Data_1_Temp+15)
1242 07C5 acall Pisah_Data
1243 07C7 mov R0,#(Data_1_Temp+15)
1244 07C9 mov R2,#16
1245 07CB mov R3,#2
1246 07CD Loop_Tampilan_Hex:
1247 07CD clr C
1248 07CE mov A,@R0
1249 07CF subb A,#0AH
1250 07D1 jnc Nilai_Huruf ;Cek apakah huruf ?
1251 07D3 add A,#03AH
1252 07D5 mov @R0,A
1253 07D6 dec R0
1254 07D7 clr C
1255 07D8 djnz R2,Loop_Tampilan_Hex
1256 07DA djnz R3,Tampilan_Hex_2
1257 07DC ret
1259 07DD Nilai_Huruf:
1260 07DD clr C
1261 07DE add A,#41H
1262 07E0 mov @R0,A
1263 07E1 dec R0
1264 07E2 djnz R2,Loop_Tampilan_Hex
1265 07E4 djnz R3,Tampilan_Hex_2
1266 07E6 ret
1268 07E7 Tampilan_Hex_2:
1269 07E7 mov R0,#Sisa
1270 07E9 mov R1,#(Data_2_Temp+15)
1271 07EB acall Pisah_Data
1272 07ED mov R0,#(Data_2_Temp+15)
1273 07EF mov R2,#16
1274 07F1 sjmp Loop_Tampilan_Hex
1276 07F3 ;================================================
1277 07F3 ; Subrutin Tampilan Dec
1278 07F3 ;================================================
1279 07F3 Tampilan_Dec:
1280 07F3 lcall Konv_Hex_Dec
1281 07F6 mov R0,#Data_1_Temp
1282 07F8 mov R1,#Data_2_Temp
1283 07FA lcall Copy_Data
1284 07FD Tampilan_Dec_2:
1285 07FD mov R0,#(Data_1_Temp+15)
1286 07FF mov R3,#16
1287 0801 Loop_Tampilan_Dec:
1288 0801 clr A
1289 0802 mov A,#30H
1290 0804 add A,@R0
1291 0805 mov @R0,A
1292 0806 dec R0
1293 0807 djnz R3,Loop_Tampilan_Dec
1294 0809 ret
16
1296 080A ;================================================
1297 080A ; Subrutin Tampilan BCD
1298 080A ;================================================
1299 080A Tampilan_BCD:
1300 080A lcall Konv_Hex_Dec
1301 080D mov R0,#(Data_1_Temp+15)
1302 080F mov R1,#0CFH
1303 0811 acall Loop_Tampilan_Bin
1304 0813 ret
1306 0814 ;================================================
1307 0814 ; Subrutin Tampilan Bin
1308 0814 ;================================================
1309 0814 Tampilan_Bin:
1311 0814 Loop_Tampilan_Bin:
1313 0814 mov R2,#4
1314 0816 Tampilan_Bin0: ;Bin 0 = 0000
1315 0816 cjne @R0,#0,Tampilan_Bin1
1316 0819 mov DPTR,#Bin0
1317 081C lcall LCD_Bin
1318 081F dec R0
1319 0820 djnz R2,Tampilan_Bin0
1320 0822 ret
1321 0823 Tampilan_Bin1: ;Bin 1 = 0001
1322 0823 cjne @R0,#1,Tampilan_Bin2
1323 0826 mov DPTR,#Bin1
1324 0829 lcall LCD_Bin
1325 082C dec R0
1326 082D djnz R2,Tampilan_Bin0
1327 082F ret
1328 0830 Tampilan_Bin2: ;Bin 2 = 0010
1329 0830 cjne @R0,#2,Tampilan_Bin3
1330 0833 mov DPTR,#Bin2
1331 0836 lcall LCD_Bin
1332 0839 dec R0
1333 083A djnz R2,Tampilan_Bin0
1334 083C ret
1335 083D Tampilan_Bin3: ;Bin 3 = 0011
1336 083D cjne @R0,#3,Tampilan_Bin4
1337 0840 mov DPTR,#Bin3
1338 0843 lcall LCD_Bin
1339 0846 dec R0
1340 0847 djnz R2,Tampilan_Bin0
1341 0849 ret
1342 084A Tampilan_Bin4: ;Bin 4 = 0100
1343 084A cjne @R0,#4,Tampilan_Bin5
1344 084D mov DPTR,#Bin4
1345 0850 lcall LCD_Bin
1346 0853 dec R0
1347 0854 djnz R2,Tampilan_Bin0
1348 0856 ret
1349 0857 Tampilan_Bin5: ;Bin 5 = 0101
1350 0857 cjne @R0,#5,Tampilan_Bin6
1351 085A mov DPTR,#Bin5
1352 085D lcall LCD_Bin
1353 0860 dec R0
1354 0861 djnz R2,Tampilan_Bin0
1355 0863 ret
1356 0864 Tampilan_Bin6: ;Bin 6 = 0110
1357 0864 cjne @R0,#6,Tampilan_Bin7
1358 0867 mov DPTR,#Bin6
1359 086A lcall LCD_Bin
1360 086D dec R0
1361 086E djnz R2,Tampilan_Bin0
1362 0870 ret
1363 0871 Tampilan_Bin7: ;Bin 7 = 0111
1364 0871 cjne @R0,#7,Tampilan_Bin8
1365 0874 mov DPTR,#Bin7
1366 0877 lcall LCD_Bin
1367 087A dec R0
1368 087B djnz R2,Tampilan_Bin0
1369 087D ret
1370 087E Tampilan_Bin8: ;Bin 8 = 1000
1371 087E cjne @R0,#8,Tampilan_Bin9
1372 0881 mov DPTR,#Bin8
1373 0884 lcall LCD_Bin
1374 0887 dec R0
17
1375 0888 djnz R2,Tampilan_Bin0
1376 088A ret
1377 088B Tampilan_Bin9: ;Bin 9 = 1001
1378 088B cjne @R0,#9,Tampilan_BinA
1379 088E mov DPTR,#Bin9
1380 0891 lcall LCD_Bin
1381 0894 dec R0
1382 0895 djnz R2,Ulang_Tampilan_Bin
1383 0897 ret
1384 0898 Tampilan_BinA: ;Bin A = 1010
1385 0898 cjne @R0,#0AH,Tampilan_BinB
1386 089B mov DPTR,#BinA
1387 089E lcall LCD_Bin
1388 08A1 dec R0
1389 08A2 djnz R2,Ulang_Tampilan_Bin
1390 08A4 ret
1391 08A5 Tampilan_BinB: ;Bin B = 1011
1392 08A5 cjne @R0,#0BH,Tampilan_BinC
1393 08A8 mov DPTR,#BinB
1394 08AB lcall LCD_Bin
1395 08AE dec R0
1396 08AF djnz R2,Ulang_Tampilan_Bin
1397 08B1 ret
1398 08B2 Tampilan_BinC: ;Bin C = 1100
1399 08B2 cjne @R0,#0CH,Tampilan_BinD
1400 08B5 mov DPTR,#BinC
1401 08B8 lcall LCD_Bin
1402 08BB dec R0
1403 08BC djnz R2,Ulang_Tampilan_Bin
1404 08BE ret
1405 08BF Tampilan_BinD: ;Bin D = 1101
1406 08BF cjne @R0,#0DH,Tampilan_BinE
1407 08C2 mov DPTR,#BinD
1408 08C5 lcall LCD_Bin
1409 08C8 dec R0
1410 08C9 djnz R2,Ulang_Tampilan_Bin
1411 08CB ret
1412 08CC Tampilan_BinE: ;Bin E = 1110
1413 08CC cjne @R0,#0EH,Tampilan_BinF
1414 08CF mov DPTR,#BinE
1415 08D2 lcall LCD_Bin
1416 08D5 dec R0
1417 08D6 djnz R2,Ulang_Tampilan_Bin
1418 08D8 ret
1419 08D9 Tampilan_BinF: ;Bin F = 1111
1420 08D9 cjne @R0,#0FH,Ulang_Tampilan_Bin
1421 08DC mov DPTR,#BinF
1422 08DF lcall LCD_Bin
1423 08E2 dec R0
1424 08E3 djnz R2,Ulang_Tampilan_Bin
1425 08E5 ret
1427 08E6 Ulang_Tampilan_Bin:
1428 08E6 ljmp Tampilan_Bin0
1430 08E9 LCD_Bin:
1431 08E9 mov R3,#4
1432 08EB Loop_LCD_Bin:
1433 08EB clr A
1434 08EC movc A,@A+DPTR
1435 08ED mov @R1,A
1436 08EE inc DPTR
1437 08EF dec R1
1438 08F0 djnz R3,Loop_LCD_Bin
1439 08F2 ret
1441 08F3 ;================================================
1442 08F3 ; Subrutin Tampilan Sisa Perhitungan
1443 08F3 ;================================================
1444 08F3 Tampilan_Sisa:
1445 08F3 clr C
1446 08F4 mov A,#02H
1447 08F6 subb A,R7
1448 08F7 jnc Tampilan_Sisa_2 ;Cek apakah Mode Dec atau BCD
1449 08F9 push 3EH
1450 08FB push 3FH
1451 08FD Tampilan_Sisa_2:
1452 08FD mov R0,#Terima_atas
1453 08FF mov DPTR,#Judul8
18
1454 0902 lcall Pindah_RAM
1456 0905 clr C
1457 0906 mov A,#02H
1458 0908 subb A,R7
1459 0909 jc Tampilan_Sisa_Dec ;Cek apakah Mode Dec atau BCD
1461 090B mov R0,#(Data_2_Temp+15)
1462 090D mov R1,#(Terima_atas+15)
1463 090F mov R2,#6
1464 0911 Loop_Tampilan_Sisa:
1465 0911 mov A,@R0
1466 0912 mov @R1,A
1467 0913 dec R0
1468 0914 dec R1
1469 0915 djnz R2,Loop_Tampilan_Sisa
1470 0917 sjmp Loop_Tampilan_Sisa_2
1472 0919 Tampilan_Sisa_Dec:
1473 0919 pop 3FH
1474 091B pop 3EH
1475 091D mov A,Data_Negatif
1476 091F cjne A,#0FFH,Tampilan_Sisa_Dec_2
1477 0922 mov Terima_atas,#0B0H
1479 0925 Tampilan_Sisa_Dec_2:
1480 0925 clr A
1481 0926 mov R0,#(Terima_atas+15)
1482 0928 xch A,@R0
1483 0929 xchd A,@R0
1484 092A swap A
1485 092B dec R0
1486 092C mov @R0,A
1487 092D mov R0,#(Terima_atas+15)
1488 092F mov R2,#6
1489 0931 Loop_Tampilan_Sisa_Dec:
1490 0931 mov A,#30H
1491 0933 add A,@R0
1492 0934 mov @R0,A
1493 0935 dec R0
1494 0936 djnz R2,Loop_Tampilan_Sisa_Dec
1495 0938 mov R0,#(Terima_atas+14)
1496 093A cjne @R0,#30H,Loop_Tampilan_Sisa_2
1497 093D mov @R0,#20H
1498 093F Loop_Tampilan_Sisa_2:
1499 093F lcall Baris_atas
1500 0942 ret
1502 0943 ;================================================
1503 0943 ; Subrutin Konversi Biner ke Hex
1504 0943 ;================================================
1505 0943 Konv_Bin_Hex:
1506 0943 mov R0,Key_Data
1507 0945 mov R3,#4 ;Ada 4 nibble
1508 0947 Loop_Konv_Bin_Hex:
1509 0947 mov A,@R0 ;Kalikan dengan bobot tiap nibble 8421
1510 0948 mov B,#01H
1511 094B mul AB
1512 094C mov @R0,A
1513 094D dec R0
1515 094E mov A,@R0
1516 094F mov B,#02H
1517 0952 mul AB
1518 0953 mov @R0,A
1519 0954 dec R0
1521 0955 mov A,@R0
1522 0956 mov B,#04H
1523 0959 mul AB
1524 095A mov @R0,A
1525 095B dec R0
1527 095C mov A,@R0
1528 095D mov B,#08H
1529 0960 mul AB
1530 0961 mov @R0,A
1531 0962 dec R0
1532 0963 djnz R3,Loop_Konv_Bin_Hex
1534 0965 mov R0,Key_Data
1535 0967 mov R1,Key_Data
1536 0969 dec R0
1537 096A mov R2,#4
1538 096C mov R3,#3
19
1539 096E sjmp Loop_Tambahkan
1540 0970 Tambahkan:
1541 0970 clr A
1542 0971 mov R3,#4
1543 0973 Loop_Tambahkan:
1544 0973 clr A
1545 0974 xch A,@R0
1546 0975 add A,@R1
1547 0976 mov @R1,A
1548 0977 dec R0
1549 0978 djnz R3,Loop_Tambahkan
1550 097A dec R1
1551 097B djnz R2,Tambahkan
1552 097D ret
1554 097E ;================================================
1555 097E ; Subrutin Konversi BCD ke Hex
1556 097E ;================================================
1557 097E Konv_BCD_Hex:
1558 097E lcall Konv_Bin_Hex
1559 0981 mov R1,Key_Data
1560 0983 mov R2,#4
1561 0985 Loop_Konv_BCD_Hex:
1562 0985 clr A
1563 0986 clr C
1564 0987 mov A,#09H ;Cek apakah melebihi 9 ?
1565 0989 subb A,@R1
1566 098A jnc Loop_Konv_BCD_Hex_2
1567 098C lcall Sistem_Error
1568 098F ret
1570 0990 Loop_Konv_BCD_Hex_2:
1571 0990 dec R1
1572 0991 djnz R2,Loop_Konv_BCD_Hex
1573 0993 ret
1575 0994 ;================================================
1576 0994 ; Subrutin Menampilkan Pesan ERROR!
1577 0994 ;================================================
1578 0994 Sistem_Error:
1579 0994 mov R0,#Terima_atas
1580 0996 mov DPTR,#Judul7 ;Tampilkan pesan 'ERROR!'
1581 0999 lcall Pindah_RAM
1582 099C lcall Baris_atas
1583 099F mov R0,#Terima_bawah
1584 09A1 mov DPTR,#Judul6 ;Tampilan awal ' 0'
1585 09A4 lcall Pindah_RAM
1586 09A7 lcall Baris_bawah
1588 09AA Loop_Sistem_Error:
1589 09AA lcall Reset_Keypad
1590 09AD clr Kolom1
1591 09AF jb Baris1,Loop_Sistem_Error
1592 09B2 lcall LTunda
1593 09B5 lcall Tunggu_tombol_dilepas
1594 09B8 lcall Cek_Mode_Awal
1595 09BB lcall Loop_Tampilan_C
1596 09BE setb Kolom1
1597 09C0 ljmp Next_Data
1599 09C3 ;================================================
1600 09C3 ; Subrutin Konversi Desimal ke Hex
1601 09C3 ;================================================
1602 09C3 Konv_Dec_Hex:
1603 09C3 mov R0,(Key_Data+4)
1604 09C5 mov R1,#Data_1
1605 09C7 mov R5,#15
1606 09C9 mov (Key_Data+3),#1
1607 09CC Loop_Konv_Dec_Hex:
1608 09CC push 00H
1609 09CE mov R0,#Data_1
1610 09D0 lcall Hapus_Nilai
1611 09D3 pop 00H
1613 09D5 mov A,@R0
1614 09D6 mov @R1,A
1615 09D7 mov R4,(Key_Data+3)
1616 09D9 lcall Kalikan_A
1617 09DC dec R0
1618 09DD inc (Key_Data+3)
1620 09DF push 00H
1621 09E1 push 01H
20
1622 09E3 mov R0,#Terima_atas
1623 09E5 mov R1,#Hasil
1624 09E7 lcall Penambahan
1625 09EA pop 01H
1626 09EC pop 00H
1628 09EE djnz R5,Loop_Konv_Dec_Hex
1629 09F0 clr C
1630 09F1 mov A,(Key_Data+4)
1631 09F3 subb A,#14
1632 09F5 mov R0,A
1633 09F6 lcall Hapus_Nilai
1634 09F9 mov R0,#Terima_atas
1635 09FB mov R1,(Key_Data+4)
1636 09FD inc R1
1637 09FE lcall Pisah_Data
1638 0A01 ret
1640 0A02 Kalikan_A:
1641 0A02 clr C
1642 0A03 clr A
1643 0A04 push 00H
1644 0A06 push 01H
1645 0A08 Loop_Kalikan_A:
1646 0A08 mov R0,#Hasil
1647 0A0A lcall Hapus_Nilai
1648 0A0D mov R1,#Data_2
1649 0A0F mov @R1,#0AH
1650 0A11 lcall Perkalian
1651 0A14 lcall Copy_Hasil_Data1
1652 0A17 djnz R4,Loop_Kalikan_A
1653 0A19 pop 01H
1654 0A1B pop 00H
1655 0A1D ret
1657 0A1E ;================================================
1658 0A1E ; Subrutin Konversi Heksadesimal ke Desimal
1659 0A1E ;================================================
1660 0A1E Konv_Hex_Dec:
1661 0A1E mov R0,#Data_1_Temp
1662 0A20 lcall Hapus_Nilai
1663 0A23 mov R0,#Data_2_Temp
1664 0A25 lcall Hapus_Nilai
1665 0A28 mov R0,#Hasil
1666 0A2A lcall Hapus_Nilai
1667 0A2D mov R0,#Sisa
1668 0A2F lcall Hapus_Nilai
1669 0A32 mov R4,#15
1670 0A34 mov (Key_Data+5),#(Data_1_Temp+15)
1671 0A37 Loop_Konv_Hex_Dec:
1672 0A37 mov R0,#Data_1
1673 0A39 mov R1,#Data_2
1674 0A3B mov @R1,#0AH
1675 0A3D lcall Pembagian
1676 0A40 mov R0,#Sisa
1677 0A42 mov R1,(Key_Data+5)
1678 0A44 mov A,@R0
1679 0A45 mov @R1,A
1680 0A46 dec (Key_Data+5)
1682 0A48 lcall Copy_Hasil_Data1
1683 0A4B mov R0,#Data_1
1684 0A4D mov R1,#Data_2
1685 0A4F mov @R1,#0AH
1686 0A51 lcall Pengurangan
1687 0A54 jnc Konversi_Lagi
1688 0A56 sjmp Konversi_Selesai
1690 0A58 Konversi_Lagi:
1691 0A58 lcall Copy_Hasil_Data1
1692 0A5B mov R0,#Hasil
1693 0A5D lcall Hapus_Nilai
1694 0A60 mov R0,#Sisa
1695 0A62 lcall Hapus_Nilai
1696 0A65 djnz R4,Loop_Konv_Hex_Dec
1697 0A67 ret
1699 0A68 Konversi_Selesai:
1700 0A68 mov R0,#Hasil
1701 0A6A mov R1,(Key_Data+5)
1702 0A6C mov A,@R0
1703 0A6D mov @R1,A
21
1704 0A6E ret
1708 0A6F ;================================================
1709 0A6F ; Subrutin Kuadrat
1710 0A6F ;================================================
1711 0A6F Kuadrat:
1712 0A6F mov Data_Negatif,#00H
1713 0A72 mov (Data_Negatif-1),#00H
1714 0A75 mov (Data_Negatif-2),#00H
1715 0A78 lcall Cek_Mode_Hitung
1717 0A7B mov R0,#(Data_2_Temp+15) ;Menggabungkan data satuan
1718 0A7D mov R1,#(Data_2_Temp+14)
1719 0A7F lcall Gabung_Data
1720 0A82 mov R0,#(Data_2_Temp+15)
1721 0A84 mov R1,#Data_1
1722 0A86 lcall Simpan_Data
1723 0A89 mov R0,#Data_1
1724 0A8B mov R1,#Data_2
1725 0A8D lcall Copy_Data ;Copy data -> Data 1 = Data 2
1727 0A90 lcall Perkalian
1728 0A93 lcall Copy_Hasil_Data1
1729 0A96 ;--------------------------------------------------------------------
1730 0A96 lcall Cek_Mode_Tampilan
1731 0A99 cjne R7,#3H,Kuadrat_Bukan_Dec
1732 0A9C mov R0,#Data_2_Temp
1733 0A9E mov R1,#Sisa
1734 0AA0 lcall Copy_Data
1735 0AA3 Kuadrat_Bukan_Dec:
1736 0AA3 mov R0,#Data_1_Temp
1737 0AA5 lcall Cek_Spasi
1738 0AA8 mov R0,#Data_2_Temp
1739 0AAA lcall Cek_Spasi
1740 0AAD mov R0,#Data_1_Temp
1741 0AAF mov R1,#Terima_bawah
1742 0AB1 lcall Copy_Data
1743 0AB4 lcall Baris_bawah
1744 0AB7 ;---------------------------------------------------------------------
1745 0AB7 mov R0,#Data_1_Temp
1746 0AB9 lcall Hapus_Nilai
1747 0ABC mov R0,#Data_2_Temp
1748 0ABE lcall Hapus_Nilai
1749 0AC1 ret
1751 0AC2 ;================================================
1752 0AC2 ; Subrutin Perkalian
1753 0AC2 ;================================================
1754 0AC2 Perkalian:
1755 0AC2 mov R3,#Jml_Byte*8
1756 0AC4 Loop_Perkalian:
1757 0AC4 clr C
1758 0AC5 mov R0,#Data_2+Jml_Byte-1
1759 0AC7 mov R2,#Jml_Byte
1760 0AC9 GeserKanan:
1761 0AC9 mov A,@R0
1762 0ACA rrc A
1763 0ACB mov @R0,A
1764 0ACC dec R0
1765 0ACD djnz R2,GeserKanan
1766 0ACF jnc Jangan_Ditambah
1767 0AD1 mov R0,#Hasil
1768 0AD3 mov R1,#Data_1
1769 0AD5 lcall Penambahan
1771 0AD8 Jangan_Ditambah:
1772 0AD8 clr C
1773 0AD9 mov R0,#Data_1
1774 0ADB lcall GeserKiri
1775 0ADE djnz R3,Loop_Perkalian
1776 0AE0 ret
1778 0AE1 ;================================================
1779 0AE1 ; Subrutin Penambahan
1780 0AE1 ;================================================
1781 0AE1 Penambahan:
1782 0AE1 clr C
1783 0AE2 mov R2,#Jml_Byte
1784 0AE4 Loop_Penambahan:
1785 0AE4 mov A,@R0
1786 0AE5 addc A,@R1
1787 0AE6 mov @R0,A
22
1788 0AE7 inc R0
1789 0AE8 inc R1
1790 0AE9 djnz R2,Loop_Penambahan
1791 0AEB ret
1793 0AEC ;================================================
1794 0AEC ; Subrutin Pembagian
1795 0AEC ;================================================
1796 0AEC Pembagian:
1797 0AEC mov R3,#Jml_Byte*8
1798 0AEE Loop_Pembagian:
1799 0AEE clr C
1800 0AEF mov R0,#Data_1
1801 0AF1 lcall GeserKiri
1802 0AF4 mov R0,#Sisa
1803 0AF6 lcall GeserKiri
1804 0AF9 mov R0,#Sisa
1805 0AFB mov R1,#Data_2
1806 0AFD lcall Perbandingan
1807 0B00 jc Jangan_Dikurangi
1808 0B02 mov R0,#Sisa
1809 0B04 mov R1,#Data_2
1810 0B06 lcall Pengurangan
1812 0B09 Jangan_Dikurangi:
1813 0B09 cpl C
1814 0B0A mov R0,#Hasil
1815 0B0C lcall GeserKiri
1816 0B0F djnz R3,Loop_Pembagian
1817 0B11 ret
1819 0B12 GeserKiri:
1820 0B12 mov R2,#Jml_Byte
1821 0B14 Loop_GeserKiri:
1822 0B14 mov A,@R0
1823 0B15 rlc A
1824 0B16 mov @R0,A
1825 0B17 inc R0
1826 0B18 djnz R2,Loop_GeserKiri
1827 0B1A ret
1829 0B1B Perbandingan:
1830 0B1B clr C
1831 0B1C mov R2,#Jml_Byte
1832 0B1E Loop_Perbandingan:
1833 0B1E mov A,@R0
1834 0B1F subb A,@R1
1835 0B20 inc R0
1836 0B21 inc R1
1837 0B22 djnz R2,Loop_Perbandingan
1838 0B24 ret
1840 0B25 ;================================================
1841 0B25 ; Subrutin Pengurangan
1842 0B25 ;================================================
1843 0B25 Pengurangan:
1844 0B25 clr C
1845 0B26 mov R2,#Jml_Byte
1846 0B28 Loop_Pengurangan:
1847 0B28 mov A,@R0
1848 0B29 subb A,@R1
1849 0B2A mov @R0,A
1850 0B2B inc R0
1851 0B2C inc R1
1852 0B2D djnz R2,Loop_Pengurangan
1853 0B2F ret
1855 0B30 ;================================================
1856 0B30 ; Subrutin Hapus Karakter
1857 0B30 ;================================================
1858 0B30 Hapus_Karakter:
1859 0B30 mov R0,#Terima_bawah
1860 0B32 mov R3,#15 ;Ada 15 Karakter
1861 0B34 Loop_Hapus_Karakter:
1862 0B34 mov @R0,#20H
1863 0B36 inc R0
1864 0B37 djnz R3,Loop_Hapus_Karakter
1865 0B39 ret
1867 0B3A ;================================================
1868 0B3A ; Subrutin pindah data dptr ke RAM
1869 0B3A ;================================================
1870 0B3A Pindah_RAM:
23
1871 0B3A mov R3,#16 ;Memindahkan 16 karakter
1872 0B3C Loop_Pindah_RAM:
1873 0B3C clr A
1874 0B3D movc A,@A+DPTR
1875 0B3E mov @R0,A
1876 0B3F inc DPTR
1877 0B40 inc R0
1878 0B41 djnz R3,Loop_Pindah_RAM
1879 0B43 ret
1881 0B44 ;================================================
1882 0B44 ; Subrutin menuliskan judul di baris atas
1883 0B44 ;================================================
1884 0B44 Baris_atas:
1885 0B44 mov A,#80H
1886 0B46 acall Write_inst
1887 0B48 mov R0,#Terima_atas
1888 0B4A mov R3,#16 ;ada 16 karakter
1889 0B4C Write_1:
1890 0B4C clr A
1891 0B4D mov A,@R0
1892 0B4E Send:
1893 0B4E lcall Write_data
1894 0B51 inc R0
1895 0B52 djnz R3,Write_1
1896 0B54 ret
1898 0B55 ;================================================
1899 0B55 ; Subrutin menuliskan judul di baris bawah
1900 0B55 ;================================================
1901 0B55 Baris_bawah:
1902 0B55 mov A,#0C0H ;pindah ke baris bawah
1903 0B57 acall Write_inst
1904 0B59 acall Write_inst
1905 0B5B lcall LTunda
1906 0B5E mov A,#0CH ;display ON, cursor OFF, blink OFF
1907 0B60 acall Write_inst
1908 0B62 mov R3,#16 ;ada 16 karakter
1909 0B64 mov R0,#Terima_bawah
1910 0B66 acall Write_1
1911 0B68 ret
1913 0B69 ;================================================
1914 0B69 ; Subrutin Menulis instruksi ke LCD
1915 0B69 ;================================================
1916 0B69 Write_inst:
1917 0B69 clr LCD_RS
1918 0B6B setb LCD_E
1919 0B6D mov Data_LCD,A
1920 0B6F clr LCD_E
1921 0B71 setb LCD_E
1922 0B73 lcall LTunda
1923 0B76 ret
1925 0B77 ;================================================
1926 0B77 ; Subrutin menulis data ke LCD
1927 0B77 ;================================================
1928 0B77 Write_data:
1929 0B77 setb LCD_RS
1930 0B79 setb LCD_E
1931 0B7B mov Data_LCD,A
1932 0B7D clr LCD_E
1933 0B7F setb LCD_E
1934 0B81 lcall LTunda
1935 0B84 ret
1937 0B85 ;================================================
1938 0B85 ; Tunda 5 ms
1939 0B85 ;================================================
1940 0B85 LTunda:
1941 0B85 mov R4,#10
1942 0B87 Tunda1:
1943 0B87 mov R5,#250
1944 0B89 djnz R5,$ ;(2 x 250) + 1 ~ 0,5 ms
1945 0B8B djnz R4,Ltunda ;(0,5 x 10) + 5 ~ 5 ms
1946 0B8D ret
24
1958 0B96 ;================================================
1959 0B96 ; Subrutin Akar
1960 0B96 ;================================================
1961 0B96 Akar:
1962 0B96 lcall Cek_Mode_Hitung
1964 0B99 mov R0,#Terima_atas
1965 0B9B lcall Hapus_Nilai
1966 0B9E mov R0,#Terima_bawah
1967 0BA0 lcall Hapus_Nilai
1969 0BA3 mov R0,#(Data_2_Temp+15) ;Menggabungkan data satuan
1970 0BA5 mov R1,#(Data_2_Temp+14)
1971 0BA7 lcall Gabung_Data
1972 0BAA mov R0,#(Data_2_Temp+15)
1973 0BAC mov R1,#Data_1
1974 0BAE lcall Simpan_Data
1975 0BB1 mov R0,#Data_1
1976 0BB3 mov R1,#Terima_atas
1977 0BB5 lcall Copy_Data
1979 0BB8 Tambahkan_Iterasi:
1980 0BB8 lcall Hapus_Temp
1981 0BBB mov R0,#Terima_bawah
1982 0BBD mov R1,#Data_1
1983 0BBF lcall Copy_Data
1984 0BC2 mov R0,#Data_1
1985 0BC4 mov R1,#Data_2
1986 0BC6 mov @R1,#01H
1987 0BC8 Loop_Tambahkan_Iterasi:
1988 0BC8 lcall Penambahan
1990 0BCB mov R0,#Data_1
1991 0BCD mov R1,#Terima_bawah
1992 0BCF lcall Copy_Data
1993 0BD2 mov R0,#Data_1
1994 0BD4 mov R1,#Data_2
1995 0BD6 lcall Copy_Data
1996 0BD9 lcall Perkalian
1998 0BDC mov R0,#Hasil
1999 0BDE mov R1,#Data_2
2000 0BE0 lcall Copy_Data
2001 0BE3 mov R0,#Terima_atas
2002 0BE5 mov R1,#Data_1
2003 0BE7 lcall Copy_Data
2005 0BEA mov R0,#Data_1
2006 0BEC mov R1,#Data_2
2007 0BEE lcall Pengurangan
2008 0BF1 jnc Tambahkan_Iterasi
2009 0BF3 acall Hapus_Temp
2010 0BF5 mov R0,#Terima_bawah
2011 0BF7 mov R1,#Data_1
2012 0BF9 lcall Copy_Data
2013 0BFC mov R0,#Data_1
2014 0BFE mov R1,#Data_2
2015 0C00 mov @R1,#01H
2016 0C02 lcall Pengurangan
2018 0C05 lcall Cek_Mode_Tampilan
2019 0C08 cjne R7,#3H,Akar_Bukan_Dec
2020 0C0B mov R0,#Data_2_Temp
2021 0C0D mov R1,#Sisa
2022 0C0F lcall Copy_Data
2023 0C12 Akar_Bukan_Dec:
2024 0C12 mov R0,#Data_1_Temp
2025 0C14 lcall Cek_Spasi
2026 0C17 mov R0,#Data_2_Temp
2027 0C19 lcall Cek_Spasi
2028 0C1C mov R0,#Data_1_Temp
2029 0C1E mov R1,#Terima_bawah
2030 0C20 lcall Copy_Data
2031 0C23 lcall Baris_bawah
2032 0C26 mov R0,#Data_1_Temp
2033 0C28 lcall Hapus_Nilai
2034 0C2B mov R0,#Data_2_Temp
2035 0C2D lcall Hapus_Nilai
2036 0C30 ret
25
2038 0C31 Hapus_Temp:
2039 0C31 mov R0,#Data_1
2040 0C33 lcall Hapus_Nilai
2041 0C36 mov R0,#Data_2
2042 0C38 lcall Hapus_Nilai
2043 0C3B mov R0,#Hasil
2044 0C3D lcall Hapus_Nilai
2045 0C40 mov R0,#Sisa
2046 0C42 lcall Hapus_Nilai
2047 0C45 ret
2049 0C46 ;================================================
2050 0C46 ; Subrutin Operator Apabila data sudah maks
2051 0C46 ;================================================
2052 0C46 Operator_2:
2053 0C46 Key_Mode_2:
2054 0C46 lcall Reset_Keypad
2055 0C49 clr Kolom4
2056 0C4B jb Baris1,Key_Akar_2
2057 0C4E lcall Tunggu_tombol_dilepas
2058 0C51 lcall Cek_Mode_Awal
2059 0C54 mov R0,#Terima_atas
2060 0C56 mov DPTR,#Judul1 ; tampilkan MODE
2061 0C59 lcall Pindah_RAM
2062 0C5C lcall Baris_atas
2063 0C5F lcall Cek_Mode_Hitung
2064 0C62 lcall Mode
2065 0C65 setb Kolom4
2066 0C67 ljmp Next_Data
2067 0C6A Key_Akar_2:
2068 0C6A jb Baris2,Key_Kali_2
2069 0C6D lcall Tunggu_tombol_dilepas
2070 0C70 mov sp,#08H
2071 0C73 mov A,Data_Negatif
2072 0C75 cjne A,#00H,Gak_Bisa_Akar_2
2073 0C78 lcall Cek_Mode_Awal
2074 0C7B mov (Terima_atas+14),#0E8H ;Simbol Kali (E8H)
2075 0C7E lcall Baris_atas
2076 0C81 lcall Akar
2077 0C84 cjne R7,#3H,Key_Akar_2BD
2078 0C87 mov R0,#Sisa
2079 0C89 mov R1,#Data_2_Temp
2080 0C8B lcall Copy_Data
2081 0C8E Key_Akar_2BD:
2082 0C8E lcall Cek_Mode_Akhir
2083 0C91 setb Kolom4
2084 0C93 ljmp Next_Data
2086 0C96 Gak_Bisa_Akar_2:
2087 0C96 ljmp Sistem_Error
2089 0C99 Key_Kali_2: ;Kode Kali = 1
2090 0C99 jb Baris3,Key_Bagi_2
2091 0C9C lcall Tunggu_tombol_dilepas
2092 0C9F lcall Cek_Mode_Awal
2093 0CA2 mov (Terima_atas+14),#078H ;Simbol Kali (78H)
2094 0CA5 lcall Baris_atas
2095 0CA8 mov (Data_Operator+1),#1H
2096 0CAB mov A,Data_Operator ;Simpan Kode Kali
2097 0CAD cjne A,#00H,Proses_2
2098 0CB0 lcall Copy_D2T_D1T
2099 0CB3 mov (Data_Negatif-1),Data_Negatif
2100 0CB6 mov Data_Negatif,#00H
2101 0CB9 setb Kolom4
2102 0CBB ljmp Next_Data
2103 0CBE Key_Bagi_2: ;Kode Bagi = 2
2104 0CBE jb Baris4,Key_Tambah_2
2105 0CC1 lcall Tunggu_tombol_dilepas
2106 0CC4 lcall Cek_Mode_Awal
2107 0CC7 mov (Terima_atas+14),#0FDH ;Simbol Bagi (FDH)
2108 0CCA lcall Baris_atas
2109 0CCD mov (Data_Operator+1),#2H ;Simpan Kode Bagi
2110 0CD0 mov A,Data_Operator
2111 0CD2 cjne A,#00H,Proses_2
2112 0CD5 lcall Copy_D2T_D1T
2113 0CD8 mov (Data_Negatif-1),Data_Negatif
2114 0CDB mov Data_Negatif,#00H
2115 0CDE setb Kolom4
2116 0CE0 ljmp Next_Data
26
2117 0CE3 Key_Tambah_2: ;Kode Tambah = 3
2118 0CE3 jb Baris5,Key_Kurang_2
2119 0CE6 lcall Tunggu_tombol_dilepas
2120 0CE9 lcall Cek_Mode_Awal
2121 0CEC mov (Terima_atas+14),#02BH ;Simbol Tambah (2BH)
2122 0CEF lcall Baris_atas
2123 0CF2 mov (Data_Operator+1),#3H ;Simpan Kode Bagi
2124 0CF5 mov A,Data_Operator
2125 0CF7 cjne A,#00H,Proses_2
2126 0CFA lcall Copy_D2T_D1T
2127 0CFD mov (Data_Negatif-1),Data_Negatif
2128 0D00 mov Data_Negatif,#00H
2129 0D03 setb Kolom4
2130 0D05 ljmp Next_Data
2131 0D08 Key_Kurang_2: ;Kode Kurang = 4
2132 0D08 jb Baris6,Key_Hasil_2
2133 0D0B lcall Tunggu_tombol_dilepas
2134 0D0E lcall Cek_Mode_Awal
2135 0D11 mov (Terima_atas+14),#0B0H ;Simbol Kurang (B0H)
2136 0D14 lcall Baris_atas
2137 0D17 mov (Data_Operator+1),#4H ;Simpan Kode Bagi
2138 0D1A mov A,Data_Operator
2139 0D1C cjne A,#00H,Proses_2
2140 0D1F lcall Copy_D2T_D1T
2141 0D22 mov (Data_Negatif-1),Data_Negatif
2142 0D25 mov Data_Negatif,#00H
2143 0D28 setb Kolom4
2144 0D2A ljmp Next_Data
2146 0D2D Proses_2:
2147 0D2D ljmp Hitung
2149 0D30 Key_Hasil_2:
2150 0D30 jb Baris8,Key_C_2
2151 0D33 lcall Tunggu_tombol_dilepas
2152 0D36 lcall Cek_Mode_Awal
2153 0D39 mov (Terima_atas+14),#03DH ;Simbol "=" (3DH)
2154 0D3C lcall Baris_atas
2155 0D3F mov Data_Hasil,#0FFH
2156 0D42 setb Kolom4
2157 0D44 mov A,Data_Operator
2158 0D46 cjne A,#00H,Calculate_2
2159 0D49 ljmp Next_Data
2160 0D4C Key_C_2:
2161 0D4C lcall Reset_Keypad
2162 0D4F clr Kolom1
2163 0D51 jb Baris1,Key_CE_2
2164 0D54 lcall LTunda
2165 0D57 lcall Tunggu_tombol_dilepas
2166 0D5A lcall Tampilan_C
2167 0D5D setb Kolom1
2168 0D5F ljmp Next_Data
2169 0D62 Key_CE_2:
2170 0D62 jb Baris2,Key_Kuadrat_2
2171 0D65 lcall LTunda
2172 0D68 lcall Tunggu_tombol_dilepas
2173 0D6B lcall Tampilan_CE
2174 0D6E setb Kolom2
2175 0D70 ljmp Next_Data
2176 0D73 Key_Kuadrat_2:
2177 0D73 lcall Reset_Keypad
2178 0D76 clr Kolom3
2179 0D78 jb Baris2,Key_Tanda_2
2180 0D7B lcall Tunggu_tombol_dilepas
2181 0D7E mov sp,#08H
2182 0D81 lcall Cek_Mode_Awal
2183 0D84 lcall Kuadrat
2184 0D87 cjne R7,#3H,Key_Kuadrat_2BD
2185 0D8A mov R0,#Sisa
2186 0D8C mov R1,#Data_2_Temp
2187 0D8E lcall Copy_Data
2188 0D91 Key_Kuadrat_2BD:
2189 0D91 lcall Cek_Mode_Akhir
2190 0D94 setb Kolom3
2191 0D96 ljmp Next_Data
2192 0D99 Key_Tanda_2:
2193 0D99 jb Baris8,Loop_Operator_2
2194 0D9C lcall LTunda
27
2195 0D9F lcall Tunggu_tombol_dilepas
2196 0DA2 mov sp,#08H
2197 0DA5 mov A,Data_Negatif
2198 0DA7 cpl A
2199 0DA8 mov Data_Negatif,A
2200 0DAA lcall Cek_Mode_Awal
2201 0DAD lcall Bilangan_Negatif
2202 0DB0 setb Kolom3
2203 0DB2 ljmp Next_Data
2205 0DB5 Loop_Operator_2:
2206 0DB5 ajmp Operator_2
2208 0DB7 Calculate_2:
2209 0DB7 ljmp Hitung
2211 0DBA ;================================================
2212 0DBA ; Subrutin Pengecekan kemampuan masimal
2213 0DBA ;================================================
2214 0DBA Cek_Mode_Max:
2215 0DBA mov R0,#Data_1
2216 0DBC mov R1,#Data_2_Temp
2217 0DBE lcall Copy_Data
2218 0DC1 cjne R7,#01H,Cek_Mode_Hex_Max
2224 0DCC mov R0,#Data_2 ;Cek apakah melebihi
2225 0DCE mov @R0,#00H ;kemampuan Biner max
2226 0DD0 inc R0 ;Bin max = 7FFFH
2227 0DD1 mov @R0,#80H
2228 0DD3 acall Cek_Max_2
2229 0DD5 ljmp Belum_Max
2231 0DD8 Cek_Mode_Hex_Max:
2232 0DD8 cjne R7,#02H,Cek_Mode_Dec_Max ;Cek apakah melebihi
2233 0DDB mov R0,#Data_2 ;kemampuan Hex max
2234 0DDD lcall Hapus_Nilai ;Hex max = FFFFFFFFFFFFFFFH
2235 0DE0 mov R0,#(Data_2+7)
2236 0DE2 mov @R0,#10H
2237 0DE4 acall Cek_Max_2
2238 0DE6 ljmp Belum_Max
2240 0DE9 Cek_Mode_Dec_Max:
2241 0DE9 cjne R7,#03H,Cek_Mode_BCD_Max ;Cek apakah melebihi
2242 0DEC mov R0,#Data_2 ;kemampuan Dec max
2243 0DEE mov @R0,#00H ;Dec max = 99999999999999
2244 0DF0 inc R0 ; = 38D7EA4C67FFFH
2245 0DF1 mov @R0,#80H
2246 0DF3 inc R0
2247 0DF4 mov @R0,#0C6H
2248 0DF6 inc R0
2249 0DF7 mov @R0,#0A4H
2250 0DF9 inc R0
2251 0DFA mov @R0,#7EH
2252 0DFC inc R0
2253 0DFD mov @R0,#8DH
2254 0DFF inc R0
2255 0E00 mov @R0,#03H
2256 0E02 inc R0
2257 0E03 acall Cek_Max_2
2258 0E05 ljmp Belum_Max
2260 0E08 Cek_Mode_BCD_Max:
2261 0E08 cjne R7,#04H,Cek_Mode_Max
2262 0E0B mov R0,#Data_2 ;Cek apakah melebihi
2263 0E0D mov @R0,#40H ;kemampuan BCD max
2264 0E0F inc R0 ;BCD max = 1F3F = 7999
2265 0E10 mov @R0,#01FH
2266 0E12 acall Cek_Max_2
2267 0E14 ljmp Belum_Max
2269 0E17 Cek_Max_2:
2270 0E17 mov R0,#Data_1
2271 0E19 mov R1,#Data_2
2272 0E1B lcall Pengurangan
2273 0E1E jnc Over_Load_2
2274 0E20 mov R0,#Data_2_Temp
2275 0E22 mov R1,#Data_1
2276 0E24 lcall Copy_Data
2277 0E27 mov R0,#Data_2_Temp
28
2278 0E29 call Hapus_Nilai
2279 0E2C mov R0,#Data_2
2280 0E2E call Hapus_Nilai
2281 0E31 ret
2283 0E32 Over_Load_2:
2284 0E32 ljmp Sistem_Error
2286 0E35 Tdk_Over_Load:
2287 0E35 ljmp Belum_Max
2289 0E38 ;================================================
2290 0E38 ; Data Tampilan LCD
2291 0E38 ;================================================
2292 0E38 Judul: DB ' KALKULATOR '
2293 0E48 Judul1: DB ' MODE '
2294 0E58 Judul2: DB ' BCD '
2295 0E68 Judul3: DB ' BIN '
2296 0E79 Judul4: DB ' HEX '
2297 0E89 Judul5: DB ' DEC '
2298 0E99 Judul6: DB ' 0'
2299 0EA9 Judul7: DB ' ERROR! '
2300 0EB9 Judul8: DB ' SISA = '
2301 0EC9 Bin0: DB '0000'
2302 0ECD Bin1: DB '1000'
2303 0ED1 Bin2: DB '0100'
2304 0ED5 Bin3: DB '1100'
2305 0ED9 Bin4: DB '0010'
2306 0EDD Bin5: DB '1010'
2307 0EE1 Bin6: DB '0110'
2308 0EE5 Bin7: DB '1110'
2309 0EE9 Bin8: DB '0001'
2310 0EED Bin9: DB '1001'
2311 0EF1 BinA: DB '0101'
2312 0EF5 BinB: DB '1101'
2313 0EF9 BinC: DB '0011'
2314 0EFD BinD: DB '1011'
2315 0F01 BinE: DB '0111'
2316 0F05 BinF: DB '1111'
29
LAMPIRAN 3
DATASHEET
MCR100 Series
Preferred Device
Sensitive Gate
Silicon Controlled Rectifiers
Reverse Blocking Thyristors
PNPN devices designed for high volume, line-powered consumer http://onsemi.com
applications such as relay and lamp drivers, small motor controls, gate
drivers for larger thyristors, and sensing and detection circuits.
Supplied in an inexpensive plastic TO-226AA package which is SCRs
readily adaptable for use in automatic insertion equipment. 0.8 A RMS
Features
100 thru 600 V
• Sensitive Gate Allows Triggering by Microcontrollers and Other
Logic Circuits
• Blocking Voltage to 600 V G
1 TO−92 (TO−226)
2 CASE 029
3
STYLE 10
PIN ASSIGNMENT
1 Cathode
2 Gate
3 Anode
ORDERING INFORMATION
See detailed ordering and shipping information in the package
dimensions section on page 2 of this data sheet.
*For additional information on our Pb−Free strategy and soldering details, please
download the ON Semiconductor Soldering and Mounting Techniques
Reference Manual, SOLDERRM/D.
ORDERING INFORMATION
Device Package Code Shipping†
MCR100−003
MCR100−004
5000 Units / Bulk
MCR100−006
MCR100−008
MCR100−3RL
TO 92 (TO
TO−92 (TO−226)
226)
MCR100−6RL 2000 Units / Tape & Reel
MCR100−6RLRA
MCR100−6RLRM
2000 Units / Tape & Ammunition Box
MCR100−6ZL1
MCR100−8RL 2000 Units / Tape & Reel
MCR100−003G
MCR100−006G 5000 Units / Bulk
MCR100−008G
MCR100−3RLG
TO−92
TO 92 (TO
(TO−226)
226) 2000 Units / Tubes
MCR100−6RLG
(Pb−Free)
MCR100−6RLRAG 2000 Units / Tape & Reel
MCR100−6RLRMG
2000 Units / Tape & Ammunition Box
MCR100−6ZL1G
MCR100−8RLG 2000 Units / Tape & Reel
†For information on tape and reel specifications, including part orientation and tape sizes, please refer to our Tape and Reel Packaging
Specifications Brochure, BRD8011/D.
Forward Average Gate Power, (TA = 25°C, t = 8.3 ms) PG(AV) 0.10 W
Forward Peak Gate Current, (TA = 25°C, Pulse Width 1.0 s) IGM 1.0 A
Reverse Peak Gate Voltage, (TA = 25°C, Pulse Width 1.0 s) VGRM 5.0 V
Operating Junction Temperature Range @ Rate VRRM and VDRM TJ −40 to 110 °C
Storage Temperature Range Tstg −40 to 150 °C
Maximum ratings are those values beyond which device damage can occur. Maximum ratings applied to the device are individual stress limit
values (not normal operating conditions) and are not valid simultaneously. If these limits are exceeded, device functional operation is not implied,
damage may occur and reliability may be affected.
1. VDRM and VRRM for all types can be applied on a continuous basis. Ratings apply for zero or negative gate voltage; however, positive gate
voltage shall not be applied concurrent with negative potential on the anode. Blocking voltages shall not be tested with a constant current
source such that the voltage ratings of the devices are exceeded.
http://onsemi.com
2
MCR100 Series
THERMAL CHARACTERISTICS
Characteristic Symbol Max Unit
Thermal Resistance,Junction−to−Case RJC 75 °C/W
Junction−to−Ambient RJA 200
Lead Solder Temperature TL 260 °C
(1/16″ from case, 10 secs max)
DYNAMIC CHARACTERISTICS
Critical Rate of Rise of Off−State Voltage dV/dt 20 35 − V/s
(VD = Rated VDRM, Exponential Waveform, RGK = 1000 ,TJ = 110°C)
Critical Rate of Rise of On−State Current di/dt − − 50 A/s
(IPK = 20 A; Pw = 10 sec; diG/dt = 1 A/sec, Igt = 20 mA)
*Indicates Pulse Test: Pulse Width ≤ 1.0 ms, Duty Cycle ≤ 1%.
2. RGK = 1000 included in measurement.
3. Does not include RGK in measurement.
http://onsemi.com
3
MCR100 Series
100 1.0
90 0.9
80
0.8
70
0.7
60
0.6
50
0.5
40
30 0.4
20 0.3
10 0.2
−40 −25 −10 5 20 35 50 65 80 95 110 −40 −25 −10 5 20 35 50 65 80 95 110
TJ, JUNCTION TEMPERATURE (°C) TJ, JUNCTION TEMPERATURE (°C)
Figure 1. Typical Gate Trigger Current versus Figure 2. Typical Gate Trigger Voltage versus
Junction Temperature Junction Temperature
1000 1000
LATCHING CURRENT ( A)
HOLDING CURRENT ( A)
100 100
10 10
−40 −25 −10 5 20 35 50 65 80 95 110 −40 −25 −10 5 20 35 50 65 80 95 110
TJ, JUNCTION TEMPERATURE (°C) TJ, JUNCTION TEMPERATURE (°C)
Figure 3. Typical Holding Current versus Figure 4. Typical Latching Current versus
Junction Temperature Junction Temperature
TC, MAXIMUM ALLOWABLE CASE TEMPERATURE ( °C)
120 10
MAXIMUM @ TJ = 25°C
110
MAXIMUM @ TJ = 110°C
100
90
DC
80 1
70 180°
60
50
30° 60° 90° 120°
40 0.1
0 0.1 0.2 0.3 0.4 0.5 0.5 0.8 1.1 1.4 1.7 2.0 2.3 2.6 2.9 3.2 3.5
IT(RMS), RMS ON-STATE CURRENT (AMPS) VT, INSTANTANEOUS ON-STATE VOLTAGE (VOLTS)
http://onsemi.com
4
MCR100 Series
W2
H4 H5
T1
L1
H1
W1 W
L T
F1 T2
F2
P2 P2 D
P1
P
Specification
Inches Millimeter
Symbol Item Min Max Min Max
D Tape Feedhole Diameter 0.1496 0.1653 3.8 4.2
D2 Component Lead Thickness Dimension 0.015 0.020 0.38 0.51
F1, F2 Component Lead Pitch 0.0945 0.110 2.4 2.8
H Bottom of Component to Seating Plane .059 .156 1.5 4.0
H1 Feedhole Location 0.3346 0.3741 8.5 9.5
H2A Deflection Left or Right 0 0.039 0 1.0
H2B Deflection Front or Rear 0 0.051 0 1.0
H4 Feedhole to Bottom of Component 0.7086 0.768 18 19.5
H5 Feedhole to Seating Plane 0.610 0.649 15.5 16.5
L Defective Unit Clipped Dimension 0.3346 0.433 8.5 11
L1 Lead Wire Enclosure 0.09842 — 2.5 —
P Feedhole Pitch 0.4921 0.5079 12.5 12.9
P1 Feedhole Center to Center Lead 0.2342 0.2658 5.95 6.75
P2 First Lead Spacing Dimension 0.1397 0.1556 3.55 3.95
T Adhesive Tape Thickness 0.06 0.08 0.15 0.20
T1 Overall Taped Package Thickness — 0.0567 — 1.44
T2 Carrier Strip Thickness 0.014 0.027 0.35 0.65
W Carrier Strip Width 0.6889 0.7481 17.5 19
W1 Adhesive Tape Width 0.2165 0.2841 5.5 6.3
W2 Adhesive Tape Position .0059 0.01968 .15 0.5
NOTES:
1. Maximum alignment deviation between leads not to be greater than 0.2 mm.
2. Defective components shall be clipped from the carrier tape such that the remaining protrusion (L) does not exceed a maximum of 11 mm.
3. Component lead to tape adhesion must meet the pull test requirements.
4. Maximum non−cumulative variation between tape feed holes shall not exceed 1 mm in 20 pitches.
5. Holddown tape not to extend beyond the edge(s) of carrier tape and there shall be no exposure of adhesive.
6. No more than 1 consecutive missing component is permitted.
7. A tape trailer and leader, having at least three feed holes is required before the first and after the last component.
8. Splices will not interfere with the sprocket feed holes.
http://onsemi.com
5
MCR100 Series
PACKAGE DIMENSIONS
TO−92 (TO−226)
CASE 029−11
ISSUE AL
NOTES:
1. DIMENSIONING AND TOLERANCING PER ANSI
A B Y14.5M, 1982.
2. CONTROLLING DIMENSION: INCH.
3. CONTOUR OF PACKAGE BEYOND DIMENSION R
IS UNCONTROLLED.
R 4. LEAD DIMENSION IS UNCONTROLLED IN P AND
BEYOND DIMENSION K MINIMUM.
P
L INCHES MILLIMETERS
SEATING DIM MIN MAX MIN MAX
PLANE K A 0.175 0.205 4.45 5.20
B 0.170 0.210 4.32 5.33
C 0.125 0.165 3.18 4.19
D 0.016 0.021 0.407 0.533
G 0.045 0.055 1.15 1.39
X X D H 0.095 0.105 2.42 2.66
G J 0.015 0.020 0.39 0.50
K 0.500 −−− 12.70 −−−
H J L 0.250 −−− 6.35 −−−
N 0.080 0.105 2.04 2.66
V C P −−− 0.100 −−− 2.54
R 0.115 −−− 2.93 −−−
SECTION X−X V 0.135 −−− 3.43 −−−
1 N
STYLE 10:
N PIN 1. CATHODE
2. GATE
3. ANODE
ON Semiconductor and are registered trademarks of Semiconductor Components Industries, LLC (SCILLC). SCILLC reserves the right to make changes without further notice
to any products herein. SCILLC makes no warranty, representation or guarantee regarding the suitability of its products for any particular purpose, nor does SCILLC assume any liability
arising out of the application or use of any product or circuit, and specifically disclaims any and all liability, including without limitation special, consequential or incidental damages.
“Typical” parameters which may be provided in SCILLC data sheets and/or specifications can and do vary in different applications and actual performance may vary over time. All
operating parameters, including “Typicals” must be validated for each customer application by customer’s technical experts. SCILLC does not convey any license under its patent rights
nor the rights of others. SCILLC products are not designed, intended, or authorized for use as components in systems intended for surgical implant into the body, or other applications
intended to support or sustain life, or for any other application in which the failure of the SCILLC product could create a situation where personal injury or death may occur. Should
Buyer purchase or use SCILLC products for any such unintended or unauthorized application, Buyer shall indemnify and hold SCILLC and its officers, employees, subsidiaries, affiliates,
and distributors harmless against all claims, costs, damages, and expenses, and reasonable attorney fees arising out of, directly or indirectly, any claim of personal injury or death
associated with such unintended or unauthorized use, even if such claim alleges that SCILLC was negligent regarding the design or manufacture of the part. SCILLC is an Equal
Opportunity/Affirmative Action Employer. This literature is subject to all applicable copyright laws and is not for resale in any manner.
http://onsemi.com MCR100/D
6
This datasheet has been download from:
www.datasheetcatalog.com
Table of Contents
C 2000/1/26 21
Ver: C Page: 1 / 21
2. RECORD OF REVISION
Ver: C Page: 2 / 21
3. GENERAL SPECIFICATION
Weight : 90 g max.
Transmissive Negative
White Others
Ver: C Page: 3 / 21
4. ABSOLUTE MAXIMUM RATINGS
4.1 ELECTRICAL ABSOLUTE MAXIMUM RATINGS
VSS= 0V, Ta = 25°C
Item Symbol Min. Max. Unit
Supply Voltage
VDD-VSS 0 7 V
(Logic)
Supply Voltage
VDD-VEE 0 25 V
(LCD Driver)
Ver: C Page: 4 / 21
5. ELECTRICAL CHARACTERISTICS
Item Symbol Condition Min. Typ. Max. Unit
Supply Voltage
VDD-VSS 4.5 5.0 5.5 V
(Logic)
0°C 12.5 13 13.5
Supply Voltage
VDD-VO 25°C 11.3 12.0 12.6 V
(LCD)
50°C 10.5 11.0 11.5
6. ELECTRO-OPTICAL CHARACTERISTICS
ITEM Symbol Condition Min. Typ. Max. Unit Ref.
Ver: C Page: 5 / 21
Note (1) Response time is measured as the shortest period of time possible
between the change in state of an LCD segment as demonstrated below:
+Vop
1/f F
-Vop
90%
100%
10%
tr tf
Condition:
( a ) . Temperature ---------------25°C
( b ) . Frame frequency --------- 70Hz
( c ) . View Angle ----------------- θ = 0°, ∅=0°
( d ) . Operating voltage -------- 12.0V
Top
∅2 ∅1
θ1
θ2
Ver: C Page: 6 / 21
7. TIMING CHARACTERISTICS
£ S
»witching Characteristics (2)
Bus Timing
C/D
tCDS tCDH
CE
tCE,tRD,tWR
RD, WR
tDS
D0toD7
(WRITE)
tDH
D0toD7
(READ)
tACC tOH
TEST CONDITIONS (Unless otherwise noted. VDD = 5.0V±10%, VSS = 0V, Ta = -20 to
75¢ J)
ITEM SYMBOL TEST CONDITIONS MIN MAX UNIT
C / D Set-up Time tCDS -- 100 -- ns
9. POWER SUPPLY
VDD
+5V
LCM
VSS
PWM
LCD Contrast Control
DB0 64 Com
Common Driver LCD PANEL
DB7 CONNTROLLER X1 240X64 DOTS
LSI
/RD T6963C
/CE 240 Seg
C/D
/RESET Segment Driver
FS X3
/WR
8K SRAM
VDD, VSS
Thermistor
RT1:3.3K
SCI7661 VLCD
DC to DC
PWM
(*1)
STA0=1
STA1=1
(*1) STAT2=1 (Read)
NO or
NO
STAT3=1 (Write)
YES
YES
RETURN RETURN
(Note 4) When using the MSB = 0 command, a Status Read must be performed.
If a status check is not carried out, the T6963C cannot operate normally, even after a delay time.
The hardware interrupt occurs during the address calculation period (at the end of each line).
If a MSB = 0 command is sent to the T6963C during this period, the T6963C enters Wait status.
If a status check is not carried out in this state before the next command is sent, there is the
Possibility that the command or data will not be received.
STA0, 1
Data write
Data write
Status check
Status check
Data write
Command write
Status check
END
Command write
END
(Note) When sending more than two data, the last datum (or last two data) is valid.
MSB LSB
ad15 ad14 ad13 ad12 ad11 ad10 ad9 ad8 ad7 ad6 ad5 ad4 ad3 ad2 ad1 ad0
11.1.2 Operation
Unless specified otherwise, test will be conducted with LCM in operation.
11.1.3 Container
Unless specified otherwise, vibration test will be conducted on module only.
45°
B
LCD
A
BEZEL
PCB
A : Display Area
B : Non-Display Area
Rev:C Page: 16
/21
11.2.3 Inspection Parameters
2 Scratch, Substances
3 Air Bubbles
(between glass
& polarizer)
Zone Acceptable Class
AQL
number of
Level
Dimension A B Defects
D ≤ 0.15 ∗ ∗
0.15 < D ≤ 0.25 2 ∗ Minor 2.5
0.25 < D 0 1
∗ : Disregard
0.152
4 Uniformity of Pixel
(3) Pin hole
X
Y
( X + Y )/2 ≤ 0.02mm
(4) Deformation
X ( X + Y ) / 2 ≤ 0.3mm
Y
Total acceptable number : 1/pixel, 5/cell
9 7 4 2
Production year
GM 24644 S R 01
VERSION :01
MODE
M – transmissive R – Reflective
Nil – transflective N - Negative
LCD type
S – STN Gray
S1– STN Yellow
N – TN
Series code
24644– Dot number =240 x 64 dots, 4th Type
Model type
CM – Character Module
GM – Graphic Module
CXM – Custom Character Module
GXM – Custom Graphic Module