;===================================================================== */
;=== Deklarasi variabel ===
karX equ R7 ;karakter X sesuai kelompok
posX equ 11000001b ; posisi 1yxxxxxxb [1+baris0(1)+kolomX(6)]
karY equ R6 ;karakter X sesuai kelompok
posY equ 11000000b ; posisi 1yxxxxxxb [1+baris0(1)+kolomX(6)]
kar1 equ 'J' ;karakter Y sesuai kelas
pos1 equ 10000000b ; posisi 1yxxxxxxb [1+baris1(1)+kolomY(6)]
kar2 equ 'U' ;karakter X sesuai kelompok
pos2 equ 10000001b ; posisi 1yxxxxxxb [1+baris0(1)+kolomX(6)]
kar3 equ 'M' ;karakter Y sesuai kelas
pos3 equ 10000010b ; posisi 1yxxxxxxb [1+baris1(1)+kolomY(6)]
kar4 equ 'L' ;karakter X sesuai kelompok
pos4 equ 10000011b ; posisi 1yxxxxxxb [1+baris0(1)+kolomX(6)]
kar5 equ 'A' ;karakter Y sesuai kelas
pos5 equ 10000100b ; posisi 1yxxxxxxb [1+baris1(1)+kolomY(6)]
kar6 equ 'H' ;karakter X sesuai kelompok
pos6 equ 10000101b ; posisi 1yxxxxxxb [1+baris0(1)+kolomX(6)]
kar7 equ 'O' ;karakter Y sesuai kelas
pos7 equ 10000111b ; posisi 1yxxxxxxb [1+baris1(1)+kolomY(6)]
kar8 equ 'R' ;karakter X sesuai kelompok
pos8 equ 10001000b ; posisi 1yxxxxxxb [1+baris0(1)+kolomX(6)]
kar9 equ 'A' ;karakter Y sesuai kelas
pos9 equ 10001001b ; posisi 1yxxxxxxb [1+baris1(1)+kolomY(6)]
kar10 equ 'N' ;karakter X sesuai kelompok
pos10 equ 10001010b ; posisi 1yxxxxxxb [1+baris0(1)+kolomX(6)]
kar11 equ 'G' ;karakter Y sesuai kelas
poS11 equ 10001011b ; posisi 1yxxxxxxb [1+baris1(1)+kolomY(6)]
kar12 equ '=' ;karakter Y sesuai kelas
pos12 equ 10001100b ; posisi 1yxxxxxxb [1+baris1(1)+kolomY(6)]
LCD equ P1 ;LCD dipasang pada P0
RS equ P3.6 ;Reg.Select (RS) 0:perintah/1:data
En equ P3.7 ;Enable (En) transisi turun H->L
perda equ 3Ch ;var perintah/data
jeda equ 1 ;lama jeda
;=== Pengesetan Awal ====
ORG 0
MOV R7 ,#30H ;alamat awal
MOV R6 ,#30H
awal:
CALL init ;inisialisasi LCD
;=== Program Utama ===
MULAI:
MOV perda,#pos1 ;posisi pada LCD
CALL tulisPerintah ; perintah
MOV perda,#kar1 ;tampilkan karakter
CALL tulisData ; data
MOV perda,#pos2 ;posisi pada LCD
CALL tulisPerintah ; perintah
MOV perda,#kar2 ;tampilkan karakter
CALL tulisData ; data
MOV perda,#pos3 ;posisi pada LCD
CALL tulisPerintah ; perintah
MOV perda,#kar3 ;tampilkan karakter
CALL tulisData ; data
MOV perda,#pos4 ;posisi pada LCD
CALL tulisPerintah ; perintah
MOV perda,#kar4 ;tampilkan karakter
CALL tulisData ; data
MOV perda,#pos5 ;posisi pada LCD
CALL tulisPerintah ; perintah
MOV perda,#kar5 ;tampilkan karakter
CALL tulisData ; data
MOV perda,#pos6 ;posisi pada LCD
CALL tulisPerintah ; perintah
MOV perda,#kar6 ;tampilkan karakter
CALL tulisData ; data
MOV perda,#pos7 ;posisi pada LCD
CALL tulisPerintah ; perintah
MOV perda,#kar7 ;tampilkan karakter
CALL tulisData ; data
MOV perda,#pos8 ;posisi pada LCD
CALL tulisPerintah ; perintah
MOV perda,#kar8 ;tampilkan karakter
CALL tulisData ; data
MOV perda,#pos9 ;posisi pada LCD
CALL tulisPerintah ; perintah
MOV perda,#kar9 ;tampilkan karakter
CALL tulisData ; data
MOV perda,#pos10 ;posisi pada LCD
CALL tulisPerintah ; perintah
MOV perda,#kar10 ;tampilkan karakter
CALL tulisData ; data
MOV perda,#pos11 ;posisi pada LCD
CALL tulisPerintah ; perintah
MOV perda,#kar11 ;tampilkan karakter
CALL tulisData ; data
MOV perda,#pos12 ;posisi pada LCD
CALL tulisPerintah ; perintah
MOV perda,#kar12 ;tampilkan karakter
CALL tulisData ; data
SJMP COUNTER ;stop di sini
;-----------------------------------------------------------------------
COUNTER:
MOV perda,#posY ;posisi pada LCD
CALL tulisPerintah ; perintah
MOV perda,karY ;tampilkan karakter
CALL tulisData
MOV perda,#posX ;posisi pada LCD
CALL tulisPerintah ; perintah
MOV perda,karX ;tampilkan karakter
CALL tulisData
SENSOR:
JNB P2.1,TUNDAX
JNB P2.0,TUNDAY
CJNE R7,#30H,SENSOR
CJNE R6,#30H,SENSOR
SETB P0.2
SJMP SENSOR
TAMBAH:
INC R7
CLR P0.2
CJNE R7, #3AH, COUNTER
MOV R7 , #30H
INC R6
CJNE R6, #3AH,COUNTER
MOV R6 ,#39H
MOV R7 ,#39H
SJMP COUNTER
KURANG:
DEC R7
CJNE R7, #2FH, COUNTER
MOV R7 , #39H
DEC R6
CJNE R6, #2FH,COUNTER
SETB P0.2
MOV R6 ,#30H
MOV R7 ,#30H
SJMP COUNTER
;- tunda: penunda waktu ----------------------------------------------------
tundaX: ;tunda:
MOV 71h,#5 ;nilai awal t1
tunda1X: ; tunda1
MOV 72h,#0 ;nilai awal t2
tunda2X: ; tunda2:
MOV 73h,#0 ;nilai awal t3
tunda3X:
JNB P2.0 ,TAMBAH ; tunda3X:
NOP ;diam
DJNZ 73h,tunda3X ;balik ke tunda3X
DJNZ 72h,tunda2X ;balik ke tunda2X
DJNZ 71h,tunda1X ;balik ke tunda1X
SJMP SENSOR
tundaY: ;tunda:
MOV 71h,#5 ;nilai awal t1 (sesuai jeda)
tunda1Y: ; tunda1
MOV 72h,#0 ;nilai awal t2
tunda2Y: ; tunda2:
MOV 73h,#0 ;nilai awal t3
tunda3Y:
JNB P2.1 ,KURANG ; tunda3:
NOP ;diam
DJNZ 73h,tunda3Y ;balik ke tunda3
DJNZ 72h,tunda2Y ;balik ke tunda2
DJNZ 71h,tunda1Y ;balik ke tunda1
SJMP SENSOR
;=== Sub program ===
;- init: inisialisasi tampilan LCD -------------------------------------
init:
;DB5-Set Fungsi (001D NFxx) D:8bit N:baris0 F:kecil
MOV perda,#00111000b
CALL tulisPerintah
;DB3-Kontrol Tampilan (0000 1DCB) D:tampilan nyala C:kursor tidak B:berkedip tidak
MOV perda,#00001100b
CALL tulisPerintah
;DB0-Hapus Layar (0000 0001)
MOV perda,#00000001b
CALL tulisPerintah
;DB2-Mode Entri (0000 01IS) I:inkremen S:geser tidak
MOV perda,#00000110b
CALL tulisPerintah
RET ;kembali
;-------------------------------------------------------------------------
;- tulisPerintah/Data: menulis perintah / data ke LCD --------------------
tulisPerintah:
CLR RS ;RS=0 Perintah
SJMP tulisPerda
tulisData:
SETB RS ;RS=1 Data
tulisPerda:
MOV LCD,perda ;kirim ke LCD <== perda
SETB En ;buat pulsa Enable sesaat
CALL tunda
CLR En
RET ;kembali
;---------------------------------------------------------------------------
;- tunda: penunda waktu ----------------------------------------------------
tunda: ;tunda:
MOV 71h,#jeda ;nilai awal t1 (sesuai jeda)
tunda1: ; tunda1
MOV 72h,#0 ;nilai awal t2
tunda2: ; tunda2:
MOV 73h,#0 ;nilai awal t3
tunda3: ; tunda3:
NOP ;diam
DJNZ 73h,tunda3 ;balik ke tunda3
DJNZ 72h,tunda2 ;balik ke tunda2
DJNZ 71h,tunda1 ;balik ke tunda1
RET ;kembali
;--------------------------------------------------------------------------
END
0 Response to "Lampu Ruang dengan Penghitung Pengunjung Otomatis"
Posting Komentar