Seven segment simulation for digital clock program with hours-minutes-seconds display

Seven Segment is one of the most common components used primarily to display data in the form of numbers. For that, Microcontroller Project also provides a simulation for seven segment, namely SSLED.exe.

Seven segment simulation provided by the SSLED.exe has eight-digit in multiplex manner. Multiplex technique is the most commonly used because of its compact wiring and requires only a few ports to control it. How to control the seven segment arranged in multiplex is by dividing two kinds of line, i.e. the data line and digits control line. Data line is used to determine which LED are lit, while the digits controller line is used to set which digits are lit.

Data line and digits control line of SSLED.exe received using window message as WM_USER. If lParam is 1, then the received signal will be considered as a signal for digits control line. Whereas if the lParam value is 2, then the received signal will be considered as a signal for the data line.

On the data line, bit 0 will be used for LED a, bit 1 to turn on the LED b, and so on until bit 6 to turn on the LED g. While the bit 7 is used to lit the decimal point LED. If a bit is 1, then the corresponding LED will lit. This would fit with the common cathode type. However, we can also reverse the data so that if the data sent value is FF, then the data would be considered 00. This capability is useful for adjustment with seven segment types to be used.

SSLED.exe provides two ways of controlling the digits, i.e. the parallel way and the counter way. In the parallel way, each digit can be individually activated depending on the bit of the line controller. Bit 0 in the line controller will control the rightmost digit and bit 7 will control the leftmost digit. If a bit is 1, then the corresponding digits will be active. And just as in the data line, the line controller digits can also be reversed.

In counter mode, only bit 0 and bit 1 in the line controller digit is used. Bit 0 is used to reset the counter, so the active digit will be the rightmost digit. While the bit 1 is used to shift the active digit to be the next left digit, or name it as raising the counter count. There are two kinds of how to raise the counter count, i.e. L to H transition or H to L transition. If we use the L to H transition, then the counter will be increased if bit 1 state changed from 0 to 1. Conversely, if the transition used are H to L, then counter would be raised if the bit condition changed from 1 to 0.

If the current digit is the leftmost digit and count raised, the active digit will return to the rightmost digit.

The picture above is an example of how simulation if operated for seven segment display digital clock program. Above program is actually a modification of the program on Interrupts chapter of the Easy and Fun Learning Microcontroller book, ie on Timer.A51 program. But in the book we will try to program the actual seven segment, so we need to save money just by using four digits only. While in this simulation, we have simulated seven segment that provides eight digits. Therefore, we can show not only hours and minutes but also seconds. In fact we still have the remaining two digits. The remaining digits are used to separate hours to minutes and minutes to seconds, i.e. by displaying a (-) sign. Therefore, we need a little modification of the Timer.A51 program in order to display the seconds and the separation mark.

The source code is written with the format of M51 and c where the data signal transmitted using P0, and the digit control signal using P1. Thus, we must set P0 to link by the Link Message with a WM_USER message, and lParam value is 2 and fill the Handle with the Handle of running SSLED.exe using Capture Handle button. Do this to P1 too. But in P1, lParam value is 1. And remember, remove the check mark on the Update Display menu on the simulator.

But keep in mind that the program is written to run on a microcontroller with a 11.592 MHz crystal. So the second change speed during the simulation may be is not correct. And its speed depends on the speed of the computer you use.

Well, interesting isn’t it? Happy trying :!:

Source

Source

Did you enjoy this post? Why not leave a comment below and continue the conversation, or subscribe to my feed and get articles like this delivered automatically to your feed reader.
Please notice that comment or question submitted should match the topic. Otherwise, we will delete that comment or question :!:

122 Comments
  1. saya tertarik melihat tampilan jam digital di 7 segment, tuk melihat lebih jelas rangkaianna dimana ya?

    • Contoh rangkaian ada di buku Mudah dan Menyenangkan Belajar Mikrokontroler. Atau sebenarnya kita juga bisa memperkirakan rangkaian dengan membaca listing programnya. Sebagai contoh, pada listing program tertulis bahwa port data berada pada P0. Itu artinya, semua lampu segment (a-g+ titik) dihubungkan ke port 0 dengan cara semua lampu yang sama digabungkan menjadi satu. Kemudian tertulis juga bahwa port digit pada P1. Itu artinya digit-digit seven segment dikendalikan oleh P1. Gitu bro.

  2. trima kasih untugg itu…

    infonya…
    klow bisa tw ap nama IC yang dipake??
    dan gambara rangkaiannya pada papan pcb..

    harap kirim ke febiiy_sanchez@yahoo.com

    ini menyangkut saya NAIK ATAU TINGGAL KELAS…

    KUMOHOHN

    • yah, yang naik kelas bung yoko dunk hehe… liat penjelasan bukunya gamblang kok :)

  3. IDE baru V6 sudah saya donlot and bisa saya pakai simulasi enak mas(tinggal coba write pake alat saya)
    mo sekalian tanya neh, saya suka source ini dan mau saya kembangkan untuk timer penyalaan lampu aquarium 3 formasi dengan 3 waktu yg berbeda (ada seh yg jual timer jadi tp 45rb an klo butuh 3 Rp.150.000 mahal dung and habisin tempat)
    saya yakin source anda ini bisa saya kembangkan, tp dg assembler perintah yg mirip VB
    ‘——-batas timer—
    dim jamNeon as Time
    dim JamLED as Time
    dim JamUV as Time
    if format(now(),”hh:mm”) > jamNeon and _ Format(now(),”hh:mm”)+durasi > jamNeon then
    ‘–bla bla bla
    nyalakan_Neon
    ‘–bal bla…. dst
    endif

    ‘–bal bla…. dst

    klo asembly mnemonic lebih besar bisa gak ya…?
    thx b4

    • @roy: sebenernya aku belum begitu paham ma pertanyaannya, tp kalo mo pake source pada contoh ini untuk ngatur jadwal, tu bisa dg cara gini:
      tu kan ada variabel jam, dan menit. nah, buat bandingin apakah waktu sekarang sudah pada waktu untuk melakukan aktivitas tertentu ato belum, kita bisa melakukannya begini:

                mov   a,#JamNoen
                xrl   a,Jam
                jnz   BukanNeon
                mov   a,#MenitNeon
                xrl   a,Menit
                jnz   BukanNeon
      ;lakukan penyalaan neon disini
      BukanNeon:
      ;---dan seterusnya...
      

      Tetapi karena mungkin kita akan banyak membuat penjadwalan dan setiap penjadwalan kita gunakan cara membandingkan jam sekarang dengan jadwal, maka akan lebih mudah jika kita menggunakan macro seperti berikut:

      ~mac TestWaktu JadwalJam JadwalMenit Loncat
                mov   a,JadwalJam
                xrl   a,Jam
                jnz   Loncat
                mov   a,JadwalMenit
                xrl   a,Menit
                jnz   Loncat
      ~endmac
      ;penggunaan menggunakan konstanta waktu jam 12:00
                ~callmac TestWaktu #12 #00 BukanNeon
      ;lakukan penyalaan neon di sini
      BukanNeon:
      ;penggunaan menggunakan variabel JamUV dan MenitUV
                ~callmac TestWaktu JamUV MenitUV BukanUV
      ;lakukan penyalaan uv di sini
      BukanUV:
      ;---dan seterusnya...
      

      Kuharap ini menjawab pertanyaan :)

    • Terimakasih mas, wah hebat
      [/b]@roy: sebenernya aku belum begitu paham ma pertanyaannya[b]
      maaf mas pertanyaanku yg ribet mungkin, tapi hebat bisa jawab persoalanku,
      iya mas, aku sekarang punya gambaran dari macro ini

      tantangan saya selanjutnya adalah saya akan coba atur agar bisa berjalan di 89C2051 4 digit SS and dg 2 tombol unt setting,3 port untuk nyalain lampu
      emm…
      .. bisa aku kayaknya..
      nanti klo ada kendala, bakal ganggu mas lagi hehe sorry n thx b4 mas

  4. [b]Bisa[/b] 892051 port na P3 and P1
    [b]Sepertinya[/b] bisa untuk 4 digit(8 bit data seven segmen) di kemudikan dengan 4 bit untuk menentukan digit aktif, trus 2 bit untuk saklar. sisanya 2 bit untuk atur relay lampu neon
    yaahh kurang satu dunk klo untuk 4 lampu (tambah IC TTL pencacah dunk sepertinya)
    kecuali ada ide lain apa ya…?

    • Pengendali digit pake counter 4017 aja. Tu cmos dan murah. Bisa sampe 10 digit lho. Trus cuma butuh 2 pengendali, reset ma clock. Reset untuk mengaktifkan digit pertama, clock untuk memindah ke digit berikutnya. Nah sekarang malah sisa 1 pin port kan?

    • sip bener mas (saya sudah punya itu 4017 sisa experiment dot matrix dg printerport), atau klo saya ngeyel g mau pake ic tambahan, berarti saya pake 2 skenario lampu saja,
      makasih mas

  5. (sticngk this post)
    mas klo saya menginginkan downloader untuk default downloader dari anda prosedurnya gimana…?, bisa di jangkau khan..?
    Email saya ya…! thx b4

    • DEFAULT DOWNLOADER untuk micro v 611
      saya tidak terburu buru butuhnya mas tapi klo memang ada saya berminat untuk mendapatkan juga, atau default itu juga bisa di fungsikan sebagai DTK..?

      NB: mas di micro v6 ini saya menggunakan directive
      JAM1 equ 8
      JAM2 equ 9
      jam3 equ 10

      mov SP,#savestack

      tapi waktu di SIM(simulasi) SaveStack nilainya kok #08H ..?

      thx b4 mas

    • Default Downloader, nanti kalo sudah ada iklannya di web site ini, berarti itu telah tersedia, gitu ya mas roy :)

      Trus untuk pembuatan variabel, seharusnya mas roy pake

      ~byte jam1 jam2 jam3
                mov SP,#SaveStack

      Liat juga di Alokasi memori yang mudah

  6. ocley……aku perlu contoh rangkaian itu dan beberapa lagi…..mohon dikirim ke email q aja….thanq…..moga cepat sukses selalu…

  7. Halo,
    MInta info nya kalau pengen memprogram seven segment 4 digit dengan vb gimana caranya nya. Saya udah googling berkali2 blom ketemu.

    Thanks

    • Program seven segment pake VB? maksudnya dikendalikan lewat PC?
      Harus ditentukan dulu interfacenya? mo pake Paralel port, ato mau pake PPI?
      Klo menurutku lewat paralel port sih sudah cukup untuk mengendalikan 4 digit. Port data untuk mengendalikan segment, trus untuk mengendalikan digit menggunakan port control. Kita bisa menggunakan port control bit 0 hingga bit 3. Akan tetapi harus diingat bahwa hanya bit 2 saja dari port control tersebut yang tidak dibalik.
      Cara untuk mewujudkan pengendaliannya sebenarnya sama saja dengan contoh di sini, yaitu dengan cara scanning. Kecepatan scanning 1ms sudah cukup bagus. Gunakan komponen timer untuk menjalankan scanningnya. Sedangkan untuk mengendalikan paralel port melalui VB, Kholid bisa coba googling lg, banyak kok yang mbahas.

    • mas mw nanya untuk program seven segmen pake vb menggunakan metode multi media programnya ada g?

  8. mas sulhan,
    MInta bantuannya kalau pengen memprogram seven segment 4 digit dengan C menggunakan mikro AVR atmega8535 gimana caranya nya. Saya udah brpwsing2 tetapi lum dapet.

    terima kasih

    • kan kode sumber juga ditulis dengan c (sdcc), kan tinggal kamu sesuaikan dengan hardware km aja. Coba pahami source itu bagaimana kerjanya. Jika cara kerjanya udah bisa dipahami, pake mikrokontroler apapun jg tidak masalah lg. Hanya perlu penyesuaian saja.

    • OK mas Sulhan,

      terima kasih atas pencerahannya, saya akan coba memdalaminya, kebetulan masih pemula jadi agak kesulitan.
      kalau ada bahan2 yang bisa sebagai acuan belajar mohon dikirimi ya mas,

  9. mz bisa minta souce code untuk at89c2051 cos aq dapat kok g ada yg bisa ya? kl ada tlng di kirim ke email achmadmuchlis17@gmail.com terimakasih sebelumnya

    • @AHMAD:Contoh yg disini bisa jg buat 89C2051 kok, cuma tinggal menyesuaikan portnya saja. Dan karena hanya ada 15 bit port untuk 89C2051, sementara untuk contoh disini butuh 16 untuk display dan 2 untuk tombol, maka sebaiknya buang saja digit yg hanya menampilkan srtip (-) jadi 6 digit saja. jadi kebutuhan total adalah 14 bit untuk display. Nah, yg jd masalah adalah, untuk tombol masih kurang 1 lg. Kekurangan ini bisa diambilkan dari bagian segment. gunakan 7 bit saja untuk segment dan kita tidak perlu menyalakan titik desimal.
      @Deddy: program di deouncing rev memang tidak ada detikannya. yang ada detikannya kan contoh yg disini. untuk hardware pada contoh di sini, sesuaikan dg programnya, yaitu port untuk segment adalah P0 dan untuk digit adalah P1, juga tidak ada penanganan untuk mengubah waktu menggunakan tombol. Plis baca listing programnya dg teliti, dan pahami apa yg sebenernya dilakukan oleh program.

    • bang aq baru belajar mikrokontroller aq pengen buat jam digital dengan at89c2015 menggunkan 4 digit 7 segmen tpi terbentur sama souce code nya. bisa minta tlng untuk kirimkan souce code ke achmadmuchlis17@yahoo.com
      terima kasih sebelumnya

    • Owh, kalo cuma 4 digit sih, contoh yg di sini jg bisa digunakan, tinggal sesuaikan aja portnya. 89C2951 hanya punya P1 dan P3. Jadi ubah saja PortDigit menjadi P3 dan PortData menjadi P1. Terus, aturlah digitnya agar hanya menampilkan bagian jam dan menit. atau lihatlah Pertanyaan seputar buku “Mudah dan Menyenangkan Belajar Mikrokontroler” dan donlotlah source yg ada di situ.

    • mz maaf ngerepoti lgi kok masih ada yang error ya di baris 10 n 14? knp ya?

    • mz saya pakek program read51 saya coba masukkan program yang saya dapat dari mz sulhan tpi kok ada errornya 1. tulisannya
      cSio51.c is up to date
      Linking c51.obj
      c0.OBJ
      cSio51.obj
      -> cSio51.hex
      1 linker error found. Generating error file…
      gmn penyelsaiannya mz . mohon petunjuknya biar saya bisa belajar

    • semua listing program yg ada disini ditulis untuk digunakan menggunakan Microcontroller Project

  10. Siang Kang…Yoko… Setelah saya download rev debouncing saya jalankan ternyata swit yang di P3.3 dan P3.4 jika ditekan membuat digit pertama menyala lebih terang dan titik berkedip2. tetapi tidak bisa ntuk seting jam dan menit. gimana yaaa..?? terus untuk detikan saya coba pasang common anoda digit 1 di P3.5 digit 2 di P3.4 digit 3 di P3.3 digit 4 di P3.2 digit 5 di P3.1 dan digit 6 di P3.0 ternyata gak mau muncul detikannya.. salahnya dimana yaaa???? Tolong dong kaang. dikasi jalan keluar…..please deh ahhhh…

  11. Kang Yoko.. saya sudah bisa berhasil dengan jam digital tapi masih 4 digit. yaitu jam dan menit aja. gimana ya caranya biar bisa kelihatan detiknya….???? udah bolak-balik saya coba.. masih belum berhasil tuh… tolong dong dibantu bagaimana caranya biar bisa detiknya…atau 6 digit…

    • @Bli Dedi: dengan menggabungkan contoh program yg ada di sini dengan Debouncing2rev, seharusnya Bli Dedi sudah bisa membuat program jam digital 6 digit yg menampilkan detikan.

  12. Permisi bang. Sampe skrg saya blom tau cara membuat delay yang akurat 1 detik. Kebetulan disini lg ngebahas jam digital. Yang saya mau tanya, program delay 1 detik yang akurat seperti apa ya bang. Sebelumnya saya cuma nyocokin ama stopwatch, kalo blom terasa pas, kudu di re-program lagi.

    • Delay 1 detik yg akurat bisa dilihat dari listing untuk contoh di artikel ini. Yang jelas, delay akurat harus dibuat menggunakan interupsi timer. Keakuratannya tergantung pada keakuratan kristal yg digunakan.

    • maaf kalo ngerepotin sebelumnya bang, kebetulan saya nguliknya di bahasa assembler. Saya gak paham dengan bahasa C.

      Kalo saya pake kristal, misalnya 1Mhz. berarti periodanya 10^-6s, kalo 1 perintah bernilai 1 siklus. Apakah untuk 1 detik saya membuat pengulangan 1juta kali terhadap siklus ts?!. Apa perhitungannya sesederhana itu bang?

      ini delay yang saya buat :

      delay:
      mov r0,#01h (nilai r0 dan r1 hanya contoh)
      mov r1,#0ffh
      sjmp penghabis_delay1

      penghabis_delay1:
      djnz r1,penghabis_delay1
      djnz r0,penghabis_delay1
      ret

      Makasih sebelumnya… maaf merepotkan.

    • Listingnya kan ditulis pake c dan assembly, tapi assemblynya ditulis untuk menggunakan IDE dari web site ini. Jadi donlot dulu IDEnya ya. Trus, seperti yang sudah saya bilang, kalau mau buat time-base, maka sebaiknya gunakan interupsi timer, bukan menggunakan perulangan dengan djnz. Coba baca Pertanyaan seputar buku “Mudah dan Menyenangkan Belajar Mikrokontroler”. Dan kalau bisa, baca juga bukunya. Di situ dijelaskan bagaimana membuat time-base yang akurat.

  13. gmna cra buat script pada pembuatan jam digital stuan jam dan menit…..

  14. mas, Aq bole minta tolong kirimi contoh program+codingnya ini ke e-mailq ngk.???
    kalau semisal bole & ngk keberatan tlg di kirimkan ke lucky_maghfirah@yahoo.com, makaci sebelumnya.. !!!???? :)

  15. saya pemula yang ingin mempelajari mikrokontroller.. Ingin membuat alat sebagai alat pencatat kendaraan yang lewat dengan menggunakan mikrokontroller..
    Mikrokontroller apa yang baik sy gunakan??
    Apakah buku ini bagus sebagai panduan dalam buat alat saya??
    Trims

    • kurasa pake avr atau mcs51 (AT89S51/AT89S52) tu pilihan yg cukup baik, karena kedua jenis itu harganya relatif murah dibandingkan dg unjuk kerjanya. buku panduan untuk alat yg mau km bikin? kurasa klo yg secara khusus membahas itu tidak akan ada. tp yg lebih penting adalah cari buku yg akan membuatmu mengerti ttg mikrokontroler, setelah itu, apapun yg km inginkan akan bisa km wujudkan (lebay..tidak perlu merasa seperti tuhan). Nah, kurasa buku yg aku tulis, tu bisa membantu bagi yg belum ngerti sama sekali tentang mikrokontroler, agar menjadi mengerti dan mampu memahami mikrokontroler.

  16. mas, boleh minta source code bahasa c buat avr atmega16 donk..
    kalo bisa kirim ke email ku ya.. cheche_dunk@yahoo.co.id

  17. assalamualikum bang……..
    bang bisa bantu saya buatkan program argometer
    dan skema rangkainya pakai at 89s52
    sebelumnya terimakasih banyakni bang…………

  18. assss.
    permisi,saya baru belajar tentang micro controler dan saya igngin membuat jam digtal dengan 6 digit 7 segmen (jam,menit,detik) kira2 boleh gak aku minta skema jam digital + file hex nya.
    sekian terimakasih.

  19. salam kenal mas. saya boleh gak dikasih program listingnya untuk jam digital (jam : menit)dan rangkaian linenya. mohon di emalkan aja ke saya. trimakasi pak.

  20. yang saya maksud diatas tadi mas listing bahasa C u/ ATmega8535

  21. mas sulhan, saya mau tanya ni, di dala buku yang mas buat, jenis2 instruksi bahasa asemblynya lengkap gak..??
    saya kebetulan baru ingin belajar mikro kontroler, tapi soal instruksi pemrogramannya gak ngerti, harap di bantu…

    • @koe: mmm lengkap ga ya? di buku itu instruksi2 bahasa assembly disajikan dalam bentuk contoh2. Jadi, di buku itu setiap instruksi hanya dijelaskan jika pada contoh tersebut menggunakan instruksi itu. Tp menurutku sih, menurutku ya, cara seperti itu lebih mudah untuk belajar, karena kita tidak perlu mengerti semua instruksi terlebih dahulu sebelum kita melakukan percobaan. Kita hanya perlu mengerti instruksi yang memang kita perlukan dalam percobaan. Dan apakah itu lengkap? coba aja liat daftar isinya. Cekitdot gan :D

  22. mas sulhan, saya mau minta source code jam digital menggunakan at89s51..hampir sama dengan Rendra T, hanya jam dan menit saja
    dengan menggunakan bhs C
    send saja ke e-mail saya yah mas…
    terima kasih sebelumnya

    • @ucox: lha wong tinggal donlot aja kok, kode sumber kan ditulis dalam bahasa assembly dan c, dan itu untuk MCS-51. klo mau cuma jam dan menit kan tinggal buang bagian yg menampilkan detik. Gitu aja ko repot :P

    • ok mas Sulhan,terima kasih atas informasinya

      akan saya coba dan jalankan..

  23. Beli buku buku sulhan ada dimana , apakah bisa beli langsung sebab saya tidak melihat daftar buku dan harganya

    • @indra: buku bisa dibeli secara online. coba aja search. ato bisa juga langsung ke web site penerbit, biasanya harus register dulu.

  24. bisa bntu sya g mas??
    sya sdang mmbwt aplikasi login,
    pke keypad matrix yg ada tampilan lcd-nya,,,
    password yg saya ketik ingin trlihat “******”
    gmn caranya y mas??

  25. mas sulhan…
    mau konsul lg nie,ad perubahan trhdp tugas saya ternyata..
    saya bleh minta tolong, minta schematic jam digital dgn ic at89s51 menggunakan RTC 12c887 dengan outputan 3 display 7segment (contoh outputan: jam&menit WIB, jam&menit WITA, jam&menitWIT)

    thanks b4 mas..

  26. sangat bagus dan sederhana

  27. mas bisa minta rangkaian jam digital berbasis atmega8535 dengan bahasa programnya yang ditampilkan ke seven segmen?
    kalo bisa tolong kirim ke email ini:
    free_boy20@yahoo.com

    terima kasih atas perhatiannya..

  28. mas sulhan apa kbr…mas aq nie lagi TA bkin traffic light pke timer berbasis mikro mcs51…mas saya ksulitan di program mas gk mnta script counter dwoun smpai 45…

    mas hatur nuhun/terima kasih sblumnya…
    mas tunggunya jwbnya…

  29. kasih tw dong program untuk bikin itung mundur menit sama detik

    • org 0h
      mov TMOD,#01H ;aktifkan timer 0 mode 16 bit
      tampil1 :mov R1,#0FFh
      dec R1 ;tambah 1 ke r2
      mov B,#10
      mov A,R1 ;copikan r2 ke A
      Div AB ;A dibagi B
      swap A ;byte rendah dan tinggi ditukar
      add A,B ;menambahkan A dengan B
      Cjne R1,#60,tampil1
      mov p1,A ;copykan isi A ke port1

      Detik1 :mov r0,#100
      Again :mov TH0,#0d8h
      mov tlo,#0f0h
      setb tr0 ;mulai menghitung
      wait :jnb tf0,wait ;cek time overflow
      clr tr0 ;mengosongkan time overflow
      clr tr0 ;selesai menghitung
      djnz r0,again ;ulang siklus sebanyak isi r0

      mov r7,#15h
      mov p2,#00h
      mov ro,#60
      lcall detik1
      dec r0
      mov B,#10
      mov A,R0 ;copikan r2 ke A
      Div AB ;A dibagi B
      swap A ;byte rendah dan tinggi ditukar
      add A,B ;menambahkan A dengan B
      mov p2,A

      saya baru belajar mikon nih,, ini program buat delay 1 detik, tolong dong bagi2 ilmu bgaimana caranya biar bisa itung mundur di seven segment cuman menit sama ddetik doang ko.. tolong kak sulhan^^

    • @luta: dari contoh program tsb, terlihat jelas bahwa luta memang belum ngerti pemrograman. tidak ada saran singkat yg bisa menolong selain “baca dulu buku saya” :D

  30. saya mau tanya,, apa seven segmen ada bermacam2 jenisnya???? kalau ada,, apa saja???? kalau bisa diberi keterangan ya…

    trims…^^

    • @guruh: ya banyak macemnya lah, dari segment yg digunakan, misalnya ada yg pake lcd, ada jg yg led, boleh jg klo mo bikin sendiri pake lampu pijar. trus klo yg led, tu ada 2 tipe, common anode sama common cathode.

  31. terimakasih mz sulhan setelah membeli buku mdah dan menyenangkan belajar mikrokontroller telah membantu saya yang masih awam sekali dalam memahami mikrokontroller. saya sudah bisa membuat led berjalannamun saya terhambat pada contoh tombol1.a51 dengan rangkaian dan jenis IC mikro yang di gunakan. bisakah mz sulhan mengirimkan gambar rangkaian nya? ke alamat email saya. terimakasih sebelumnya

    • Mikro yg digunakan di seluruh bab dalam buku adalah sama, yaitu keluarga MCS-51, bisa menggunakan AT89C2051, AT89C51, AT89S51, dll. Sedangkan rangkaian untuk percobaan Tombol1.A51, masih menggunakan rangkaian pada percobaan sebelumnya, yaitu percobaan seven segment. Hanya dg menambah pemasangan tombol yg gambarnya ada di halaman 98.

  32. Asslm, gimana kabarnya Pak, smg baik, sehat dan selalu dalam lindungan Allah swt. Sdh lama ni gak pegang mikro lagi, ini kok kepingin lagi coba-coba.
    Saya sdh download file source nya jam 8 digit, setelah tak lihat2 kok kayaknya berbeda dengan yah 4 digit ? Kalau yg dulu khan ada proses aktifkan digit dengan mengirim data 0 ke port digit yg diaaktifkan. Lha yg ini saya cari2 kok gak ketemu, apa memang dibuat lain ? Dan itu blm ada tombolnya ya? Kalau langsung dicopykan program tombol yg dulu itu nyambung nggak ya kira2?
    Terimakasih atas jawabannya semoga bisa membuat pemahaman saya lebih baik.

    • Wa alaikum salam Pak Pri,
      Sebenernya sama saja, pada contoh 4 digit di buku, saya menggunakan tabel untuk mengatur digit yg aktif. Sedangkan pada contoh 8 digit, pengaturan digit yg aktif disimpan dalam variabel DigitAktif. Perhatikan bahwa pada bagian inisialisasi program, variabel ini diisi dengan 1. Kemudian pada proses scanningnya, isi variabel ini yg digunakan untuk menentukan digit yang aktif dan setiap saat digeser ke arah kiri. Untuk pengaturan tombol, karena kebetulan kita menggunakan nama variabel yang sama untuk jam, menit, dan detiknya, maka bisa saja langsung dicopykan dari contoh2 program yang ada pengaturan tombolnya.

  33. Asslm wr wb,
    Terimakasih Pak atas jawabannya, tapi setelah saya cermati kode program sepertinya masih ada yg kurang. Ada awal yg hilang,disitu tertulis notasi “~”, ini apa maksudnya? Ini awalnya :

    ~byte Digit DigitAktif Jam Menit Detik Counter8 Counter225
    ;// Digit secara otomatis akan ditempatkan pada alamat 8
    ;// yang merupakan R0 jika bank1 aktif
    ~array 8 Buffer

    …diedit…

    dan ada lagi :

    ;//———————————————–
    ~mac FillBuff Obj BuffPos

    …diedit…

    ~endmac

    Tolong diberi pencerahan apa maksudnya ~byte, ~mac ?

  34. O ya sdh tak baca, ternyata ada cara lain saya kira kurang. Sekarang ada pertanyaan lagi. Kalau program yg dibuku jam 4 digit mau saya ubah ke 6 digit seperti ini :

    Digit equ 8
    Buffer equ 9
    Jam equ 13
    Menit equ 14
    Detik equ 15
    Puluhan equ 16
    Satuan equ 17
    Counter225 equ 18
    Counter8 equ 19
    Bendera1Detik bit 20H.0

    apakah bisa untuk buffer harus diberi alokasi 6 alamat, jadi 9,10,11,12,13,14 dan yang bawahnya itu mengikuti jadi: jam equ 15, menit equ 16 dst ?

    ;———–bagian sub-sub program————
    org 0BH ;timer0
    push PSW
    push Acc
    djnz Counter225,Scanning
    mov Counter225,#225
    djnz Counter8,Scanning
    mov Counter8,#8
    cpl Bendera1Detik
    jnb Bendera1Detik,NyalakanTitik
    inc Detik ;1 detik
    mov a,Detik
    cjne a,#60,MatikanTitik
    mov Detik,#0
    inc Menit ;1 menit
    mov a,Menit
    cjne a,#60,PerbaruiTampilan
    mov Menit,#0
    inc Jam ;1 jam
    mov a,Jam
    cjne a,#24,PerbaruiTampilan
    mov Jam,#0
    sjmp PerbaruiTampilan

    Dari listing diatas supaya setiap detik berubah terjadi ‘perbarui tampilah’, maka ditaruh mana ? Itu tempatnya perbaruiTampilan sdh ditempati ‘matikan titik’ ?

    Itu saja dulu, dan isi buffer juga disesuaikan untuk jam puluhan = mov buffer+5,a, jam satuan= mov buffer+4,a dst ?

    Terimakasih atas bantuannya, mohon maaf kalo pertanyaannya kurang berbobot, namanya juga belajar.

    • memang klo mo bikin 6 digit, jumlah buffer ya harus disesuaikan. terus biasanya klo ada tampilan detiknya, ga perlu ada titik yg dikedip2kan. coba Pak Pri perhatikan bagaimana perbedaannya dg yg 8 digit. tinggal lakukan sedikit penyesuaian saja kan Pak?

  35. Ok Pak, sdh saya fahami hanya msh ragu2 saja sampai batasan angka berapa equ itu diperbolehkan. Dan insya allah saya sdh agak faham untuk modifikasi yg 4 digit jadi 6 digit, tolong nanti kalo ada masalah dibimbing.

    Pertanyaan berikutnya : Ini yg sama sekali masih blank, sebenarnya jam ini mau saya fungsikan seperti stop watch, Jadi bisa stop, lanjut dan reset. mungkin kalau reset bisa direset mikronya ya atau lebih pakai program juga?

    Jawabannya sangat saya tunggu Pak, terimakasih atas bimbingannya ,semoga Allah yang membalasnya dan dicatat sebagai amal sholeh, dan senantiasa Pak Sulhan diberikan kesehatan, dan diberikan keselamatan beserta keluarga. amiin.

    • Kalo mau menambah stop dan lanjut, pertama harus ditambahkan tombol untuk stop dan lanjut itu. Penekanan tombol itu digunakan untuk membalik sebuah bendera katakanlah nama benderanya adalah Run. Kemudian pada bagian interupsi timer, tambahkan baris seperti berikut:

                org   0BH ;timer0
                push  PSW
                push  Acc
                jnb   Run,Scanning
                djnz  Counter225,Scanning
                mov   Counter225,#225
                djnz  Counter8,Scanning
                ....

      Perhatikan bahwa jika bendera Run tidak diset, maka proses perhitungan waktu akan dilewati dan hanya melakukan scanning seven segment saja.

  36. Rencananya akan saya tambahkan tombol push button stop dan lanjut sendiri-sendiri, jadi ada dua tombol S1 dan S2. Apa seperti ini programnya, dan nanti ditempatkan dimana ?

    S1: jb S1,S2
    clr run
    S2: jb S2,S1
    setb run
    jml S1
    Harapannya kalau S1 ditekan maka run bernilai 1, dan jika S2 ditekan run bernilai 0.
    Mohon sarannya, terimakasih.

    • contoh menggunakan tombol kan sudah ada di buku dan cukup lengkap. penulisan program seperti yg pak pri kasih ya jelas salah. jika S1 adalah nama untuk sebuah pin port, maka nama tersebut tidak boleh digunakan sebagai label. oia, untuk memastikan apakah program yg ditulis telah bekerja dg benar atau masih salah, sebaiknya lakukan percobaan menggunakan simulator.

    • Ok, terimaksih atas penjelasannya. Saya kok blm terbiasa pakai simulator. Kemarin nyoba, tapi untuk seven segmen gak bisa berfungsi. Cara menghubungkan port sdh tak coba sesuai di help tapi msh blm bisa mungkin ada prosedur yg kurang.
      Port setelah tak isi kalau gak salah port 0 dan potr 1 disisi ada yg 1 dan 2, tapi kok gak ada tombol enter atau Ok nya. Tak klik yg user… kok ya gak ada efek ?

    • lakukan percobaan demo dari demo yg pertama dulu, kemudian demo kedua, ketiga, dst

  37. Bang, buku anda “Mudah dan Menyenangkan Belajar Mikrokontroler” kok di toko2 buku sudah ndak ada ya? Aq ke gramedia maupun ke togamas ndak ada. Apa memang sdh tak diterbitkan?

    • @trijoko: buku sebenernya masih banyak, tp memang tidak begitu tersedia di toko buku konvensional. jadi lebih mudah didapat melalui toko buku online. ada banyak toko buku online yg menjualnya. bisa juga langsung membeli dari website penerbit.

  38. Assalamu alaikum wr. wb.

    Alhamdulillah Pak Sulhan saya sudah berhasil meggunakan program simulai untuk jam digital 8 digit. Tapi sekarang ada permasalahan, setelah saya compile dan saya downloa ke dalam rangkaian nyata, ternyata tidak bisa berjalan, hanya tampil angka 8 semua digit dan angkanya tidak berubah. Setelah saya cari-cari, saya punya dugaan bahwa yg disimulasikan itu control digitnya pakai aktif high sedangkan rangkaian saya merujuk pada buku pakai aktif low. Saya sdh coba-coba rubah agar dapat aktif low ternyata masih blm berhasil. mohon bantuannya. Ini listingnya :

    Display: setb RS0 ;aktifkan bank1
    mov PortDigit,#00h ;matikan semua digit
    mov PortData,@R0
    mov PortDigit,DigitAktif
    xch a,DigitAktif
    ;cpl a
    rl a
    xch a,DigitAktif
    inc R0
    cjne R0,#Buffer+8,dispfin
    mov R0,#Buffer
    dispfin: clr RS0 ;aktifkan bank0
    ret

    Baris kedua sdh pernah tak ganti dg 0FFH dan dibaris keenam saya balik a nya ternyata juga msh blm bisa. Mohon bantuannya. Terimakasih sebelumnya.

    Wassalamu alaikum wr. wb.

    • wa alaikum salam wr.wb.
      apa pak pri jg sudah menyesuaikan port yg digunakan? pada buku yg digunakan adalah port1 untuk data segment dan port 3 untuk pengaturan digit. sednagkan pada contoh 8 digit ini PortData di port0 dan PortDigit di port1.

  39. Assalamu alaikum wr.wb.
    Permasalahan kemarin sdh terselesaikan Pak, terimakasih ats bimbingannya. Saya sebenarnya ada 2 pilihan untuk modifikasi, yaitu program 8 digit yang saya tambah dengan tombol untuk setting jam seperti dulu yg Bapak berikan. Yang kedua modifikasi ham 4 digit yg sdh lengkap dgn tombol, tinggal ditambahi 2 dgt lagi.
    Keduanya sdh saya coba, namun keduanya tidak berjalan mulus. Yang ingin saya kemukakan disini modifikasi yg kedua aja, kelihatannya lebih mudah. Semua port sdh saya sesuaikan, dan saya mulai modifikasi program sedikit demi sedikit. Terakhir saya modifikasi daerah awal, buffer saya beri 6 alamat otomatis yg lain saya naikkan 2, tapi hasilnya semua digit muncul 000000, dan tidak berjalan. Dan pada main menu pada program savetack tdk muncul tapi pada source kok muncul dan alamatnya kok 8, dan itu sudah dilapakai untuk digit, apa ini yg jadi masalah? Terus terang untuk urusan memori saya masih kesulitan untuk memahaminya. Apakah alamat yg saya pakai itu melebihi batas ?
    Berikut program lengkapnya setelah saya edit dan tak sesuaikan dg hardware saya. TErimakasih atas bantuannya semoga Allah yg membalasnya, dan dicatat sebagai amal baik.

    source code …. diedit

    • Wa alaikum salam wr.wb
      Terus terang saya kecewa sekali dg Pak Pri. Dari pertanyaan2 yg Pak Pri ajukan jelas sekali bahwa Pak Pri tidak membaca buku secara keseluruhan, jg tidak benar2 mencoba untuk mengerti jawaban2 yg telah saya berikan. Silakan baca lagi dan pahami halaman 74 tentang tumpukan, kemudian baca juga lampiran 2 Optimasi Penggunaan IDE. Jika percobaan Pak Pri sudah sampai disini, seharusnya Pak Pri sudah membaca halaman 74. Dan satu hal lg yg harus diperhatikan dalam mempelajari pemrograman adalah, cobalah untuk benar2 memahami setiap baris2 program :!:

  40. Assalamu alaikum wr. wb.
    Alhamdulillah PAk proyek saya sdh selesai berkat komentar terakhirnya. Jam 6 digit sdh berjalan, juga pemberian tombol untuk stop dan go sdh berjalan. Ada dua versi satu menggunakan saklar on/off dan satunya lagi pakai tombol push button ( dua tombol). Ada beberapa baris perintah yang saya sisipkan pada program. Setelah saya bandingkan dengan stopwacth hasilnya sepertinya sama, tapi saya ragu apakah secara teori mempengaruhi perhitungan timer apa nggak ?

    org 0BH ;timer0
    push PSW
    push Acc

    …………
    …………
    …………

    djnz Counter225,Scanning
    mov Counter225,#225
    djnz Counter8,Scanning
    ….

    • wa alaikum salam,
      Dalam membuat penghitung waktu, yg pertama harus dihitung adalah seberapa cepat interupsi itu dipanggil. Untuk mengatur ini, kita harus mengatur TMOD, THx dan TLx yg tentu saja perhitungannya tidak bisa dilepaskan dr kristal yg digunakan. setelah kita menentukan seberapa cepat interupsi akan dipanggil, maka langkah selanjutnya tinggal melakukan perhitungan sehingga didapatkan satuan waktu yg diinginkan, misalnya detik, setengah detik, sepersepuluh detik, dsb. Penjelasan ini sebenernya sudah ada pada BAB9.

  41. sy tertarik dg tulisan anda diatas,dan kbetulan sy lg blajar mengenal microcontroller,kira2 dmana sy bs mendapatkan buku tsb?sy tgl d SBY.
    Please blz via email aja.thx

  42. Assalamu alaikum wr.wb

    Mas aq sudah membuat rangkaian jam digital 4digit.Aq cari listing program yg sdh direvisi soalnya buku saya buku lama jadi kalau menggunakan listing program lama untuk mencocokan jam sulit
    thx

  43. asskum.wr.wb
    mas saya mau nanyaq, sebener-a sich request mas. hehehe.
    ginie loeh mas, saya dapat project at89c52 matrix led proteus, truz di project itu saya di suruh untuk menampilkan huruf A, nah yg jadi pertanyaan saya isi listing program-a apa ya mas??
    harap mas reply ke restu.reza@gmail.com

    atas perhatian-a saya ucapkan terima kasih.

  44. pada contoh program jam 8 digit itu menggunakan commond anoda, kalau misal di rubah menjadi commond katoda, itu porgramnya jadi berubah tidak mas?? perubahannya dimana??

    • cukup dengan membalik data yang akan dikirimkan ke segment dengan perintah cpl

    • mas sulhan kalau 7 segment nya menggunakan LED setiap segmentnya ada 12 LED, saya rangkai 3 seri, 3 seri, 3 seri, 3 seri, jadi ada 4 seri lalu saya paralel untuk portdata nya apa harus dikuatkan lagi dengan transistor??? seperti pada matrik led menggunakan transistor untuk pengendali baris dan kolom.

    • Maksimum arus total dalam satu port untuk AT89S51 dan sejenisnya adalah 71 mA, sehingga setiap pin port hanya bisa dilalui arus sebesar 8 mA lebih sedikit. Sedangkan rangkaian led diparalel hingga 4. Artinya 8 mA ini harus dibagi menjadi 4 buah, yaitu hanya 2 mA. Arus ini tentu saja terlalu kecil untuk menyalakan led. Apa butuh transistor atau tidak? Itu terserah kamu, jika kamu merasa 2 mA sudah cukup, boleh saja tanpa transistor, tapi tentu saja akan sangat redup.

    • Ok mas terima kasih…..

  45. Mas.Sulhansetiawan….
    Saya mau tanya nih giman cara menghiting call delay perhitungan menghidupkan seven segment angka 1,2,3,4,5,6,7 sampai 9….

    Rumusnya gimananya klo saya pengin hidupkan angka seven segment 55 …..minta batuannya…….

    • Maksudnya bagaimana? apa membuat konstanta untuk menampilkan angka? atau bagaimana?
      Kalau untuk membuat konstanta untuk menampilkan angka pada seven segment, bisa menggunakan SSMaker.

  46. Luar biasa. Tidak menyangka masih banyak juga pengguna keluarga 8051 yang menggunakan assembler. Mantab.

  47. artikelnya bagus mas,,

    tp tolong dong mas .,,

    kirimin gambar rangkaiannya ke email aq itha_masyhta@ymail.com

    soalnya ini tugas akhir dari guru aq,,

    mohon bantuannya mas

  48. Terima kasih infonya gan

    ini aku juga posting Jam digital dengan tampilan seven segmen dan LCD menggunakan RTC DS1307 dan mikrokontroler AVR atmega 8535

    Bisa di check disini
    http://bagindra.blogspot.com/2012/02/jam-digital-dengan-tampilan-seven.html

  49. assalamualaikum mas?
    mas saya boleh minta skema jam digital tersebut gak mas..atau kalau saya bisa download dimana mas…

    • Skemanya mirip dengan skema yang ada di buku, hanya ditambah jumlah digitnya.

  50. mas saya mencoba untuk debouncingrev itu berhasil, trs untuk driver segmentnya saya tambahi transistor biar lebih terang menyalanya, kok menyalanya jadi terbalik, untuk mengatasinya gimana mas???

    • Jawabannya sudah ada dalam pertanyaannya. Kalau nyalanya terbalik, cara mengatasinya tentu saja dengan membalik nyalanya. Terbaliknya bagaimana? Apa yang seharusnya menyala menjadi padam dan sebaliknya? Kalau begitu, baliklah data yang akan dikirim ke port dengan perintah cpl A. Port yang mana? Port yang digunakan untuk menyalakan yang nyalanya terbalik itu.

    • yang seharusnya menyala menjadi padam mas

  51. pak cara mengganti 7segmen cathode menjadi anode pada jam digital gimana ya?
    soalnya kemarin saya beli 7segmen cothode malah dikasih anode udah saya coba2 tapi gak bisa2.
    trims

    • kalau cara lainnya misalnya merubah hardwarenya bisa ngak?

    • Jika menggunakan MCS-51, maka justru lebih tepat menggunakan 7 segment common anode dibandingkan dengan common cathode. Caranya adalah dengan menyambungkan cathode (segment) ke port melalui resistor 560 ohm, atau jika ingin lebih terang bisa menggunakan 330 ohm (sangat terang). Kemudian untuk anode (common) dihubungkan ke colector dari transistor pnp dimana emitornya dihubungkan ke VCC. Dari basis transistor tersebut dihubungkan ke port melalui sebuh resistor 10K sebagai pengendali digit tersebut.
      7 segment common anode

  52. sippp….. bisa tambah ilmu nih.

  53. Mas Sulhan program jam seven segment dirubah ke dotmatrix dan disatukan ke tampilan teks dotmatrix, jadi kombinasi ledmatrix teks berjalan dengan jam digital. Bagaimana caranya menyatukan keduanya bergantian.???
    Penalaran program saya masih lambat mas mohon bantuannya.
    terimakasih

    • Perhatikan pada contoh yang ada di website ini. Pada Interupsi timer, keduanya digunakan untuk melakukan scanning (7segment/matriks LED). Perbedaannya pada contoh jam digital selain digunakan untuk menjalankan proses scanning, juga digunakan untuk menghitung waktu. Nah, tambahkan proses menghitung waktu ini kepada contoh program matriks LED. Kemudian, buatlah prosedur yang setiap satu detik atau setengah detik untuk memperbarui isi BufferDisplay. Apa yang dilakukan? tentu saja menuliskan waktu yang telah dihitung oleh Interupsi Timer. Cara membuat tulisan juga sudah ada pada contoh-contoh di website ini.

  54. Bisa gak ya program jamnya digabung dengan rtc ds1307?

    • Tentu saja bisa. Tambah saja prosedur-prosedur untuk mengakses DS1307, kemudian gantilah pewaktuannya dengan mengambil data dari RTC dan bukan dengan cara menghitung waktu.

    • satu lagi mas,pewaktuannya disisipkan di program interupsi atau program utamanya?

    • Pada contoh di sini, interupsi timer berfungsi ganda, yaitu menghitung waktu dan melakukan scanning display. Jika menggunakan RTC, waktu tidak perlu lagi dihitung oleh mikrokontroler, tetapi scanning tetap diperlukan. Jadi, pewaktuannya bisa diambil dari RTC hanya saat dibutuhkan saja. Dalam hal membuat jam digital, waktu yang ditampilkan juga harus diupdate setiap ada perubahan waktu. Penempatannya terserah saja, suka-suka, mau ditempatkan pada interuptsi atau dalam program utama.

      Ada baiknya melakukan sedikit perubahan pada interupsinya, yaitu gunakan interupsi eksternal yang dikendalikan dengan waveout dari DS1307 yang diset pada kecepatan 4KHz. Pada interupsi itu dibagi menjadi beberapa langkah, misalnya dibagi 16 untuk menghasilkan frekuensi 256Hz yang digunakan untuk melakukan scanning. Frekuensi 256 ini juga bisa digunakan untuk membuat bendera-bendera khusus, misalnya bendera 1 siklus 256Hz, bendera pertengahan detik, dan bendera satu detik.Bendera satu siklus akan bermanfaat jika kita membuat animasi. Bendera pertengahan detik dan satu detik bisa kita gunakan untuk update waktu yang ditampilkan.

      Terakhir yang tidak kalah penting adalah bahwa pada saat startup, set waveout untuk berfrekuensi 1Hz dan tunggu dapat interupsinya. Hal ini digunakan untuk mendapatkan waktu yang sinkron dengan RTC. Jadi, saat dapat interupsi ini, lakukan inisialisasi angka-angka pada variabel yang digunakan untuk membuat hitungan yang akan menghasilkan bendera-bendera tadi. Jadi bendera satu detik akan diperoleh tepat pada saat RTC mengalami perubahan detik.

  55. assalamu’alaikum master !!
    mau nanya nih (nanya terus ya !! :))
    menggunakan IC RTC itu menyimpan data ke IC tsb, terpisah dengan trik tertentu atau coding nya disertakan bareng dengan program utama.

    terima kasih. marhaban yaa ramadhan “mohon maaf lahir dan bathin”

    • Wa alaikum salam, selamat menunaikan ibadah puasa, dan mohon maaf lahir dan bathin.

      Programnya bagaimana itu terserah programmernya, style programmer kan unik dan beda-beda. Sebaiknya buatkan fungsi-fungsi khusus untuk berkomunikasi dengan RTC. Misalnya buatkah fungsi-fungsi seperti GetSecond (mengambil detik), GetMinute, GetHour, dll, yang berfungsi untuk mengambil data dari RTC, juga fungsi-fungsi PutSecond (mengubah nilai detik), PutMinute, dll, untuk mengubah data pada RTC. Setelah membuat fungsi-fungsi tersebut, kan tinggal digunakan pada saat dibutuhkan, terserah dimana, mungkin di program utama, interupt, atau dimana saja.

    • Kalau menyimpan data di eeprom harus di isikan dulu baru digabung dg micro atau sekaligus di donlod sama program utama nya

    • Eeprom dan kode program adalah sesuatu yang lumrahnya terpisah. Jadi tidak ada hubungannya antara mengisi eeprom dengan mengisi kode mikrokontroler.

    • Eeprom dan kode program adalah sesuatu yang lumrahnya terpisah. Jadi tidak ada hubungannya antara mengisi eeprom dengan mengisi kode mikrokontroler.

  56. mas kalo programnya jam digital dg 6 digit. jam,menit,detik.. itu gmna mas ?

    • Perhatikan saja contohnya yang 8 digit. Tinggal kurangi proses scan hanya untuk 6 digit, serta mengubah nomor buffer untuk penempatan angka-angka waktunya.

Leave a comment

Before making a comment, make sure you have read the previous comments. Do not make the questions have been asked. Note also the links in the article. Take a look at those links before you create the questions, as it may be an explanation of your questions have been answered in that link.

Comments that do not follow these rules will be deleted!

(required)

(required)



5 × three =

Notify me of followup comments via e-mail. You can also subscribe without commenting.