'ASSALAMU'ALAIKUM WARAHMATULLAHI WABARAKATUH
'NAMA : HERMANTONI
'SEKOLAH : SMK MUHAMMADIYAH 1 PADANG
'DI BUAT : 05 FEBRUARI 2018
'PROGRAM : JAM DIGITAL RTC DS1307
'SEVEN SEGMENT : SEGMENT ANODA (porta abc = min dan portd 1234 = plus)
$regfile = "m16def.dat"
$crystal = 12000000
$hwstack = 32
$swstack = 10
$framesize = 60
Dim Detik_sat As Byte , Detik_pul As Byte
Dim Menit_sat As Byte , Menit_pul As Byte
Dim Jam_sat As Byte , Jam_pul As Byte
Dim X As Word , Data_segment As Byte
Config Portb = Output
Config Porta.0 = Output
Config Porta.1 = Output
Config Porta.2 = Output
Config Porta.3 = Output
Config Porta.4 = Output
Config Porta.5 = Output
Config Portc.5 = Output
Config Portc.6 = Output
Config Portc.7 = Output
Config Portd.0 = Output
Config Portd.1 = Output
Config Portd.2 = Output
Config Portd.3 = Output
Config Portd.4 = Output
Config Portd.5 = Output
Config Portd.7 = Output
Config Sda = Portc.1
Config Scl = Portc.0
Const Ds1307w = &HD0
Const Ds1307r = &HD1
Config Clock = User
Dim Weekday As Byte , Buff3 As Byte , Buff2 As Byte , Buff As Byte
Dim I As Byte , Count As Integer , Tem1 As Integer , Tem2 As Integer
Dim Rib As Integer , Rat As Integer , Pul As Integer , Sat As Integer
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Dim W As Word , J As Word
Start Adc
'dibawah ko kato kato pengantar ee
Portb = &B1011111
Porta = &B1111111
Portd = &HF
Waitms 200
Portb = &B1111110
Waitms 200
Portb = &B1111101
Porta = &H0
Waitms 200
Portb = &B1111011
Waitms 200
Portb = &B1110111
Porta = &HF
Waitms 200
Portb = &B1101111
Waitms 200
Portb = &B1011111
Porta = &H0
Waitms 200
Portb = &B0111111
Porta = &HF
Waitms 100
Portb = &B0111111
Waitms 900
Portd = &H00
Waitms 300
Porta = &HF
'semua berawal dari rasa penasaran
'hingga akhirnya bisa :)
'_hour = 17
'_min = 27
'_sec = 00
'Gosub Settime
'nan iko namo adiak awak mah :) jan di copy lo lae
'Porta = &B0001110
'Portd = &B1000
'Wait 1
'fa
'For X = 0 To 500
'Porta = &B0001110
'Portd = &B0100
'Waitms 1
'Porta = &B0001000
'Portd = &B1000
'Waitms 1
'Next
'fau
'For X = 0 To 333
'Porta = &B0001110
'Portd = &B0010
'Waitms 1
'Porta = &B0001000
'Portd = &B0100
'Waitms 1
'Porta = &B1000001
'Portd = &B1000
'Waitms 1
'Next
'fauz
For X = 0 To 400
Portb = &B0001110
Portd = &B0001
Waitms 1
Portb = &B0001000
Portd = &B0010
Waitms 1
Portb = &B1000001
Portd = &B0100
Waitms 1
Portb = &B0100100
Portd = &B1000
Waitms 1
Next
'auzi
For X = 0 To 250
Portb = &B0001000
Portd = &B0001
Waitms 1
Portb = &B1000001
Portd = &B0010
Waitms 1
Portb = &B0100100
Portd = &B0100
Waitms 1
Portb = &B1111001
Portd = &B1000
Waitms 1
Next
'uzi
For X = 0 To 333
Waitms 1
Portb = &B1000001
Portd = &B0001
Waitms 1
Portb = &B0100100
Portd = &B0010
Waitms 1
Portb = &B1111001
Portd = &B0100
Waitms 1
Next
'zi
''For X = 0 To 500
'Porta = &B0100100
'Portd = &B0001
'Waitms 1
'Porta = &B1111001
'Portd = &B0010
'Waitms 1
'Next
'Porta = &B1111001
'Portd = &B0001
'Waitms 1000
Portd = &B00000000
Waitms 600
Gosub Thermostat
Portd = &B00000000
Waitms 400
Gosub Jam
Portd = &B00000
Waitms 400
Gosub Data01
Portd = &B00000
Waitms 400
Gosub Siap
Waitms 100
Porta = &H0
Do
Gosub Getdatetime
Gosub Baca_tombol
Gosub Kalkulasi
Gosub Indikator
Gosub Tampil_segment
Loop
'ko bagi mambagi angko nan dari rtc
Kalkulasi:
Jam_pul = _hour / 10
Buff2 = Jam_pul * 10
Jam_sat = _hour - Buff2
Menit_pul = _min / 10
Buff = Menit_pul * 10
Menit_sat = _min - Buff
Detik_pul = _sec / 10
Buff3 = Detik_pul * 10
Detik_sat = _sec - Buff3
If Detik_sat >= 10 Then
Detik_sat = 0
End If
If Detik_pul >= 6 Then
Detik_pul = 0
End If
If Menit_sat >= 10 Then
Menit_sat = 0
End If
If Menit_pul >= 6 Then
Menit_pul = 0
End If
If Jam_sat >= 10 Then
Jam_sat = 0
End If
If Jam_pul >= 2 And Jam_sat >= 4 Then
Jam_sat = 0
Jam_pul = 0
End If
Return
Jam:
'kalau ko jam
For X = 0 To 500
Portb = &B1110001
Portd = &B0001
Waitms 1
Portb = &B0001000
Portd = &B0010
Waitms 1
Portb = &B1001100
Portd = &B0100
Waitms 1
Portb = &B1011000
Portd = &B1000
Waitms 1
Next
Return
'ko kabawah alarm jam 5 pagi wak mah, bia ndak talambek, hehe...
'jo pergantian jam
Indikator:
If _min = 00 And _sec = 00 Then
Portc.5 = 1
Portd.7 = 1
If _hour =< 4 Then
Portd.7 = 0
End If
If _hour => 21 Then
Portd.7 = 0
End If
Waitms 400
Else
Portc.5 = 0
End If
If _hour = 05 Then
Portd.7 = 1
Gosub Seni_e_mah
End If
If _hour = 07 And _min = 00 Then
Gosub Seni_e_mah
End If
If _hour = 08 And _min = 00 Then
Gosub Seni_e_mah
End If
If _hour = 09 And _min = 00 Then
Gosub Seni_e_mah
End If
If _hour = 10 And _min = 00 Then
Gosub Seni_e_mah
End If
If _hour = 11 And _min = 00 Then
Gosub Seni_e_mah
End If
If _hour = 12 And _min = 00 Then
Gosub Seni_e_mah
End If
If _hour = 13 And _min = 00 Then
Gosub Seni_e_mah
End If
If _hour = 14 And _min = 00 Then
Gosub Seni_e_mah
End If
If _hour = 15 And _min = 00 Then
Gosub Seni_e_mah
End If
If _hour = 16 And _min = 00 Then
Gosub Seni_e_mah
End If
If _hour = 17 And _min = 00 Then
Gosub Seni_e_mah
End If
If _hour = 18 And _min = 00 Then
Gosub Seni_e_mah
End If
If _hour = 19 And _min = 00 Then
Gosub Seni_e_mah
End If
If _hour = 20 And _min = 00 Then
Gosub Seni_e_mah
End If
'If _min = 00 And _sec = 00 Then
'Portd.7 = 1
'End If
'If _hour = 21 And _min = 00 Then
'Gosub Seni_e_mah
'End If
'If _min = 10 And Detik_pul = 0 Then
'Gosub Jam
'Portd = &B00000
'Gosub Data01
'Waitms 300
'Portd = &B00000
'End If
'If _min = 20 And Detik_pul = 0 Then
'Gosub Jam
'Portd = &B00000
'Gosub Data01
'Waitms 300
'Portd = &B00000
'End If
'If _min = 30 And Detik_pul = 0 Then
'Gosub Jam
'Portd = &B00000
'Gosub Data01
'Waitms 300
'Portd = &B00000
'End If
'If _min = 40 Then
'Gosub Jam
'Portd = &B00000
'Gosub Jam
'Gosub Data01
'End If
'If _min = 50 Then
'Gosub Data01
'End If
If Detik_pul = 0 Then
Porta.0 = 1
Else
Porta.0 = 0
End If
If Detik_pul = 1 Then
Porta.1 = 1
Else
Porta.1 = 0
End If
If Detik_pul = 2 Then
Porta.2 = 1
Else
Porta.2 = 0
End If
If Detik_pul = 3 Then
Porta.3 = 1
Else
Porta.3 = 0
End If
If _min = 50 And Detik_pul = 0 Then
Gosub Thermostat
Gosub Thermostat
Waitms 100
End If
If _min = 30 And Detik_pul = 0 Then
Gosub Thermostat
Gosub Thermostat
Waitms 100
End If
If _min = 10 And Detik_pul = 0 Then
Gosub Thermostat
Gosub Thermostat
Waitms 100
End If
Return
Siap:
For X = 0 To 600
Portb = &B0010010
Portd = &B00001
Waitms 1
Portb = &B1111001
Portd = &B00010
Waitms 1
Portb = &B0001000
Portd = &B00100
Waitms 1
Portb = &B0001100
Portd = &B01000
Waitms 1
Next
'smile
For X = 0 To 400
Portb = Not &B0010000
Portd = &B10000
Waitms 1
Portb = &B1000111
Portd = &B00001
Waitms 1
Portb = &B0010100
Portd = &B00010
Waitms 1
Portb = &B0010100
Portd = &B000100
Waitms 1
Portb = &B1110001
Portd = &B001000
Waitms 1
Next
Portb = Not &B10000001
Portd = &B00000
Waitms 100
Return
Tampil_segment:
'Portd = &B00100000
' Data_segment = Lookup(detik_sat , 7_seg)
' PortD = Data_segment
'Waitus 40
Portd = &B10000
'Data_segment = Lookup(detik_pul , 7_seg)
Portb = Not &B0010001
Waitms 3
Portb = &B1111111
Portd = &B01000
Data_segment = Lookup(menit_sat , 7_seg)
Portb = Data_segment
Waitms 3
Portb = &B1111111
Portd = &B00100
Data_segment = Lookup(menit_pul , 7_seg)
Portb = Data_segment
Waitms 3
Portb = &B1111111
Portd = &B00010
Data_segment = Lookup(jam_sat , 7_seg)
Portb = Data_segment
Waitms 3
Portb = &B1111111
Portd = &B00001
Data_segment = Lookup(jam_pul , 7_seg)
Portb = Data_segment
Waitms 3
Portd = &B00000
Return
Thermostat:
For J = 0 To 100
W = Getadc(7)
J = W * 2
Count = J + 45
Rib = Count / 1000
Tem1 = Count Mod 1000
Rat = Tem1 / 100
Tem2 = Tem1 Mod 100
Pul = Tem2 / 10
Sat = Tem2 Mod 10
For X = 0 To 600
Portd = &B0001
Portb = Lookup(rat , 7_seg)
Waitms 3
Portd = &B0010
Portb = Lookup(pul , 7_seg)
Waitms 3
Portd = &B0100
Portb = &B0011100
Waitms 3
Portd = &B1000
Portb = &B1000110
Waitms 3
Next
Next
Return
'tibo disiko kun panik palo wak aaa....
Baca_tombol:
W = Getadc(5)
If W = 0 Then
Portc.7 = 1
Else
Portc.7 = 0
End If
If Portc.7 = 1 Then
Incr _min
_sec = 00
Gosub Settime
Gosub Getdatetime
Waitms 800
End If
J = Getadc(4)
If J = 0 Then
Portc.6 = 1
Else
Portc.6 = 0
End If
If Portc.6 = 1 Then
Incr _hour
_min = 00
_sec = 00
Gosub Settime
Gosub Getdatetime
Waitms 800
End If
Return
'If Porta.7 = 0 Then
'Incr _min
'Waitus 100
'Gosub Settime
'Detik_sat = 0
'Detik_pul = 0
'Gosub Tampil_segment
'End If
'If Portd.6 = 0 Then
'Incr _hour
'Waitus 100
'Gosub Settime
'Detik_sat = 0
'Detik_pul = 0
'Gosub Tampil_segment
'End If
'Return
7_seg:
Data &B1000000 '11111000 '0
Data &B1111001 '11000000 '1
Data &B0100100 '10110111 '2
Data &B0110000 '10110111 '3
Data &B0011001 '4
Data &B0010010 '5
Data &B0000010 '6
Data &B1111000 '7
Data &B0000000 '8
Data &B0010000 '9
'mambaco data jak di rtc ko mah
Getdatetime:
I2cstart
I2cwbyte Ds1307w
I2cwbyte &H0
I2cstart
I2cwbyte Ds1307r
I2crbyte _sec , Ack
I2crbyte _min , Ack
I2crbyte _hour , Nack
I2cstop
_sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
Return
Data01:
'ya awak lh nyo :)
For X = 0 To 500
'Porta = Not &B0000011
'Portd = &B10000
'Waitms 1
Portb = &B0000111
Portd = &B000001
Waitms 1
Portb = &B1000000
Portd = &B0010
Waitms 1
Portb = &B1001000
Portd = &B0100
Waitms 1
Portb = &B1111001
Portd = &B1000
Waitms 1
Next
Return
'ko maatur waktu pas patamo kali di download
Settime:
_sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
I2cstart
I2cwbyte Ds1307w
I2cwbyte &H0
I2cwbyte _sec
I2cwbyte _min
I2cwbyte _hour
I2cstop
Return
'maedit program : HERMAN TONI
'05 FEBRUARI 2018
'awak ambiak pedoman dari http/muhihsan54.blogspot.co.id/search/label/mikrokontroler
'END
'EH YOO, LUPO AWAK.....
'ko seni nyo bana mah, dak buliah tingga do, hehe...
Seni_e_mah:
Porta = &HF
Portc.5 = 1
Waitms 250
Porta = &H0
Portc.5 = 0
Portd.7 = 0
Waitms 200
Return
itulah program nya, di jam ini sudah dilengkapi dengan sensor suhu.
untuk sensornya, saya menggunakan TTC 104 yang saya ambil di power amplifier mobil.
biasanya sensor ini di tempelkan ke bodi/heatsink mosfet, sensor ini berwarna hijau.
kalo ga ada ga apa apa ko, cuma nanti pas menit ke 10, 20, 30, 40, 50 akan tampil 0'C
diprogram yg ana buat diatas, sengaja ana tambahkan alarm jam 05.00
led yang di PORTA akan kedip kedip, disertai dengan bunyi beb pada buzzer
berikut hasil simulasi dengan proteus
Jika ada yang perlukan sitanyakan, silahkan di kolom komentar.
Atau email hermantoni510@gmail.com disertai dengan url nya.
Fast respon via watsapp di no 0896 5222 733
Mari berteman di facebook,
facebook.com/antonio.herman.50
Cukup sekian dulu pada tulisan kali ini, dilain waktu dishare lagi rangkain yg lain....
Wassalamu'alaikum wr.wb.
Poetra pultim....
Pultim fc, moga bangkit kembali !!!
Nak rang sijunjung….,