Jam Digital Tampilan LCD dan 7 Segment

Alhamdulillah, sobat inkubatek semoga dalam keadaan yang tambah baik, makin makmur, selalu bersyukur.. Wah sudah lama ya tidak posting tentang mikrokontroler, khususnya mikrokontroler AVR. Baik, kali ini kami akan memenuhi janji ke sobat inkubatek. Dulu ada yang nanya program mikrokontroler untuk jam digital dengan BASCOM-AVR. Kalau yang sudah diposting kan pakai bahasa CodeVisionAVR (CVAVR), silakan cek disini : “Jam Digital dengan Mikrokontroler“.

Kali ini memakai mikrokontroler AVR ATmega8535. Sebagai RTC nya DS1307. Untuk program pertama kita tampilkan ke LCD, ditambah 2 tombol untuk seting jam dan menitnya ya. Rangkaian mikrokontroler dengan LCD dan RTC tampak seperti gambar berikut :

 

Rangkaian Jam Digital Tampilan LCD
Rangkaian Jam Digital Tampilan LCD

Program mikrokontroler untuk jam digital dengan tampilan LCD seperti  ini :

$regfile = “m8535.dat”
$crystal = 16000000
$lib “ds1307clock.lib”

Config Sda = Portd.7
Config Scl = Portd.6

Const Ds1307w = &HD0 ‘
Const Ds1307r = &HD1

Config Clock = User

Dim Weekday As Byte
Dim I As Byte , Jam As Byte , Menit As Byte

Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.4 , Db6 = Portc.5 , Db7 = Portc.6 , E = Portc.2 , Rs = Portc.0
Config Lcd = 16 * 2
Cursor Off
Cls
Lcd ” Jam Digital”
Lowerline
Lcd ” RTC DS1307″
Wait 1
Cls
Lcd “Date=”
Lowerline
Lcd “Time=”

Config Portb = Input
Portb = &HFF


‘——————————————–
Do
Locate 1 , 6
Lcd Date$
Locate 2 , 6
Lcd Time$
For I = 0 To 50
If Pinb.0 = 0 Then
Incr _hour
Gosub Settime
Waitms 100
Locate 2 , 6
Lcd Time$
Elseif Pinb.1 = 0 Then
Incr _min
Gosub Settime
Waitms 100
Locate 2 , 6
Lcd Time$
End If
Waitms 20
Next I
Loop

‘************************** RTC *****************************************
‘called from ds1307clock.lib
Getdatetime:
I2cstart
I2cwbyte Ds1307w
I2cwbyte 0

I2cstart
I2cwbyte Ds1307r
I2crbyte _sec , Ack
I2crbyte _min , Ack
I2crbyte _hour , Ack
I2crbyte Weekday , Ack
I2crbyte _day , Ack
I2crbyte _month , Ack
I2crbyte _year , Nack
I2cstop
_sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
_day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
Return

Setdate:
_day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
I2cstart
I2cwbyte Ds1307w
I2cwbyte 4 7
I2cwbyte _day
I2cwbyte _month
I2cwbyte _year
I2cstop
Return

Settime:
_sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
I2cstart
I2cwbyte Ds1307w
I2cwbyte 0
I2cwbyte _sec
I2cwbyte _min
I2cwbyte _hour
I2cstop
Return

Sekarang kita lihat hasilnya. Saya memakai hardware Master Mikro AVR V2 untuk uji cobanya. Udah lengkap soalnya, ada USB Downloadernya (on board), RTC, LCD dll.

Jam Digital Tampilan LCD
Jam Digital Tampilan LCD

Untuk seting jam tinggal tekan saja tombol SW1 dan untuk seting menit tinggal tekan SW2.

Sekarang kita pakai 7 segment untuk menampilkan nilai jamnya. Siapkan rangkaian tambahan berupa 4 digit 7 segment common anoda. Rangkaian mikrokontroler jam digital dengan 7 segment tampak seperti pada gambar berikut :

Rangkaian Jam Digital Tampilan 7 Segment
Rangkaian Jam Digital Tampilan 7 Segment

Program mikrokontroler jam digital dengan 7 segment pakai BASCOM-AVR agak panjang sedikit ya, ..

$regfile = “m8535.dat”
$crystal = 16000000

Config Porta = Output
Config Portb = Input
Config Portc = Output
Porta = &HFF
Portb = &HFF
Portc = &HFF

Config Sda = Portd.7
Config Scl = Portd.6

Const Ds1307w = &HD0 ‘
Const Ds1307r = &HD1

Config Clock = User

Dim Weekday As Byte , S2 As Byte , S1 As Byte
Dim Jam_pul As Byte , Jam_sat As Byte , Men_pul As Byte , Men_sat As Byte

Dim Det_pul As Byte , Det_sat As Byte , I As Byte
Dim F_tombol As Byte
Dim C As Word
Dim F_kpd As Bit , Menu As Byte

Do
S1 = _sec
Gosub Getdatetime
Jam_pul = _hour / 10
Jam_sat = _hour Mod 10
Men_pul = _min / 10
Men_sat = _min Mod 10

Gosub Tampil_jam
‘Gosub Scan_tombol
If Pinb.0 = 0 Then
Incr _hour
Gosub Settime
Jam_pul = _hour / 10
Jam_sat = _hour Mod 10
For I = 0 To 20
Gosub Tampil_jam
Next I
Elseif Pinb.1 = 0 Then
Incr _min
Gosub Settime
Men_pul = _min / 10
Men_sat = _min Mod 10
For I = 0 To 20
Gosub Tampil_jam
Next I
End If
Loop

‘——————-
Tampil_jam:
Portc = &B1110
Porta = Lookup(jam_pul , Angka)
Waitms 2

Portc = &B1101
Porta = Lookup(jam_sat , Angka)
Waitms 2

Portc = &B1011
Porta = Lookup(men_pul , Angka)
Waitms 2

Portc = &B0111
Porta = Lookup(men_sat , Angka)
Waitms 2
Return
‘————————–

Getdatetime:
I2cstart
I2cwbyte Ds1307w
I2cwbyte 0

I2cstart
I2cwbyte Ds1307r
I2crbyte _sec , Ack
I2crbyte _min , Ack
I2crbyte _hour , Ack
I2crbyte Weekday , Ack
I2crbyte _day , Ack
I2crbyte _month , Ack
I2crbyte _year , Nack
I2cstop
_sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
_day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
Return

 

Setdate:
_day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
I2cstart
I2cwbyte Ds1307w
I2cwbyte 47
I2cwbyte _day
I2cwbyte _month
I2cwbyte _year
I2cstop
Return

Settime:
_sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
I2cstart
I2cwbyte Ds1307w
I2cwbyte 0
I2cwbyte _sec
I2cwbyte _min
I2cwbyte _hour
I2cstop
Return

Angka:
Data &H40 , &H79 , &H24 , &H30 , &H19 , &H12 , &H02 , &H78 , &H00 , &H10 , &H7F

Hasilnya pada 2 digit pertama tampil nilai jam, sedangkan pada digit ketiga dan keempat tampil menitnya.

jam 7seg

Untuk tampilan lebih menarik, antara jam dan menit dikasih 2 LED yang berkedip sebagai detikan. Silakan dimodifikasi sambil belajar pemrograman mikrokontroler.

Ok, semoga bermanfaat.

10 thoughts on “Jam Digital Tampilan LCD dan 7 Segment

  • August 10, 2016 at 7:41 am
    Permalink

    Mas yang pakai bahasa CVAVR “klik disini “kok nggak bisa ya?

    Reply
    • August 10, 2016 at 9:07 am
      Permalink

      Maaf mas lupa taut ke link, sekarang sudah bisa mas, silakan dicek 🙂
      Trims atas masukannya.

      Reply
  • August 13, 2016 at 11:15 pm
    Permalink

    Ahiiiwww…udah di update lagi nich inkubatec,saya banyak belajar mikro dari sini

    Reply
    • August 15, 2016 at 3:40 pm
      Permalink

      Makasih mas, mohon doanya …
      Trims

      Reply
  • December 4, 2016 at 11:25 am
    Permalink

    Terimakasih INKUBATEK Atas berbagi Ilmunya dan ini yang saya cari. Cara membuat jam dengan 7 segment.

    Reply
    • December 6, 2016 at 8:41 am
      Permalink

      Terimakasih mas sudah mampir, semoga bermanfaat..

      Reply
  • September 22, 2017 at 9:42 am
    Permalink

    Bnyak yang error pas di compile.
    Solusinya gimana mas

    Reply
    • July 18, 2018 at 11:27 am
      Permalink

      Errornya seperti apa mas ?

      Reply
  • October 20, 2019 at 6:45 am
    Permalink

    Mas jamnya sih tampil d mm AVR V2 , tapi kok nggak gerak mas jamnya. Waktunya hanya diam.
    Mohon solusinya mas…apa ada yg harus d tambahin pada programnya

    Reply
    • October 21, 2019 at 2:28 pm
      Permalink

      RTC sudah diseting belum ? Coba diseting ulang RTC-nya

      Reply

Leave a Reply

WhatsApp chat
%d bloggers like this: