JAM DIGITAL DENGAN ALARM BERBASIS MIKROKONTROLER AT89S51


 JAM DIGITAL DENGAN ALARM BERBASIS

MIKROKONTROLLER AT89S51




Dosen Pembimbing : Dr. Samuel Beta Kuntoardjo.,ING. TECH, M.T.,DR

Kelompok A2          :                                 1. Aditya Ikbar Musyaffa        (03)

2. Amri Puji Hidayatul M        (04)

 3. Madhani Rizki M                    (15) 

4. Mahadita Pratiwi                  (16)

5. zakiya Fathan M                   (26)


Masukan : Saklar Tombol Tekan (Push Button) dan Jam Waktu Nyata (Real Time Clock)

Output    : Bel (Buzzer) dan Penampil Kristal Cair (LCD) 16 x 2


Abstrak

Berkembangnya teknologi khususnya Mikrokontroler, kini membuat berbagai alat dapat dikembangkan menjadi lebih modern dan canggih. Banyak kemajuan yang dihasilkan dari beralihnya perangkat konvensional yang mekanis menuju perangkat yang lebih praktis dengan menggunakan Mikrokotroler ini. Seperti pada jam yang dahulu menggunakan gerigi dan gear yang saling terhubung sehingga dapat membentuk sistem tertentu untuk menggerakan jarum serta menghitung waktu, sekarang telah ditemukan jam yang lebih modern dan mudah digunakan dengan memanfaatkan Mikrokontroler. Jam Digital berbasis Mikrokontroler AT89S51 adalah salah satu contohnya. Dengan mengambil data waktu dari Real Time Clock DS 3231, jam digital mampu menampilkan jam, menit, dan detik dengan akurasi yang cukup tinggi dan mudah untuk di setting  apabila ada kesalahan. Selain itu, keunggulan dari jam digital ini adalah desain yang futuristik dan menarik dibanding dengan jam - jam konvensional pendahulunya.

Kata Kunci : MCS-51 , AT89S51 , Bel , Buzzer , LCD , Penampil Kristal Cair , Saklar Tombol Tekan , Push Button , USB ISP , Mikrokontroler , Jam Digital , Alarm, Real Time Clock.

Abstract

With the development of technology, especially microcontrollers, now various tools can be developed to be more modern and sophisticated. Many advances have resulted from the switch from conventional devices to more practical devices using this microcontroller. As in the previous clock, which used gears and gears that were connected to each other so that they could form a certain system to move the hands and calculate the time, now a more modern and easy-to-use clock has been found by utilizing a Microcontroller. The AT89S51 Microcontroller-based Digital Clock is one example. By taking time data from the Real Time Clock DS 3231, the digital clock is able to display hours, minutes, and seconds with high accuracy and easy to set if there is an error. In addition, the advantage of this digital clock is a futuristic and attractive design compared to conventional clocks of its predecessors.

Keywords: MCS-51, AT89S51, Bell, Buzzer, LCD, Liquid Crystal Display, Push Button Switch, Push Button, USB ISP, Microcontroller, Digital Clock, Alarm, Real Time Clock.


I. PENDAHULUAN

1.1 Latar Belakang

Jam digital merupakan perangkat mekanik dan digunakan sebagai pengingat waktu. Jam digital ini juga dilengkapi dengan alarm yang berguna untuk mengingatkan kita akan jadwal yang telah direncanakan seperti membangunkan kita saat tidur,mengingatkan tugas dan lain lain. Jam digital memiliki kelebihan dibanding jam analog seperti lebih senyap,akurat,presisi,memiliki banyak fitur,dan lebih mudah dibaca.Oleh karena itu munculah teknologi jam digital berbasis mikrokontroler, dimana ketika jam digital dihidupkan tampilan waktu akan langsung sesuai dengan waktu saat ini tanpa harus mengatur atau set ulang.  

1.2 Tujuan 

Tujuan dari pembuatan alat ini adalah :

  1. Membuat Jam Digital Berbasis Mikrokontroler AT89S51 yang bermanfaat sebagai pengingat waktu bagi Mahasiswa Polines dan Masyarakat pada umumnya
  2. Mampu memahami prinsip kerja dari Jam Digital Berbasis Mikrokontroler AT89S51
  3. Memanfaatkan Mikrokontroler sebagai media pembelajaran dengan Jam Digital ini

1.3 Rumusan Masalah

Dari latar belakang diatas, diperoleh rumusan masalah sebagai berikut.
1. Bagaimanakah cara membuat jam digital berbasis mikrokontroler?
2. Komponen apa sajakah yang digunakan dalam pembuatan jam digital berbasis mikrokontroler?
3. Bagaimanakah rangkaiannya?
4. Bagaimanakah program yang akan diisikan pada IC Mikrokontroler?


II. TINJAUAN PUSTAKA

2.1 Saklar Tombol Tekan 
Saklar Tombol Tekan adalah perangkat/saklar sederhana yang berfungsi  untuk menghubungkan atau memutuskan aliran arus listrik dengan sistem kerja tekan unlock (tidak mengunci).

Gambar 2.1 Saklar Tombol Tekan

2.2 Jam Waktu Nyata (Real Time Clock) DS 3231
Jam Waktu Nyata (Real Time Clock) DS 3231 merupakan sebuah jenis modul yang dapat menghasilkan waktu digital secara realtime dengan tambahan sebuah baterai tipe kancing 3.3V yang berfungsi menyimpan data waktu ketika supply padam.
Gambar 2.2 Jam Waktu Nyata (Real Time Clock) DS3231 

2.3 Penampil Kristal Cair ( LCD )
Penampil Kristal Cair (LCD) 16x2 adalah media tampilan yang paling mudah untuk diamati karena menghasilkan tampilan karakter yang baik dan cukup banyak. Pada lcd 16x2 dapat ditampilkan 32 karakter dimana 16 karakter pada baris atas dan 16 karakter pada baris bawah.

Gambar 2.3 Penampil Kristal Cair 16 x 2

2.4 Bel ( Buzzer )
Bel atau Buzzer adalah perangkat sinyal audio yang mungkin mekanis, elektromekanis, atau piezoelektrik. Penggunaan buzzer biasanya digunakan untuk perangkat alarm, timer, dan lain lain.

Gambar 2.4 Bel atau Buzzer

2.5 AT89S51
Mikrokontroler tipe AT89S51 merupakan mikrokontroler keluarga MCS-51 dengan konfigurasi yang sama persis dengan AT89C51 yang cukup terkenal, hanya saja AT89S51 mempunyai fitur ISP (In-System Programmable Flash Memory).

Gambar 2.5 AT89S51 


III. PERANCANGAN

Pada Dasarnya, Jam Digital yang akan kita buat kali ini akan memanfaatkan Mikrokontroler AT89S51 sebagai pusat kendalinya dengan komponen masukan berupa Saklar Tombol Tekan dan Real Time Clock DS3231 (sebagai input waktu) serta komponen luaran berupa Penampil Kristal Cair (LCD) dan Bel (Buzzer)

3.1 Alat 
  1. Gunting
  2. Tang Potong
  3. Bor
  4. Gerinda
  5. Lem Tembak
  6. Laptop / Personal Computer
  7. USB Isp
  8. Obeng
  9. Double Tape
  10. Penyedot Timah
  11. Penggaris
3.2 Bahan

Masukan    : 
  1. Saklar Tombol Tekan (Push Button)
  2. Jam Waktu Nyata (Real Time Clock)
Luaran       :
  1. Penampil Kristal Cair (LCD)
  2. Bel (Buzzer)
Proses        :
  1. Mikrokontroler AT89S51
Pendukung :
  1. Resistor 1K                                    1 buah
  2. Resistor 10K                                  5 buah
  3. Transistor PNP BC327               1 buah
  4. Potensiometer 10K                     1 buah
  5. Saklar tekan (On/Off)                 1 buah
  6. Saklar Tombol Tekan (Reset)  1 buah
  7. Papan PCB Polos                           1 buah
  8. Kapasitor 33pF                             2 buah
  9. Kristal 16 KHz                                1 buah
  10. Kabel Jumper
3.3 Diagram Blok


Gambar 3.1 Diagram Blok 

3.4 Diagram Alir
Klik link berikut untuk detailnya. Flow Chart
Gambar 3.2 Diagram Alir

3.5 Gambar Rangkaian

Gambar 3.3 Rangkaian

3.6 Diagram Pengawatan


Gambar 3.4 Diagram Pengawatan

3.7 Program Bahasa Assembler untuk Mikrokontroller AT89S51
Untuk Program akan dimasukan ke Mikrokontroller AT89S51 menggunakan Software Mide-51 dan driver  ProgIsp serta perangkat kerasnya adalah USb Isp. List Programnya adalah sebagai berikut.

; LCD Connections
LCD     DATA     P2         ; menetapkan LCD data pada port 2
Sibuk   BIT      LCD.7      ; menetapkan LCD sibuk
EN      BIT      P3.5           ; menetapkan LCD enable pada port 3.5
RW      BIT      P3.6          ; menetapkan LCD register pada port 3.6
RS      BIT      P3.7           ; menetapkan LCD baca/tulis pada port 3.7
;**************************************************************
; KEYS
NAIK    BIT      P1.3       ; menetapkan tombol NAIK pada p1.3
TURUN   BIT      P1.2  ; menetapkan tombol TURUN pada p1.2
T_Set   BIT      P3.2         ; menetapkan tombol Time Set pada p3.2
A_Set   BIT      P3.3        ; menetapkan tombol Alarm Set pada p3.3
;**************************************************************
; I2C Connections
SCL     BIT      P1.0         ; menetapkan p1.0 I2C serial clock 
SDA     BIT      P1.1        ; menetapkan p1.1 I2C serial data 
;**************************************************************
; Slave Address
SAW     EQU      0D0H     ; untuk penulis pada RTC DS3231
SAR     EQU      0D1H      ; untuk pembaca pada RTC DS3231
;**************************************************************
BitCnt  DATA     20H        ; BIT COUNTER FOR I2C ROUTINES
Detik   DATA     21H        ; DETIK STORAGE RAM
Menit   DATA     22H        ; MENIT STORAGE RAM
Jam     DATA     23H         ; JAM STORAGE RAM
Hari    DATA     24H         ; HARI STORAGE RAM
Tanggal DATA     25H      ; TANGGAL STORAGE RAM
Bulan   DATA     26H        ; BULAN STORAGE RAM
Tahun   DATA     27H        ; TAHUN STORAGE RAM
SQW     DATA     28H        ; SQUARE-WAVE CONTROL
AL_Jam  DATA     29H      ; ALARM JAM 
AL_Min  DATA     2AH     ; ALARM MENIT
Logo    DATA     2FH          ; Logo
AL_Logo BIT      Logo.0    ; ALARM Logo
;                       ***MACRO'S***
I2C_Delay  MACRO
        NOP
           ENDM
;--------------------------------------------------------------
SCLHigh    MACRO
        SETB    SCL
        JNB     SCL,$
           ENDM
;--------------------------------------------------------------
D_Str      MACRO
        ACALL    Command
        LCALL    Disp_Char
           ENDM
;--------------------------------------------------------------
CLR_LCD    MACRO
        MOV      A,#01H
        ACALL    Command
           ENDM
;**************************************************************
ORG     0000H
;--------------------------------------------------------------
        ;perintah awal
        CLR      AL_Logo  
        MOV      SP,#2FH
        MOV      SQW,#80H
        ACALL    SQW_W
        ACALL    I2C_Start
        MOV      A,#SAW
        ACALL    I2C_Write
        MOV      A,#3FH
        ACALL    I2C_Write
        ACALL    I2C_Start
        MOV      A,#SAR
        ACALL    I2C_Write
        ACALL    I2C_Read_Last
        ACALL    I2C_Stop
        CJNE     A,#'~',INIT
        LJMP     LCD_I
;--------------------------------------------------------------
;inisalisasi
INIT:   ACALL    I2C_Start
        MOV      A,#SAW
        ACALL    I2C_Write
        MOV      A,#3FH
        ACALL    I2C_Write
        MOV      A,#'~'
        ACALL    I2C_Write
        MOV      A,#00H
        ACALL    I2C_Write
        ACALL    I2C_Stop
        SJMP     LCD_I
;--------------------------------------------------------------
;untuk reset Rel=al Time Clock
RTC_Reset:
        MOV      R0,#21H
        MOV      R6,#07H
        ACALL    I2C_Start
 MOV      A,#SAW
 ACALL    I2C_Write
 MOV      A,#00H
 ACALL    I2C_Write
Loop1: MOV      A,@R0
 ACALL    I2C_Write
 INC      R0
 DJNZ     R6,Loop1
 ACALL    I2C_Stop
        RET
;--------------------------------------------------------------
;untuk mematikan alarm
AL_Off: CLR      AL_Logo
SETB     P3.4
        MOV      SQW,#80H
        ACALL    SQW_W
        CLR_LCD
        MOV      A,#84H
        D_Str
        DB       'Alarm Off!',0
        MOV      A,#82H
        ACALL    Command
        MOV      A,#01H
        ACALL    Data_Disp
        ACALL    Delay
        SJMP     Main
;--------------------------------------------------------------
;untuk me- set waktu alarm yang dikehendaki
Alarm_Set:
        JB       AL_Logo,AL_Off
        CLR_LCD
        MOV      A,#84H
        D_Str
        DB       'Set Alarm',0
        MOV      A,#82H
        ACALL    Command
        MOV      A,#01H
        ACALL    Data_Disp
        ACALL    Delay
        AJMP     AH
;--------------------------------------------------------------
LCD_I:  ACALL    LCD_Initial
        ACALL    CGR
;--------------------------------------------------------------
;Untuk menjalankan perintah utama
Main:   ACALL    Disp_C
Start:  ACALL    Key_Scan
Back1:  MOV      R0,#21H
        MOV      R1,#0DH
        ACALL    I2C_Start
        MOV      A,#SAW
        ACALL    I2C_Write
        MOV      A,#00H
        ACALL    I2C_Write
        ACALL    I2C_Start
        MOV      A,#SAR
        ACALL    I2C_Write
Loop:   ACALL    I2C_Read
        DJNZ     R1,Loop
        ACALL    I2C_Read_Last
        ACALL    I2C_Stop
        ACALL    Display
        ACALL    Alarm_Check
        SJMP     Start
;--------------------------------------------------------------
;untuk membaca tombol mana yang ditekan oleh user
Key_Scan:
        JNB      T_Set,Jump1
        JNB      A_Set,Alarm_Set
        RET
;--------------------------------------------------------------
Jump1:  LJMP     Time_Set
;--------------------------------------------------------------
;cek nilai alarm yang si set
Alarm_Check:
        JNB      AL_Logo,CH
        MOV      A,AL_Min
        CJNE     A,Menit,Alarm_Off
        MOV      A,AL_Jam
        CJNE     A,Jam,Alarm_Off
        ACALL    Alarm_On
CH:     RET
;--------------------------------------------------------------
;tampilan mematikan alarm 
Alarm_Off:
        MOV      SQW,#80H
        SETB     P3.4
        ACALL    SQW_W
        RET
;--------------------------------------------------------------
;untuk fungsi RTC
SQW_W:  ACALL    I2C_Start
        MOV      A,#SAW
        ACALL    I2C_Write
        MOV      A,#07H
        ACALL    I2C_Write
        MOV      A,SQW
        ACALL    I2C_Write
        ACALL    I2C_Stop
        RET
;--------------------------------------------------------------
;tampilan bahwa alarm on/telah di set
Alarm_On:
        MOV      SQW,#10H
        CLR P3.4
        ACALL    SQW_W
        RET
;--------------------------------------------------------------
;fungsi untuk mengatur waktu dan tanggal
Time_Set:
        CLR_LCD
        MOV      A,#83H
        D_Str
        DB       'Set Hours:',0
        MOV      A,#0C7H
        ACALL    Command
        MOV      A,Jam
        MOV      R7,A
        ACALL    Disp_BCD
        JNB      T_Set,$
I24:    PUSH     ACC
        MOV      A,#0C7H
        ACALL    Command
        POP      ACC
KS24:   JNB      NAIK,Inc_Hour
        JNB      TURUN,Dec_Hour
        JNB      T_Set,Done_H
        SJMP     KS24
Inc_Hour:
        NOP
        ACALL    BCD_2_Hex
        INC      A
 CJNE     A,#18H,SH
 MOV      A,#00H
SH:     ACALL    Hex_2_BCD
 ACALL    Disp_BCD
 JNB      NAIK,$
 JNB      TURUN,$
 SJMP     I24
Dec_Hour:
        NOP
        ACALL    BCD_2_Hex
        DEC      A
 CJNE     A,#00H-1,SH
 MOV      A,#17H
 SJMP     SH
Done_H: JNB      T_Set,$
        MOV      JAM,R7
;--------------------------------------------------------------
;mengatur nilai menit
Mint:   CLR_LCD
        MOV      A,#82H
        D_Str
        DB       'Set Minutes:',0
        MOV      A,#0C7H
        ACALL    Command
        MOV      A,Menit
        MOV      R7,A
        ACALL    Disp_BCD
        JNB      T_Set,$
M1:     PUSH     ACC
        MOV      A,#0C7H
        ACALL    Command
        POP      ACC
KSMIN:  JNB      NAIK,Inc_Min
        JNB      TURUN,Dec_Min
        JNB      T_Set,DoneMin
        SJMP     KSMIN
Inc_Min:NOP
        ACALL    BCD_2_Hex
        INC      A
 CJNE     A,#3CH,SMin
 MOV      A,#00H
SMin:   ACALL    Hex_2_BCD
 ACALL    Disp_BCD
 JNB      NAIK,$
 JNB      TURUN,$
 SJMP     M1
Dec_Min:NOP
        ACALL    BCD_2_Hex
        DEC      A
 CJNE     A,#00H-1,SMin
 MOV      A,#3BH
 SJMP     SMin
DoneMin:JNB      T_Set,$
        MOV      Menit,R7
;--------------------------------------------------------------
;mengatur nilai hari
        CLR_LCD
        MOV      A,#83H
        D_Str
        DB       'Set Days:',0
        MOV      A,#0C5H
        D_Str
        DB       '*   *',0
        MOV      A,#0C6H
        ACALL    Command
        MOV      A,Hari
        PUSH     ACC
        LCALL    W_Day
        POP      ACC
        JNB      T_Set,$
D1:     PUSH     ACC
        MOV      A,#0C6H
        ACALL    Command
        POP      ACC
KSDAY:  JNB      NAIK,Inc_Day
        JNB      TURUN,Dec_Day
        JNB      T_Set,DoneDay
        SJMP     KSDAY
Inc_Day:NOP
        INC      A
 CJNE     A,#08H,SDay
 MOV      A,#01H
SDay:   PUSH     ACC
        LCALL    W_Day
        POP      ACC
 JNB      NAIK,$
 JNB      TURUN,$
 SJMP     D1
Dec_Day:NOP
        DEC      A
 CJNE     A,#00H,SDay
 MOV      A,#07H
 SJMP     SDay
DoneDay:JNB      T_Set,$
        MOV      Hari,A
;--------------------------------------------------------------
        ;mengatur nilai tanggal
        CLR_LCD
        MOV      A,#83H
        D_Str
        DB       'Set Date:',0
        MOV      A,#0C7H
        ACALL    Command
        MOV      A,Tanggal
        MOV      R7,A
        ACALL    Disp_BCD
        JNB      T_Set,$
DA1:    PUSH     ACC
        MOV      A,#0C7H
        ACALL    Command
        POP      ACC
KSDAT:  JNB      NAIK,Inc_DAT
        JNB      TURUN,Dec_DAT
        JNB      T_Set,DoneDAT
        SJMP     KSDAT
Inc_DAT:NOP
        ACALL    BCD_2_Hex
        INC      A
 CJNE     A,#20H,SDAT
 MOV      A,#01H
SDAT:   ACALL    Hex_2_BCD
 ACALL    Disp_BCD
 JNB      NAIK,$
 JNB      TURUN,$
 SJMP     DA1
Dec_DAT:NOP
        ACALL    BCD_2_Hex
        DEC      A
 CJNE     A,#00H,SDAT
 MOV      A,#1FH
 SJMP     SDAT
DoneDAT:JNB      T_Set,$
        MOV      Tanggal,R7
;--------------------------------------------------------------
        ;mengatur nilai bulan
        CLR_LCD
        MOV      A,#83H
        D_Str
        DB       'Set Month:',0
        MOV      A,#0C7H
        ACALL    Command
        MOV      A,Bulan
        MOV      R7,A
        ACALL    Disp_BCD
        JNB      T_Set,$
MM1:    PUSH     ACC
        MOV      A,#0C7H
        ACALL    Command
        POP      ACC
KSMON:  JNB      NAIK,Inc_MON
        JNB      TURUN,Dec_MON
        JNB      T_Set,DoneMON
        SJMP     KSMON
Inc_MON:NOP
        ACALL    BCD_2_Hex
        INC      A
 CJNE     A,#0DH,SMON
 MOV      A,#01H
SMON:   ACALL    Hex_2_BCD
 ACALL    Disp_BCD
 JNB      NAIK,$
 JNB      TURUN,$
 SJMP     MM1
Dec_MON:NOP
        ACALL    BCD_2_Hex
        DEC      A
 CJNE     A,#00H,SMON
 MOV      A,#0CH
 SJMP     SMON
DoneMON:JNB      T_Set,$
        MOV      Bulan,R7
;--------------------------------------------------------------
        ;mengatur nilai tahun
        CLR_LCD
        MOV      A,#83H
        D_Str
        DB       'Set Year:',0
        MOV      A,#0C6H
        D_Str
        DB       '20',0
        MOV      A,#0C8H
        ACALL    Command
        MOV      A,Tahun
        MOV      R7,A
        ACALL    Disp_BCD
        JNB      T_Set,$
YY1:    PUSH     ACC
        MOV      A,#0C8H
        ACALL    Command
        POP      ACC
KSYY:   JNB      NAIK,Inc_YY
        JNB      TURUN,Dec_YY
        JNB      T_Set,DoneYY
        SJMP     KSYY
Inc_YY: NOP
        ACALL    BCD_2_Hex
        INC      A
 CJNE     A,#64H,SYY
 MOV      A,#00H
SYY:    ACALL    Hex_2_BCD
 ACALL    Disp_BCD
 JNB      NAIK,$
 JNB      TURUN,$
 SJMP     YY1
Dec_YY: NOP
        ACALL    BCD_2_Hex
        DEC      A
 CJNE     A,#00H-1,SYY
 MOV      A,#63H
 SJMP     SYY
DoneYY: JNB      T_Set,$
        MOV      Tahun,R7
        MOV      Detik,#00H
        ACALL    RTC_Reset
        ACALL    Done
        ACALL    Disp_C
        ACALL    AL_Flag
        LJMP     Main
;--------------------------------------------------------------
;menampilkan kata done saat user selesai memberikan perintah dengan tombol
Done:
        CLR_LCD
        MOV      A,#86H
        D_Str
        DB       'Done!',0
        ACALL    Delay
        RET
;--------------------------------------------------------------
;memberikan delay waktu
Delay:  MOV      R2,#0FFH
        MOV      R3,#14H
LP3:    MOV      R2,#0FFH
LP2:    MOV      R5,#0FFH
LP1:    DJNZ     R5,LP1
        DJNZ     R2,LP2
        DJNZ     R3,LP3
        RET
;--------------------------------------------------------------
;set fungsi dari alarm
AH:     CLR_LCD
        MOV      A,#83H
        D_Str
        DB       'Set Hours:',0
        MOV      A,#0C7H
        ACALL    Command
        MOV      A,AL_Jam
        MOV      R7,A
        ACALL    Disp_BCD
ALH1:   PUSH     ACC
        MOV      A,#0C7H
        ACALL    Command
        POP      ACC
ALH2:   JNB      NAIK,Inc_AL_Hour
        JNB      TURUN,Dec_AL_Hour
        JNB      A_Set,DoneALH
        SJMP     ALH2
Inc_AL_Hour:
        NOP
        ACALL    BCD_2_Hex
        INC      A
 CJNE     A,#18H,Z_AL_H
 MOV      A,#00H
Z_AL_H: ACALL    Hex_2_BCD
 ACALL    Disp_BCD
 JNB      NAIK,$
 JNB      TURUN,$
 SJMP     ALH1
Dec_AL_Hour:
        NOP
        ACALL    BCD_2_Hex
        DEC      A
 CJNE     A,#00H-1,Z_AL_H
 MOV      A,#17H
 SJMP     Z_AL_H
DoneALH:JNB      A_Set,$
        MOV      AL_Jam,R7
        CLR_LCD
        MOV      A,#82H
        D_Str
        DB       'Set Minutes:',0
        MOV      A,#0C7H
        ACALL    Command
        MOV      A,AL_Min
        MOV      R7,A
        ACALL    Disp_BCD
        JNB      A_Set,$
ALM1:   PUSH     ACC
        MOV      A,#0C7H
        ACALL    Command
        POP      ACC
ALM2:   JNB      NAIK,Inc_AL_Min
        JNB      TURUN,Dec_AL_Min
        JNB      A_Set,DoneAL_Min
        SJMP     ALM2
Inc_AL_Min:
        NOP
        ACALL    BCD_2_Hex
        INC      A
 CJNE     A,#3CH,SAL_Min
 MOV      A,#00H
SAL_Min:ACALL    Hex_2_BCD
 ACALL    Disp_BCD
 JNB      NAIK,$
 JNB      TURUN,$
 SJMP     ALM1
Dec_AL_Min:
        NOP
        ACALL    BCD_2_Hex
        DEC      A
 CJNE     A,#00H-1,SAL_Min
 MOV      A,#3BH
 SJMP     SAL_Min
DoneAL_Min:
        JNB      A_Set,$
        MOV      AL_Min,R7
        SETB     AL_Logo
        ACALL    ALT_Done
        ACALL    Done
        ACALL    AL_Flag
        LJMP     Main
;--------------------------------------------------------------
;difungsikan tampilan alarm pada LCD
AL_Flag:JNB      AL_Logo,WE2
        MOV      A,#0C2H
        ACALL    Command
        MOV      A,#01H
        ACALL    Data_Disp
WE2:    RET
;--------------------------------------------------------------
;fungsi sambungan pada LCD
ALT_Done:
        MOV      R1,#29H
        MOV      R3,#07H
        ACALL    I2C_Start
        MOV      A,#SAW
        ACALL    I2C_Write
        MOV      A,#08H
        ACALL    I2C_Write
LOOP4:  MOV      A,@R1
        ACALL    I2C_Write
        INC      R1
        DJNZ     R3,LOOP4
        ACALL    I2C_Stop
        RET
;--------------------------------------------------------------
;inisialisasi LCD
LCD_Initial:
        MOV      A,#38H
 ACALL    Command
 MOV      A,#0CH
 ACALL    Command
 CLR_LCD
 MOV      A,#06H
 ACALL    Command
 RET
;--------------------------------------------------------------
; fungsi tampilan pada LCD full
Display:MOV      R1,#21H
 MOV      A,#0CAH
 ACALL    Command
 MOV      A,@R1
 ACALL    Disp_BCD
;
        INC      R1
 MOV      A,#0C7H
 ACALL    Command
 MOV      A,@R1
 ACALL    Disp_BCD
;
        INC      R1
 MOV      A,#0C4H
 ACALL    Command
 MOV      A,@R1
 ACALL    Disp_BCD
;
        INC      R1
 MOV      A,#80H
 ACALL    Command
 MOV      A,@R1
 LCALL    W_Day
;
        INC      R1
 MOV      A,#86H
 ACALL    Command
 MOV      A,@R1
 ACALL    Disp_BCD
;
        INC      R1
 MOV      A,#89H
 ACALL    Command
 MOV      A,@R1
 ACALL    Disp_BCD
;
        INC      R1
 MOV      A,#8EH
 ACALL    Command
 MOV      A,@R1
 ACALL    Disp_BCD
        RET
;--------------------------------------------------------------
Hex_2_BCD:
        MOV      B,#00001010B
 DIV      AB
 MOV      R3,B
 MOV      B,#00010000B
 MUL      AB
 ADD      A,R3
 MOV      R7,A
 RET
;--------------------------------------------------------------
BCD_2_Hex:
        MOV      B,#00010000B
 DIV      AB
 MOV      R3,B
 MOV      B,#00001010B
 MUL      AB
 ADD      A,R3
 RET
;--------------------------------------------------------------
Disp_BCD:
 PUSH     ACC
 MOV      R5,A
 ANL      A,#11110000B
 SWAP     A
 MOV      DPTR,#Ascii_Code
 MOVC     A,@A+DPTR
 ACALL    Data_Disp
 MOV      A,R5
 ANL      A,#00001111B
 MOVC     A,@A+DPTR
 ACALL    Data_Disp
 POP      ACC
 RET
;--------------------------------------------------------------
Disp_C: MOV      A,#80H
        D_Str
        DB       '        /  /20  ',0
        MOV      A,#0C0H
        ACALL    Command
        MOV      A,#'*'
        ACALL    Data_Disp
        MOV      A,#0C6H
        ACALL    Command
        MOV      A,#':'
        ACALL    Data_Disp
        MOV      A,#0C9H
        ACALL    Command
        MOV      A,#':'
        ACALL    Data_Disp
        MOV      A,#0CFH
        ACALL    Command
        MOV      A,#'*'
        ACALL    Data_Disp
        RET
;--------------------------------------------------------------
CGR: MOV      R4,#08H
        MOV      R5,#40H
        MOV      DPTR,#Clock
        ACALL    WRI
        MOV      R4,#08H
        MOV      R5,#48H
        MOV      DPTR,#Bell
        ACALL    WRI
        RET
;--------------------------------------------------------------
WRI:    CLR      A
        ACALL    Get_Ready
        MOV      LCD,R5
        CLR      RS
        CLR      RW
        SETB     EN
        CLR      EN
        INC      R5
        MOVC     A,@A+DPTR
        ACALL    Data_Disp
        INC      DPTR
        DJNZ     R4,WRI
        RET
;---------------------------------------;
; ************PERINTAH I2C************* ;
;---------------------------------------;
I2C_Start:
 SETB     SCL
 SETB     SDA
 I2C_Delay
 CLR      SDA
 I2C_Delay
 CLR      SCL
 RET
;--------------------------------------------------------------
I2C_Stop:
 CLR      SDA
 SETB     SCL
 I2C_Delay
 SETB     SDA
 RET
;--------------------------------------------------------------
I2C_Write:
 MOV      BitCnt,#08H
I2C_Write_Loop:
 RLC      A
 MOV      SDA,C
 NOP
 SCLHigh
 CLR      SCL
 DJNZ     BitCnt,I2C_Write_Loop
 NOP
 SETB     SDA
 NOP
 SETB     SCL
 I2C_Delay
 MOV      C,SDA
 CLR      SCL
 NOP
 JNC      Label
 ACALL    I2C_Stop
 ACALL    I2C_Start
 SJMP     I2C_Write
Label: RET
;--------------------------------------------------------------
I2C_Read_Dummy:
 SETB     SDA
 CLR      A
 MOV      BitCnt,#08H
I2C_Read_Loop:
 CLR      SCL
 I2C_Delay
 SCLHigh
 MOV      C,SDA
 RLC      A
 DJNZ     BitCnt,I2C_Read_Loop
 CLR      SCL
 MOV      @R0,A
 INC      R0
 RET
;--------------------------------------------------------------
I2C_Ack_Write:
 CLR      SDA
 NOP
 SETB     SCL
 I2C_Delay
 CLR      SCL
 SETB     SDA
 I2C_Delay
 RET
;--------------------------------------------------------------
I2C_Nack_Write:
 SETB     SDA
 NOP
 SETB     SCL
 I2C_Delay
 CLR      SCL
 I2C_Delay
 RET
;--------------------------------------------------------------
I2C_Read:
 ACALL    I2C_Read_Dummy
 ACALL    I2C_Ack_Write
 RET
;--------------------------------------------------------------
I2C_Read_Last:
 ACALL    I2C_Read_Dummy
 ACALL    I2C_Nack_Write
 RET
;--------------------------------------;
; ************PERINTAH LCD*************;
;--------------------------------------;
Command:ACALL    Get_Ready
        MOV      LCD,A
        CLR      RS
        CLR      RW
        SETB     EN
        CLR      EN
        RET
;--------------------------------------------------------------
Data_Disp:
        ACALL    Get_Ready
        MOV      LCD,A
        SETB     RS
        CLR      RW
        SETB     EN
        CLR      EN
        RET
;--------------------------------------------------------------
Get_Ready:
        SETB     Sibuk
        CLR      RS
        SETB     RW
Back:   CLR      EN
        SETB     EN
        JB       Sibuk,BACK
        RET
;--------------------------------------------------------------
Disp_Char:
        POP      DPH
        POP      DPL
Print_Text:
        CLR      A
        MOVC     A,@A+DPTR
        CJNE     A,#00H,Loop2
        SJMP     Return
Loop2:  MOV      R4, A
        LCALL    Data_Disp
        INC      DPTR
        LJMP     Print_Text
Return: MOV      A,#01H
        JMP      @A+DPTR
;--------------------------------------------------------------
;fungsi tampilan pada LCD terkait waktu dan tanggal
W_Day:  CJNE     A,#01H,MON
        LCALL    Disp_Char
        DB       'Sun',0
        RET
MON:    CJNE     A,#02H,TUE
        LCALL    Disp_Char
        DB       'Mon',0
        RET
TUE:    CJNE     A,#03H,WED
        LCALL    Disp_Char
        DB       'Tue',0
        RET
WED:    CJNE     A,#04H,THU
        LCALL    Disp_Char
        DB       'Wed',0
        RET
THU:    CJNE     A,#05H,FRI
        LCALL    Disp_Char
        DB       'Thu',0
        RET
FRI:    CJNE     A,#06H,SAT
        LCALL    Disp_Char
        DB       'Fri',0
        RET
SAT:    CJNE     A,#07H,WHAT
        LCALL    Disp_Char
        DB       'Sat',0
        RET
WHAT:   RET
;--------------------------------------------------------------
Ascii_Code:
        DB       30H,31H,32H,33H,34H,35H,36H,37H,38H,39H
;--------------------------------------------------------------
;Icons
Clock:  DB       00H,0EH,15H,17H,11H,0EH,00H,00H
Bell:   DB       04H,0EH,0EH,0EH,1FH,00H,04H,00H
;--------------------------------------------------------------
 END


3.8 Cara Kerja
Jam Digital dengan Alarm Berbasis Mikrokntroler AT89S51 akan bekerja saat mendapatkan sumber tegangan 5 Volt. Sumber ini dapat berasal dari baterai ataupun sumber Dc yang lain. Sebagai masukan waktunya, alat ini menggunakan RTC 3231. Dan sebagai masukan Logic, alat ini menggunakan saklar tombol tekan. Kemudian luaran untuk penampil waktu dan tanggal menggunakan Penampil Kristal Cair (LCD) dan sebagai luaran alarm menggunakan bel atau buzzer.
Untuk pengoperasiannya, saat pertama kali menyala jam digital akan menampilkan waktu 00.00,  Senin, 01 Januari 2000 (setting dari RTC). Kemudian waktu dapat kita ubah menjadi waktu yang aktual (sekarang dan nyata) dengan menekan tombol time set. Setelah itu akan muncul tampilan set jam, set menit, set hari, set tanggal, set bulan, dan set tahun dan untuk tiap tiap bagian dapat di set naik atau turun dengan menggunakan tombol increment dan decrement. Hasil akhirnya adalah jam digital akan berjalan sesuai dengan jam yang aktual dan akan tetap tersimpan meskipun rangkaian dimatikan dengan syarat Baterai pada RTC harus dipasang.
Kemudian untuk fungsi alarm, kita dapat mengaktifkannya dengan menekan tombol alarm set yang kemudian akan memunculkan menu set jam dan set menit. Untuk naik turun tiap bagian juga dapat di set melalui tombol increment dan decrement. Setelah di set di waktu yang ditentukan, ketika jam digital menunjukkan waktu yang tekah di set, buzzer akan menyala selama satu menit dan dapat kita matikan sebelum satu menit dengan menekan tombol alarm set lagi. Setelah itu tampilan waktu dari Jam Digital waktu akan berjalan normal seperti biasanya.


IV. PENGUJIAN ALAT

Dalam Pembuatan Jam Digital dengan Alarm Berbasis Mikrokontroler AT89S51 ini, perlu diuji untuk kesesuaian alat dengan prinsip kerjanya. Adapun langkah-langkah cara pengujiannya adalah sebagai berikut.
  1. Mengunggah Program ke Alat yang dibuat, apakah sudah sesuai dengan fungsi logic yang telah dibuat atau tidak.
  2. Menguji alat, apakah sudah sesuai dengan cara kerjanya atau tidak.

V. KESIMPULAN

Dari hasil pengujian dalam pembuatan Jam Digital dengan Alarm Berbasis Mikrokontroler AT89S51 ini dapat diambil kesimpulan sebagai berikut.
  1. Program yang telah di masukkan ke Mikrokontroler AT89S51 telah bekerja dengan baik dan sesuai Logic yang telah ditentukan
  2. Jam Digital dengan Alarm Berbasis Mikrokontroler AT89S51  ini mampu bekerja sesuai dengan fungsinya. Mulai dari pengaturan waktu, tampilan, hingga fungsi alarm mampu bekerja dengan baik.
  3. Kekuatan bahan yang dipilih juga mempengaruhi kinerja dari alat ini
  4. Ketepatan waktu dari Real Time Clock tergantung dari tipe dan kualitas yang dipilih.

DAFTAR PUSTAKA

Suparno. 2012. "Jam Digital dengan Alarm", http://suparno-mikrokontroler.blogspot.com /2012/03/jam-digital-dengan-alarm.html, diakses pada 03 Januari 2022 pukul 21.00.


LAMPIRAN

1. Power Point                    (Klik Disini)
2. Program Mide-51        (Klik Disini)
3. Simulasi Proteus          (Klik Disini)
4. Demo Alat                     (Klik Disini)
5. Video YouTube              (Klik Disini)



BIODATA PENULIS

1. Adita Ikbar Musyaffa'


Aditya Ikbar Musyaffa'. Penulis dilahirkan di Semarang, 10 Agustus pada Tahun 2002. Penulis telah menempuh pendidikan formal di SDN Randugunting, SMPN 2 Ambarawa, dan SMKN 2 Salatiga. Pada tahun 2020 penulis mengikuti seleksi mahasiswa baru Diploma (D3) di kampus Politeknik Negeri Semarang dengan Program Studi D3 Teknik Elektronika, Jurusan Teknik Elektro. Penulis terdaftar dengan NIM 3.32.20.0.03 . Apabila terdapat kritik, saran dan pertanyaan mengenai penelitian ini, bisa menghubungi melalui E-mail aditya.ikbar100802@gmail.com

2. Amri Puji Hidayatullah Muslikhin




Amri Puji Hidayatul Muslikhin. Penulis dilahirkan di Boyolali, 08 Maret pada Tahun 2002. Penulis telah menempuh pendidikan formal di SDN Gembor 4, SMP Negeri 2 Pasarkemis, dan SMK Penerbangan Dirghantara. Pada tahun 2020 penulis mengikuti seleksi mahasiswa baru Diploma (D3) di kampus Politeknik Negeri Semarang dengan Program Studi D3 Teknik Elektronika, Jurusan Teknik Elektro. Penulis terdaftar dengan NIM 3.32.20.0.04 . Apabila terdapat kritik, saran dan pertanyaan mengenai penelitian ini, bisa menghibungi melalui E-mail amrip2205@gmail.com

3. Madhani Rizki Mura


Madhani Rizki Mura. Penulis dilahirkan di Bojonegoro, 19 Oktober pada Tahun 2000. Penulis telah menempuh pendidikan formal di SDN 2 Panjunan, SMP Negeri 1 Kalitidu, dan SMK Negeri 2 Bojonegoro. Pada tahun 2020 penulis mengikuti seleksi mahasiswa baru Diploma (D3) di kampus Politeknik Negeri Semarang dengan Program Studi D3 Teknik Elektronika, Jurusan Teknik Elektro. Penulis terdaftar dengan NIM 3.32.20.0.15 . Apabila terdapat kritik, saran dan pertanyaan mengenai penelitian ini, bisa menghibungi melalui E-mail madhani.rizki@gmail.com

4. Mahadita Pratiwi


Mahadita Pratiwi. Penulis dilahirkan di Pematangsiantar, 27 Maret pada Tahun 2002. Penulis telah menempuh pendidikan formal di SDN 095551 Siantar, SMP Negeri 1 Pematangsiantar, dan SMA Swasta Sultan Agung Pematangsiantar. Pada tahun 2020 penulis mengikuti seleksi mahasiswa baru Diploma (D3) di kampus Politeknik Negeri Semarang dengan Program Studi D3 Teknik Elektronika, Jurusan Teknik Elektro. Penulis terdaftar dengan NIM 3.32.20.0.16 . Apabila terdapat kritik, saran dan pertanyaan mengenai penelitian ini, bisa menghibungi melalui E-mail mahadita27@gmail.com

5. Zakiya Fathan Mubina


Zakiya Fathan Mubina'. Penulis dilahirkan di Bekasi, 12 Juni Pada 2001. Penulis telah menempuh pendidikan formal di SDIT Insan Taqwa, SMPIT Insan Taqwa, dan SMAN 1 Cikarang Selatan. Pada tahun 2020 penulis mengikuti seleksi mahasiswa baru Diploma (D3) di kampus Politeknik Negeri Semarang dengan Program Studi D3 Teknik Elektronika, Jurusan Teknik Elektro. Penulis terdaftar dengan NIM 3.32.20.0.26 . Apabila terdapat kritik, saran dan pertanyaan mengenai penelitian ini, bisa menghubungi melalui E-mail zakiyamubina12@gmail.com


Komentar