BERBAGILAH DALAM HAL KEBAIKAN TERMASUK ILMU WALAU CUMA SETITIK....

1/15/2012

PROGRAM PEMBUATAN JAM DIGITAL

;===============*****************===================
; PROGRAM PEMBUATAN JAM DIGITAL
;===============*****************===================
;
Keydata Equ 30H
Nomor Equ 31H
Jam Equ 32H
Menit Equ 33H
Hari Equ 34H
Tanggal Equ 35H
Bulan Equ 36H
Tahun Equ 37H
Data_Area Equ 38H
E Bit P3.5
RS Bit P3.4
kolom1 Bit P1.3
kolom2 Bit P1.2
kolom3 Bit P1.1
baris1 Bit P1.7
baris2 Bit P1.6
baris3 Bit P1.5
baris4 bit P1.4
keyport Equ P1
;
;========**********==========
; AWAL PROGRAM
;========**********==========

ORG 0000H
Ljmp MULAI

ORG 0003H
Acall PENGATURAN
Reti

ORG 0013H
Acall INTERUPSIRTC
Reti
;
;===========************==========
; PROGARAM UTAMA
;===========************==========
MULAI:
Acall INISIALLCD
Acall Awalan
Mov A,#01H
Acall KirimPerintah
Acall PERSIAPANRTC
CLR IT1
SETB EX1
CLR IT0
SETB EX0
SETB EA
SETB PX0
CLR PX1
SJMP $
;
;=================================
;SUB-ROUTINE PENGHASIL DELAY
;=================================
DELAY:
Mov R6,#02FH
DELAY1:
Mov R5,#50H
Djnz R5,$
Djnz R6,DELAY1
RET
LDELAY:
Mov R2,#020H
LDELAY1:
Acall DELAY
Djnz R2,LDELAY1
Ret
;
;===============================================
;SUB ROUTINE PENULISAN INSTRUKSI DAN DATA KE LCD
;===============================================
KirimPerintah:
Clr RS
Mov P0,A ;intruksi ke LCD
Setb E
Clr E ;module
Acall delay
Ret

KirimASCII:
Setb RS
Mov P0,A ;intruksi ke LCD
Setb E
Clr E ;module
Acall delay
Ret
;
;============***********=============
; SUB_ROUTINE PERSIAPAN MENGAKSES RTC
;============***********=============
PERSIAPANRTC:

Mov A,#00101111B ;MENGHASILKAN FREK 4Hz
Mov Dpl,#0AH ;ADDRESS REGISTER A
Movx @Dptr,A

Mov A,#11111010B ;INTERUPSI LENGKAP
Mov Dpl,#0BH ; ADDRESS REGISTER B
Movx @Dptr,A

Mov A,#20H
Mov Dpl,#50
Movx @Dptr,A

Mov A,#01111010B ;INTERUPSI LENGKAP
Mov Dpl,#0BH ; ADDRESS REGISTER B
Movx @Dptr,A

Ret
;
;============***********=============
; SUB_ROUTINE MEMASUKKAN JAM KE RTC
;============***********=============
Proses_Data:
MOV A,#%11111010B ;INTERUPSI LENGKAP
MOV DPL,#0BH ; ADDRESS REGISTER B
MOVX @DPTR,A

Mov A,Jam
MOV DPTR,#04
MOVX @DPTR,A

Mov A,Menit
MOV DPTR,#02
MOVX @DPTR,A

Mov A,Hari
MOV DPTR,#06
MOVX @DPTR,A

Mov A,Tanggal
MOV DPTR,#07
MOVX @DPTR,A

Mov A,Bulan
MOV DPTR,#08
MOVX @DPTR,A

Mov A,Tahun
MOV DPTR,#09
MOVX @DPTR,A

Ret
;
;============*********==============
;SUB- ROUTINE INTRUPSI PADA RTC
;============*********==============
INTERUPSIRTC:
Mov DPTR,#0CH
Movx A,@DPTR
Jb ACC.4,GANTIDETIK
Ret
;
;===========**********==============
; INISIALAISASI LCD
;===========**********==============
INISIALLCD:
Acall Ldelay
mov A,#03Fh
Acall KirimPerintah
Acall KirimPerintah
Acall LDELAY
Mov A,#0DH
Acall KirimPerintah
Mov A,#06H
Acall KirimPerintah
Mov A,#01H
Acall KirimPerintah
Mov A,#0CH
Acall KirimPerintah
Ret
;
;=============*************=============
; SUB-ROUTINE GANTI DETIK
;=============*************=============
TAMPILKANBCD:
MOVX A,@DPTR ;AMBIL DATA PADA DS1287
SWAP A ;BIT 7..4 KE BIT 3..0
LCALL OUTDIGIT ;CETAK ANGKA KE LCD
MOVX A,@DPTR ;AMBIL DATA LAGI
LCALL OUTDIGIT
RET

OUTDIGIT:
ANL A,#0FH ;BUANG BITKE 7..4
ORL A,#030H ;JADIKAN DATA LCD
ACALL KirimASCII
RET

GANTIDETIK:
ACALL TAMPILKANWAKTU
ACALL TAMPILKAN_TANGGAL
Reti

TAMPILKANWAKTU:
MOV A,#84H
ACALL KirimPerintah


MOV DPTR,#4 ;DATA JAM PADA DS12C887
ACALL TAMPILKANBCD ;TAMPILAKAN JAM PADA LCD
MOV A,#3AH
ACALL KirimASCII

MOV DPTR,#2 ;DATA MENIT PADA DS12C887
ACALL TAMPILKANBCD ;TAMPILKAN MENIT PADA LCD
MOV A,#3AH
ACALL KirimASCII

MOV DPTR,#0 ;DATA DETIK PADA DS12C887
ACALL TAMPILKANBCD
RET


TAMPILKAN_TANGGAL:
Mov A,#0C1H
Acall KirimPerintah
Mov R0,#03
Mov DPTR,#6 ;DATA TANGGAL PADA DS1287

Tampil_tanggal_1:
Acall TAMPILKANBCD ;TAMPILAKAN PADA LCD
Mov A,#2DH
Acall KirimASCII
Inc Dptr
Djnz R0,Tampil_tanggal_1

Mov DPTR,#50 ;DATA ABAD PADA DS1287
Acall TAMPILKANBCD ;TAMPILKAN PADA LCD

Mov DPTR,#9 ;DATA TAHUN PADA DS1287
Acall TAMPILKANBCD ;TAMPILAKAN PADA LCD
Ret
;
;==========================================
; Instruksi Mengeluarkan Tampilan Awal
;==========================================
Awalan:

Mov DPTR,#Tampilan
barisc:
Mov R3,#16
Mov A,#80h
Acall KirimPerintah
tulis3:
Clr A
Movc A,@A+DPTR
Inc DPTR
Acall KirimASCII
Djnz R3,Tulis3
;
barisd:
Mov R3,#16
Mov A,#0C0h
Acall KirimPerintah
tulis4:
Clr A
Movc A,@A+DPTR
Inc DPTR
Acall KirimASCII
Djnz R3,Tulis4
Acall Ldelay
Ret
;
;==========================================
; Instruksi Mengeluarkan Menu
;==========================================
Pengaturan:
Mov Data_Area,#00H
Acall INISIALLCD
Mov R1,#2
Mov DPTR,#Menu1
barisa:
Mov R3,#16
Mov A,#80h
Acall KirimPerintah
tulis1:
Clr A
Movc A,@A+DPTR
Inc DPTR
Acall KirimASCII
Djnz R3,Tulis1
;
barisb:
Mov R3,#16
Mov A,#0C0h
Acall KirimPerintah
tulis2:
Clr A
Movc A,@A+DPTR
Inc DPTR
Acall KirimASCII
Djnz R3,Tulis2
Acall Ldelay
Djnz R1,barisa
;
;==========================================
; Instruksi Pendeteksi Keypad
;==========================================
scan_alpha_numerik:
Acall keypad
Mov A,keydata
Cjne A,#0FFh,key_pressed_1
Sjmp scan_alpha_numerik
;
key_pressed_1:
Cjne A,#0FH,key_pressed_2
Acall Proses_Data
Reti
;
key_pressed_2:
Orl A,#30h
Mov Nomor,A
Acall Tampil_key
Acall tunggu_tombol_dilepas
Ajmp scan_alpha_numerik
;
tunggu_tombol_dilepas:
Jnb baris1,$
Jnb baris2,$
Jnb baris3,$
Jnb baris4,$
Ret
;
Tampil_key:
Inc Data_Area
Mov A,Data_area
Cjne A,#01,Terus1
Mov A,#84H ;Tampilan Masukkan Jam
Acall Tampilkan_simpan
Swap A
Anl A,#0F0H
Mov Jam,A
Ret
;
Terus1:
Cjne A,#02,Terus2
Mov A,#85H
Acall Tampilkan_simpan
Anl A,#0FH
Orl A,Jam
Mov Jam,A
Ret
;
Terus2:
Cjne A,#03,Terus3
Mov A,#87H ;Tampilan Masukkan Menit
Acall Tampilkan_simpan
Swap A
Anl A,#0F0H
Mov Menit,A
Ret
;
Terus3:
Cjne A,#04,Terus4
Mov A,#88H
Acall Tampilkan_simpan
Anl A,#0FH
Orl A,Menit
Mov Menit,A
Ret
;
Terus4:
Cjne A,#05,Terus5
Mov A,#0C2H ;Tampilan Masukkan Hari
Acall Tampilkan_simpan
Anl A,#0FH
Mov Hari,A
Ret
;
Terus5:
Cjne A,#06,Terus6
Mov A,#0C4H ;Tampilan Masukkan Tanggal
Acall Tampilkan_simpan
Swap A
Anl A,#0F0H
Mov Tanggal,A
Ret
;
Terus6:
Cjne A,#07,Terus7
Mov A,#0C5H
Acall Tampilkan_simpan
Anl A,#0FH
Orl A,Tanggal
Mov Tanggal,A
Ret
;
Terus7:
Cjne A,#08,Terus8
Mov A,#0C7H ;Tampilan Masukkan Bulan
Acall Tampilkan_simpan
Swap A
Anl A,#0F0H
Mov Bulan,A
Ret
Terus8:
Cjne A,#09,Terus9
Mov A,#0C8H
Acall Tampilkan_simpan
Anl A,#0FH
Orl A,Bulan
Mov Bulan,A
Ret
;
Terus9:
Cjne A,#10,Terus10
Mov A,#0CCH ;Tampilan Masukkan Tahun
Acall Tampilkan_simpan
Swap A
Anl A,#0F0H
Mov Tahun,A
Ret
;
Terus10:
Mov A,#0CDH
Acall Tampilkan_simpan
Anl A,#0FH
Orl A,Tahun
Mov Tahun,A
Ret
;
Tampilkan_simpan:
Acall KirimPerintah
Mov A,Nomor
Acall KirimASCII
Ret
;
;====================================
; Instruksi Untuk Pembacaan
; Keypad
;====================================
Keypad:
mov keyport,#0FFh
clr kolom1
ul1: jb baris1,key1
mov keydata,#1
ret
key1: jb baris2,key2
mov keydata,#4
ret
key2: jb baris3,key3
mov keydata,#7
ret
key3: jb baris4,key4
mov keydata,#0Eh
ret
key4: setb kolom1
clr kolom2
jb baris1,key5
mov keydata,#2
ret
key5: jb baris2,key6
mov keydata,#5
ret
key6: jb baris3,key7
mov keydata,#8
ret
key7: jb baris4,key8
mov keydata,#0
ret
key8: setb kolom2
clr kolom3
jb baris1,key9
mov keydata,#3
ret
key9: jb baris2,key10
mov keydata,#6
ret
key10: jb baris3,key11
mov keydata,#9
ret
key11: jb baris4,key12
mov keydata,#0Fh
ret
key12: Mov keydata,#0FFh
Ret
;
;============================================
; Tampilan Setting Data
;============================================
Tampilan:
DB 'Proyek Pembuatan'
DB ' Jam Digital '
;
Menu1:
DB 'PENGATURAN WAKTU'
DB ' MASUKKAN DATA '
DB ' : :00 '
DB ' 0 - - -20 '
;
END
Share

1 comment: