Jam digital dengan AT89S51

Tulisan dibawah ini akan menjelaskan cara membuat jam digital dengan menggunakan mikrokontroler AT89S51 dengan bahasa ASM51. Digunakan keypad 4×4 sebagai input jam digital dan dengan outputnya ditampilkan dalam LCD.

Kata kunci: LCD, Jam Digital, AT89S51, keypad 4×4

  1. 1. Pendahuluan

Dalam praktikum kali ini praktikan akan membuat suatu aplikasi sederhana dari berbagai kompetensi yang telah dipelajari pada praktikum sismik sebelumnya. Praktikan memilih membuat suatu jam digital dengan input 4×4 keypad dan output LCD. Diharapkan setelah praktikum ini praktikan dapat mengaplikasikan ilmu yang telah dipelajari pada praktikum sebelumnya

  1. 2. Spesifikasi Minimum Aplikasi

  • Aplikasi menggunakan mikrokontroller AT89S51
  • keadaan awal tampilan pada LCD saat  program saat pertama kali dijalankan adalah 00:00:00
  • Untuk menampilkan kursor, digunakan 1 keypad
  • Untuk mengubah angka, digunakan 1 keypad yang akan menambahkan angka 1 demi satu.
  • Untuk memindahkan kursor, digunakan 1 keypad.
  • Untuk menghilangkan kursor, digunakan 1 buah keypad.
  • Untuk mereset tampilan LCD menjadi 00: 00:00, digunakan 1 buah keypad.

Berikut ini merupakan hardware rancangan jam digital yang dipakai:

Desain sismin dengan mikrokontroler AT89S51

perancangan keypad 4×4

Berikut ini merupakan program jam digital dengan ASM51:

$mod51

;built-in routine

;initlcd  equ 0740h

;commandlcd equ 07b0h

;writelcd equ 07d0h

;setddram equ 0850h

;command word

;displayclear  equ 01h

;deccursor  equ 04h

;inccursor  equ 06h

Counter20  equ 70h

second     equ 71h

minute     equ 72h

hour       equ 73h

secondOnes equ 74h

secondTens equ 75h

minuteOnes equ 76h

minutetens equ 77h

hourOnes   equ 78h

hourTens   equ 79h

;

;  cseg

org 0h

ljmp start

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

;vektor interrupt TF0 location

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

org 0bh

Ljmp timerinterrupt

;

Start:

mov p0,#0ffh

mov counter20,#20

mov second,#0

mov minute,#0

mov hour,#0

call UpdateDisplay

mov TMOD,#00000001b

mov tl0,#0b0h

mov th0,#03ch

setb ET0

setb EA

setb TR0

call init_lcd

;        lcall initlcd

;        lcall delay

;

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

;This subroutine will display Digital Clock as HH:MM:SS

;as you have seen, this subroutine execute every time

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

scandisplay:

;        mov a,#08h

;        lcall setddram

;        lcall delay

;        mov a,#deccursor

;        lcall commandlcd

;        lcall delay

mov r1,#8ch

acall write_inst

mov r1,secondones

acall write_data

;        mov a,secondones

;        lcall writelcd

;        lcall delay

mov r1,#8bh

acall write_inst

mov r1,secondtens

acall write_data

;        mov a,secondtens

;        lcall writelcd

;        lcall delay

;

;        mov a,#3ah

;        lcall writelcd

;        lcall delay

mov r1,#89h

acall write_inst

mov r1,minuteones

acall write_data

;        mov a,minuteones

;        lcall writelcd

;        lcall delay

;

mov r1,#88h

acall write_inst

mov r1,minutetens

acall write_data

;        mov a,minutetens

;        lcall writelcd

;        lcall delay

;

;        mov a,#3ah

;        lcall writelcd

;        lcall delay

;

mov r1,#86h

acall write_inst

mov r1,hourones

acall write_data

;        mov a,hourones

;        lcall writelcd

;        lcall delay

;

mov r1,#85h

acall write_inst

mov r1,hourtens

acall write_data

;        mov a,hourtens

;        lcall writelcd

;        lcall delay

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

;Check for keypad input

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

mov p1,#0feh

jnb p1.4,inchour

jnb p1.5,dechour

mov p1,#0fdh

jnb p1.4,incminute

jnb p1.5,decminute

mov p1,#0fbh

jnb p1.4,incsecond

jnb p1.5,decsecond

sjmp scandisplay

inchour:

inc hour

lcall delay

sjmp scandisplay

dechour:

dec hour

sjmp scandisplay

incminute:

inc minute

sjmp scandisplay

decminute:

dec minute

sjmp scandisplay

incsecond:

inc second

sjmp scandisplay

decsecond:

dec second

sjmp scandisplay

;

Init_lcd:

mov r1,#00000001b ;Display clear

acall write_inst  ;

mov r1,#00111000b ;Function set,

;Data 8 bit,2 line font 5×7

acall write_inst  ;

mov r1,#00001100b ;Display on,

;cursor off,cursor blink off

acall write_inst

mov r1,#00000110b ;Entry mode, Set increment

acall write_inst

ret

Write_inst:

clr p3.0  ; RS = p3.0 = 0, write mode instruction

mov p2,R1 ; D7 s/d D0 = p1 = R1

setb p3.1 ; EN = 1 = p3.1

call delay; call delay time

clr p3.1  ; EN = 0 = p3.1

ret

Write_data:

setb p3.0 ; RS = p3.0 = 1, write mode data

mov p2,R1 ; D7 s/d D0 = p1 = R1

setb p3.1 ; EN = 1 = p3.1

call delay; call delay time

clr p3.1  ; EN = 0 = p3.1

ret

delay: mov R0,#0

delay1:mov R7,#0fh

djnz R7,$

djnz R0,delay1

ret

;

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

;this subroutine will execute every 0,05 second

;after 20 interruption, Digital clock will be updated

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

timerinterrupt:

mov tl0,#0B0h

mov th0,#03Ch

djnz counter20,EndInterrupt

mov counter20,#20

mov a,#24

cjne a,hour,DigitalClock

sjmp reset

EndInterrupt:

reti

;

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

;This subroutine below, will process digital clock

;and updates value for second, minute, hour

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

DigitalClock:

OneSecond:

inc second

mov a,#60

cjne a,second,UpdateDisplay

mov second,#0

;

OneMinute:

inc minute

mov A,#60

cjne A,minute,UpdateDisplay

mov minute,#0

;

OneHour:

inc hour

mov A,#24

cjne A,hour,UpdateDisplay

mov hour,#0

mov minute,#0

mov second,#0

;

UpdateDisplay:

mov a,second

mov b,#10

div ab

mov secondOnes,b

mov secondTens,a

;

mov a,minute

mov b,#10

div ab

mov minuteOnes,b

mov minutetens,a

;

mov a,hour

mov b,#10

div ab

mov hourOnes,b

mov hourTens,a

;

mov a,#30h

add a,secondOnes

mov secondOnes,a

;

mov a,#30h

add a,secondTens

mov secondTens,a

;

mov a,#30h

add a,minuteOnes

mov minuteOnes,a

;

mov a,#30h

add a,minutetens

mov minutetens,a

;

mov a,#30h

add a,hourOnes

mov hourOnes,a

;

mov a,#30h

add a,hourTens

mov hourTens,a

;

reti

reset:

mov hour,#0

sjmp DigitalClock

END

———————————————————————————-

Dan tampilan dalam software simulasi ISIS adalah sebagai berikut:

gambar simulasi dalam ISIS

Selamat mencoba buat kawan-kawan yang ingin membuat jam digital dengan AT89S51 ^^

About these ads

20 thoughts on “Jam digital dengan AT89S51

  1. Pingback: GiniGono[dot]com - Sharing Anything - Music | Movie | News | Tutorial | Tips Tricks| Health | Lifestyle | Gadget Tech | Sport

  2. mas, saya seorang pemula yang ingin banget bikin bikin jam digital. jadi saya emang asing dengan istilah mikrokontroler, AT89S51 dan tentang bahasa peprograman.
    mohon bantuannya ea mas?
    ini alamat email/facebook saya :
    ngupil.jamaah@gmail.com

    banyak pertanyaan yang ingin saya ajukan kepada mas, bila berkenan mohon bantuannya ea mas.. :)

    1. setelah kita membuat bahasa pemprograman kita itu, bagaimana cara menyatukannya ke hardware mas?

    • haha salam kenal juga..
      1. untuk hardware silakan disusun berdasarkan skematik. Haha kode program yang sudah ada dapat didownload ke mikrokontroler dengan downloader yang sesuai ;p

  3. Salam kenal,sy sedang belajar microcontroller,sy banyak lcd 2×16 bekas tetapi masih baik,untuk program ASM diatas sdh sy copail tetapi ada 2 error,maaf ada program ASM yg lain tidak,atau ada yg punya jam lcd menggunakan 89s51 serta ic RTc ds1307,kalo tidak merepotkan mohon bantuanya kirim ke Email sy…
    Terimakasih
    NB:

    Sy banyak LCD 2×16 ada yg punya program lain selain jam LCD yg tentunya tampilanya ke LCD 2×16 sayang jika tidak digunakan….

    • haha salam,.
      oh ya ada yang eror? tu udah berhasil gw coba soalnya. Ntar gw cek lagi codingnya. Btw klo mau gampang pake bahasa C aja ngodingnya.thx

  4. Mas Tolong aku minta disen pcb nya ama Coding software nya soalnya yg di atas gak bisa / error terimakasih aku tunggu di email ya “masikama.53@gmail.com”

  5. hallo bro,,.kan diatas sudah ada skematiknya. Tinggal buat sismin hubungin ama LCD dan keypad. Jadi dah. Ente bisa desain pake DXP Protel atau ARES ISIS dsb. Tuh udah sangat jelas. Tinggal nyambung2in doang,,
    btw untuk codingnya kan udah ada dipenjelasan diatas dalam bahasa assembly

    • Hi. Silakan dibuat sendiri ya, tergantung itu kamu waktu sholatnya mau apa aja yang ditampilkan, interfacenya pakai lampu LED, layar mini LCD atau 7-segment.

  6. asslamualaikum., gan permisi numpang nanya ni..
    perkenalkan saya mahasiswa dari teknik elektro medik makassar. saya mau nanya gan, itu tombol untuk ngatur waktunya kok gag ada?? gmna kita ngatur waktunya.. mohon bantuanya gan..krmkan skema rangkaiannya lengkap sama tombol pengatur waktunya. ni email saya : nopriani94@gmail.com
    sebelumnya salam kenal n makasih

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s