DIGITAL STOPWATCH SIMULATION MENGGUNAKAN PROTEUS BERBASIS MIKROKONTROLLER ATMEGA89C51

DIGITAL STOPWATCH SIMULATION USING AT89C51 

Aziza Neysa Fareena Sodikin1, Cahya Putra Rusdianto2, Hazza Yodha Maheswara3, Muhtadi Adi Nugroho4, Samuel BETA5.

Email : 1azizaneysafareenasodikin@gmail.com , 2hazayuda@gmail.com ,

3cahyaputra250106@gmail.com , 4muhtadiadinug@gmail.com , 5sambetak2@gmail.com 

Jurusan Teknik Elektro, Program Studi D3 Teknik Elektronika

Politeknik Negeri Semarang

Jln. Prof. H. Sudarto, S.H., Tembalang, Semarang, Jawa Tengah, Indonesia. 50275.

Telp. (024)7473417, Website : www.polines.ac.id , email : mailto:sekretariat@polines.ac.id




Abstrak Stopwatch digital merupakan alat ukur waktu yang berfungsi untuk menghitung selang waktu secara tepat dan akurat. Pada proyek ini dirancang dan direalisasikan sebuah stopwatch digital berbasis mikrokontroler AT89C51 dengan tampilan 7-segment sebagai penunjuk waktu. Mikrokontroler AT89C51 digunakan sebagai pengendali utama dalam proses perhitungan waktu, pengolahan input tombol, serta pengendalian tampilan 7-segment. Sistem dilengkapi dengan tombol start, stop, dan reset untuk mengatur jalannya stopwatch. Waktu dihitung dalam satuan detik dan ditampilkan secara real-time menggunakan metode pengendalian tampilan 7-segment. Hasil pengujian menunjukkan bahwa stopwatch digital dapat bekerja dengan baik, stabil, dan sesuai dengan fungsi yang dirancang. Perancangan ini diharapkan dapat menjadi sarana pembelajaran dalam memahami konsep mikrokontroler AT89C51, sistem digital, dan pengukuran waktu.


I. PENDAHULUAN

1.1  LATAR BELAKANG

Perkembangan teknologi digital mendorong penggunaan sistem elektronik yang semakin efisien dan akurat, salah satunya dalam pengukuran waktu. Stopwatch digital merupakan alat ukur waktu yang banyak digunakan dalam kegiatan pendidikan, olahraga, dan praktikum laboratorium karena memiliki tingkat ketelitian yang lebih baik dibandingkan stopwatch analog. Penggunaan mikrokontroler AT89C51 sebagai pengendali utama memungkinkan perancangan stopwatch digital yang sederhana, ekonomis, dan mudah dipahami. Selain itu, penggunaan tampilan 7-segment memberikan kemudahan dalam menampilkan hasil pengukuran waktu secara jelas. Oleh karena itu, perancangan stopwatch digital berbasis AT89C51 dan 7-segment diharapkan dapat menjadi media pembelajaran untuk memahami konsep mikrokontroler, sistem digital, dan pengukuran waktu.

 

1.2  RUMUSAN MASALAH

Dari latar belakang tersebut diperoleh rumusan masalah sebagai berikut :

1. Bagaimana merancang stopwatch digital menggunakan mikrokontroler AT89C51?

2. Bagaimana cara menampilkan hasil pengukuran waktu pada 7-segment?

3. Bagaimana sistem tombol start, stop, dan reset bekerja pada stopwatch digital?

4. Bagaimana kinerja stopwatch digital dalam menampilkan waktu secara akurat dan stabil?


1.3 TUJUAN

Tujuan dari pembuatan sistem monitoring ini adalah sebaga berikut :

1.     Merancang dan merealisasikan stopwatch digital berbasis mikrokontroler AT89C51.

2.     Mengimplementasikan tampilan 7-segment sebagai penunjuk waktu.

3.     Mempelajari cara kerja pengolahan waktu dan pengendalian input tombol menggunakan AT89C51.

4.     Menguji kinerja stopwatch digital agar dapat bekerja dengan baik dan sesuai dengan perancangan.

 

II. TINJAUAN PUSTAKA

        ATMEGA89C51

AT89C51 merupakan mikrokontroler 8-bit dari keluarga MCS-51 yang diproduksi oleh Atmel. Mikrokontroler ini banyak digunakan pada sistem kendali sederhana karena memiliki arsitektur yang stabil dan mudah diprogram. Dalam perancangan stopwatch digital, AT89C51 berfungsi sebagai pengendali utama untuk proses penghitungan waktu, pembacaan input push button, serta pengendalian tampilan seven segment.

        Spesifikasi AT89C51:

               Arsitektur CPU : 8-bit

               Memori Flash : 4 KB (programmable)

               RAM internal : 128 byte

               Tegangan kerja : 4,0 V – 5,5 V

               Jumlah pin : 40 pin

               Port I/O : 4 port (Port 0, Port 1, Port 2, Port 3) masing-masing 8 bit

               Timer/Counter : 2 buah (Timer 0 dan Timer 1)

               Sistem clock : Menggunakan osilator eksternal (kristal)

               Interupsi : 5 sumber interupsi

               Mode hemat daya : Idle mode dan Power-down mode

 

  

        

Gambar 2.1 AT89C51

 

 

        Seven Segment

Seven segment merupakan komponen display digital yang terdiri dari tujuh buah LED untuk menampilkan angka 0 sampai 9. Dalam perancangan ini, seven segment digunakan pada simulasi Proteus sebagai penampil hasil perhitungan waktu stopwatch digital sehingga dapat diamati secara visual tanpa menggunakan perangkat keras secara langsung.

              

                                                                     
Gambar 2.2 Seven Segment

        Battery

Baterai adalah sumber tegangan DC yang digunakan untuk memberikan catu daya pada rangkaian elektronik. Dalam sistem stopwatch digital, baterai berfungsi sebagai sumber energi utama agar mikrokontroler dan komponen pendukung dapat bekerja dengan baik dan stabil.

        

Gambar 2.3 Battery

        Kapasitor

Kapasitor merupakan komponen pasif yang digunakan untuk menyimpan muatan listrik sementara. Pada simulasi Proteus, kapasitor digunakan untuk menstabilkan tegangan dan mendukung kerja osilator sehingga sistem stopwatch digital dapat berjalan dengan stabil.

 

        .   

Gambar 2.4 Kapasitor

        Oscilator

Osilator berfungsi sebagai pembangkit sinyal clock bagi mikrokontroler. Dalam simulasi Proteus, osilator direpresentasikan menggunakan kristal virtual untuk menghasilkan frekuensi kerja yang sesuai agar proses perhitungan waktu dapat berjalan dengan akurat.

 

Gambar 2.5 Oscilator

 

        Resistor

Resistor digunakan untuk membatasi arus listrik dan melindungi komponen. Pada simulasi Proteus, resistor digunakan sebagai pembatas arus LED seven segment serta sebagai pull-up atau pull-down pada push button.

                    
                   

Gambar 2.6 Resistor

        Push Button

Push button merupakan saklar tekan yang digunakan sebagai input. Dalam simulasi Proteus, push button berfungsi sebagai input virtual untuk menjalankan perintah start, stop, dan reset pada stopwatch digital.

 


Gambar 2.7 Push Button

 

 

                                               III. PERANCANGAN ALAT


3.1  PERANGKAT LUNAK DAN RANGKAIAN ELEKTRONIKA

        Komponen yang di gunakan dalam pembuatan digital stopwatch ini diantaranya: 

1.     Mikrokontroler ATMEGA89C51

2.     Seven segmen

3.     Battery

4.     Kapasitor

5.     Osciliator

6.     Resistor

7.     Push Button

3.2 DIAGRAM BLOK

       

3.3 DIAGRAM ALIR

 

3.4 DIAGRAM SKEMATIK

 

  

3.5 PROGRAM


;Pemrogram      : Kelompok EK-2A/6

;1. 06-Aziza Neysa Fareena Sodikin     NIM:3.32.24.0.06

;2. 07-Cahya Putra Rusdianto               NIM:3.32.24.0.07

;3. 13-Hazza Yodha Maheswara           NIM:3.32.24.0.13

;4. 18-Muhtadi Adi Nugroho                NIM:3.32.24.0.19

Tanggal Pembuatan:                 Selasa, 09 Desember 2025

; ==========================================================

; STOPWATCH MM:SS:MS (6 digit) for AT89C51

; - 6 digit multiplex (P0 -> segments, P2 -> digit enables, active LOW)

; - Buttons: Start = P3.2 (active LOW), Stop = P3.3, Reset = P3.4

; - Timer0 ~10 ms tick (uses this as 1 centisecond unit)

; - EdSim51-compatible syntax (no DS, use EQU, MOVC with DPTR)

; ==========================================================

 

            ORG 0000h

            LJMP START

 

            ORG 000Bh

            LJMP T0_ISR

 

; ==========================================================

; RAM VARIABLES (use EQU addresses in internal RAM)

; ==========================================================

MM_TEN      EQU 30h    ; menit puluhan

MM_ONE      EQU 31h    ; menit satuan

SS_TEN      EQU 32h    ; detik puluhan

SS_ONE      EQU 33h    ; detik satuan

MS_TEN      EQU 34h    ; milidetik puluhan (centiseconds tens)

MS_ONE      EQU 35h    ; milidetik satuan (centiseconds ones)

 

RUNNING     EQU 36h    ; 0 = stop, 1 = run

MUX         EQU 37h    ; 0..5 multiplex index

DEB_S       EQU 38h    ; debounce start

DEB_H       EQU 39h    ; debounce stop (hold)

DEB_R       EQU 3Ah    ; debounce reset

 

; ==========================================================

; 7-SEGMENT TABLE (COMMON CATHODE, segments active HIGH)

; typical encoding: 0x3F = '0', 0x06 = '1', etc.

; placed in code memory

; ==========================================================

            ORG 100h

SEG_TABLE:

    DB 3Fh,06h,5Bh,4Fh,66h,6Dh,7Dh,07h,7Fh,6Fh

 

; ==========================================================

; START: initialization

; ==========================================================

            ORG 200h

START:

            MOV SP,#7Fh

 

            ; clear variables

            MOV MM_TEN,#00h

            MOV MM_ONE,#00h

            MOV SS_TEN,#00h

            MOV SS_ONE,#00h

            MOV MS_TEN,#00h

            MOV MS_ONE,#00h

 

            MOV RUNNING,#00h

            MOV MUX,#00h

            MOV DEB_S,#00h

            MOV DEB_H,#00h

            MOV DEB_R,#00h

 

            ; ports: segments on P0, digit enables on P2 (active LOW)

            MOV P0,#0FFh

            MOV P2,#0FFh

 

            ; setup timer0 ~10 ms (12 MHz crystal)

            MOV TMOD,#01h

            MOV TH0,#0D8h    ; values chosen approximate 10 ms

            MOV TL0,#0F0h

            SETB TR0

            SETB ET0

            SETB EA

 

            ; set DPTR once to segment table

            MOV DPTR,#SEG_TABLE

 

MAIN_LOOP:

            SJMP MAIN_LOOP

 

; ==========================================================

; TIMER0 ISR — executed every ~10 ms

; Responsibilities each tick:

;  - reload timer

;  - multiplex one digit

;  - debounce buttons

;  - if RUNNING, increment centiseconds (MS_ONE/MS_TEN) and handle rollovers

; ==========================================================

T0_ISR:

            PUSH ACC

            PUSH PSW

 

            MOV TH0,#0D8h

            MOV TL0,#0F0h

 

; ----------------- multiplex 6 digits ---------------------

            MOV A,MUX

            CJNE A,#00, MUX1

; digit 0: MM tens  (leftmost)

MUX0:

            MOV P2,#0FFh

            CLR P2.5         ; enable digit 0 (use bit mapping P2.5..P2.0)

            MOV A,MM_TEN

            ACALL DISP_CHAR

            MOV MUX,#01h

            SJMP BTN_DEB

MUX1:

            CJNE A,#01, MUX2

; digit 1: MM ones

            MOV P2,#0FFh

            CLR P2.4

            MOV A,MM_ONE

            ACALL DISP_CHAR

            MOV MUX,#02h

            SJMP BTN_DEB

MUX2:

            CJNE A,#02, MUX3

; digit 2: SS tens

            MOV P2,#0FFh

            CLR P2.3

            MOV A,SS_TEN

            ACALL DISP_CHAR

            MOV MUX,#03h

            SJMP BTN_DEB

MUX3:

            CJNE A,#03, MUX4

; digit 3: SS ones

            MOV P2,#0FFh

            CLR P2.2

            MOV A,SS_ONE

            ACALL DISP_CHAR

            MOV MUX,#04h

            SJMP BTN_DEB

MUX4:

            CJNE A,#04, MUX5

; digit 4: MS tens

            MOV P2,#0FFh

            CLR P2.1

            MOV A,MS_TEN

            ACALL DISP_CHAR

            MOV MUX,#05h

            SJMP BTN_DEB

MUX5:

; digit 5: MS ones (rightmost)

            MOV P2,#0FFh

            CLR P2.0

            MOV A,MS_ONE

            ACALL DISP_CHAR

            MOV MUX,#00h

 

; ----------------- button debouncing ---------------------

BTN_DEB:

; START button (P3.2)  active LOW

            JB  P3.2, SREL        ; if P3.2 = 1 -> not pressed

            INC DEB_S

            MOV A,DEB_S

            CJNE A,#03, SREL2

            MOV RUNNING,#01

SREL2:      SJMP HOLD_CHECK

SREL:       MOV DEB_S,#00

 

; STOP/HOLD button (P3.3) active LOW -> stop when pressed

HOLD_CHECK:

            JB P3.3, HREL

            INC DEB_H

            MOV A,DEB_H

            CJNE A,#03, HREL2

            MOV RUNNING,#00

HREL2:      SJMP RESET_CHECK

HREL:       MOV DEB_H,#00

 

; RESET button (P3.4) active LOW

RESET_CHECK:

            JB P3.4, RREL

            INC DEB_R

            MOV A,DEB_R

            CJNE A,#03, RREL2

 

            ; reset all counters

            MOV MM_TEN,#00h

            MOV MM_ONE,#00h

            MOV SS_TEN,#00h

            MOV SS_ONE,#00h

            MOV MS_TEN,#00h

            MOV MS_ONE,#00h

            MOV RUNNING,#00

RREL2:      SJMP COUNTING

RREL:       MOV DEB_R,#00

 

; ----------------- counting logic -------------------------

COUNTING:

            MOV A,RUNNING

            JZ T0_DONE

 

            ; increment centiseconds (each ISR = 10 ms)

            INC MS_ONE

            MOV A,MS_ONE

            CJNE A,#0AH, T0_DONE    ; if < 10 -> done (we use 0..9 per one's place)

            MOV MS_ONE,#00h

            INC MS_TEN

            MOV A,MS_TEN

            CJNE A,#0AH, T0_DONE    ; tens 0..9 (00..99 centiseconds)

            MOV MS_TEN,#00h

 

            ; increment seconds

            INC SS_ONE

            MOV A,SS_ONE

            CJNE A,#0AH, T0_DONE

            MOV SS_ONE,#00h

            INC SS_TEN

            MOV A,SS_TEN

            CJNE A,#06H, T0_DONE    ; seconds tens 0..5

            MOV SS_TEN,#00h

 

            ; increment minutes

            INC MM_ONE

            MOV A,MM_ONE

            CJNE A,#0AH, T0_DONE

            MOV MM_ONE,#00h

            INC MM_TEN

            MOV A,MM_TEN

            CJNE A,#06H, T0_DONE    ; minutes tens 0..5

            MOV MM_TEN,#00h

 

T0_DONE:

            ; restore and return from interrupt

            POP PSW

            POP ACC

            RETI

 

; ==========================================================

; subroutine: DISP_CHAR

;   Input: A = digit value 0..9

;   Outputs segments on P0 (uses DPTR set to SEG_TABLE)

;   Note: digit enable must be set/cleared by caller (we did CLR P2.x)

; ==========================================================

DISP_CHAR:

            PUSH ACC

            MOV B,A

            MOV A,B

            MOVC A,@A+DPTR

            MOV P0,A

            ; small delay to allow visible multiplex (keep short)

            MOV R7,#50

DLY1:       DJNZ R7,DLY1

            POP ACC

            RET

 

END

 


3.6 CARA KERJA ALAT

Cara kerja stopwatch digital berbasis mikrokontroler AT89C51 pada simulasi Proteus diawali dengan pemberian catu daya virtual ke rangkaian. Setelah sistem aktif, mikrokontroler melakukan inisialisasi port input dan output, timer, serta tampilan seven segment.

Ketika push button start ditekan, mikrokontroler mulai menjalankan timer internal untuk menghitung waktu dalam satuan menit, detik, dan milisecond. Nilai waktu akan ditampilkan pada seven segment secara real-time dan terus bertambah.

Apabila push button stop ditekan, proses penghitungan waktu akan berhenti sementara, namun nilai waktu terakhir tetap tersimpan. Saat push button start ditekan kembali, stopwatch akan melanjutkan penghitungan dari nilai terakhir.

Ketika nilai waktu mencapai batas maksimum 59 menit 59 detik 99 milisecond, sistem akan secara otomatis melakukan reset, sehingga nilai waktu kembali ke 00:00:00 tanpa perlu menekan push button reset. Selain itu, tombol reset juga dapat digunakan untuk mengembalikan stopwatch ke kondisi awal secara manual.

Seluruh proses kerja alat ini dapat diamati melalui simulasi pada software Proteus tanpa menggunakan perangkat keras secara langsung.                              


3.7 VIDEO DEMO ALAT


 

IV. KESIMPULAN

Berdasarkan hasil perancangan dan simulasi stopwatch digital menggunakan mikrokontroler AT89C51 dengan tampilan seven segment pada software Proteus, dapat disimpulkan bahwa sistem stopwatch digital dapat bekerja sesuai dengan perancangan. Proses penghitungan waktu, pembacaan input push button, serta penampilan data waktu pada seven segment dapat berjalan dengan baik pada simulasi.

Simulasi Proteus mempermudah proses perancangan dan pengujian sistem tanpa harus menggunakan perangkat keras secara langsung. Selain itu, penggunaan AT89C51 sebagai pengendali utama terbukti mampu mengolah data waktu secara akurat berdasarkan sumber clock yang digunakan. Dengan demikian, simulasi stopwatch digital ini dapat dijadikan sebagai media pembelajaran untuk memahami konsep mikrokontroler, sistem digital, dan pengukuran waktu sebelum direalisasikan ke dalam bentuk perangkat keras sebenarnya.


DAFTAR PUSTAKA


Budiharto, W. 2018. Belajar Mikrokontroler AT89C51. Jakarta: PT Elex Media Komputindo.

Heryanto, M. A. dan Adi, W. 2017. Pemrograman Mikrokontroler 8051. Bandung: Informatika.

Putra, D. A. 2020. Simulasi Rangkaian Mikrokontroler Menggunakan Proteus. Yogyakarta: Andi Offset.

Saputra, R. dan Nugroho, B. A. 2020. “Perancangan Stopwatch Digital Berbasis Mikrokontroler 8051.” Jurnal Teknik Elektro, Vol. 12, No. 1, hal. 15–22.

Widodo, S. dan Kurniawan, D. 2021. “Perancangan dan Simulasi Stopwatch Digital Menggunakan Software Proteus.” Jurnal Teknologi dan Rekayasa, Vol. 9, No. 2, hal. 40–47.


LINK:

1. VIDEO PRESENTASI

2. PPT

3. PROGRAM

4. BIODATA PENULIS

 

 

 

 

 

 


Komentar

Postingan populer dari blog ini

AIR TEMPERATURE SWITCHING AND MONITORING SYSTEM DENGAN MENGGUNAKAN SENSOR LM35 BERBASIS ATMEGA 16

RANCANG BANGUN KALKULATOR DIGITAL OPERASI KALI DAN BAGI BERBASIS MIKROKONTROLER AT89C51

SISTEM LAMPU LALU LINTAS PERTIGAAN BERBASIS AT89s51 DENGAN SENSOR INFRAMERAH