BUAT KAWAN YANG SUKA MIKROKONTROLLER BASIC MENGGUNAKAN BASCOM AVR
SAYA AKAN BAGIKAN LIST CODE BUAT JAM DIGITAL 7 SEGMENT DENGAN RTC DAN IC MIKRO DENGAN ATMEGA16
INI GAN LISTNYA:
$regfile = "m16def.dat"
$crystal = 12000000 ' clock=12MHz
$hwstack = 32
$swstack = 10
$framesize = 60
'-----------------------------------alokasi memori------------------------------
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
'-----------------------------------Konfigurasi interupsi-----------------------
Config Porta = 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 Sda = Portc.1
Config Scl = Portc.0
Const Ds1307w = &HD0
Const Ds1307r = &HD1
Config Clock = User
Dim Weekday As Byte
Dim Buff3 As Byte
Dim Buff2 As Byte
Dim Buff As Byte '
Portb = 255
'----------------------------------Program utama--------------------------------
'Gosub Display_detik
Do
Gosub Getdatetime
Gosub Baca_tombol
Gosub Kalkulasi
Gosub Tampil_segment
Loop
'----------------------------------Sub Program----------------------------------
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
'--------------------------------Tampilan---------------------------------------
Tampil_segment:
For X = 2 To 114
Portd = &B11011111
Data_segment = Lookup(detik_sat , 7_seg)
Porta = Not Data_segment
Waitms 1
Portd = &B11101111
Data_segment = Lookup(detik_pul , 7_seg)
Porta = Not Data_segment
Waitms 1
Portd = &B11110111
Data_segment = Lookup(menit_sat , 7_seg)
Porta = Not Data_segment
Waitms 1
Portd = &B11111011
Data_segment = Lookup(menit_pul , 7_seg)
Porta = Not Data_segment
Waitms 1
Portd = &B11111101
Data_segment = Lookup(jam_sat , 7_seg)
Porta = Not Data_segment
Waitms 1
Portd = &B11111110
Data_segment = Lookup(jam_pul , 7_seg)
Porta = Not Data_segment
Waitms 1
Next X
Portd = 255
Return
'-------------------------------------Baca tombol-------------------------------
Baca_tombol:
If Pinb.0 = 0 Then
Gosub Settime
Incr _min
Detik_sat = 0
Detik_pul = 0
Gosub Tampil_segment
End If
If Pinb.1 = 0 Then
Gosub Settime
Incr _hour
Detik_sat = 0
Detik_pul = 0
Gosub Tampil_segment
End If
Return
'------------------------------------Data 7-segment-----------------------------
7_seg:
Data &B11000000 '0
Data &B11111001 '1
Data &B10100100 '2
Data &B10110000 '3
Data &B10011001 '4
Data &B10010010 '5
Data &B10000010 '6
Data &B11111000 '7
Data &B10000000 '8
Data &B10010000 '9
'------------------------sub rutin RTC------------------------------------------
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
Settime:
_sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
I2cstart
I2cwbyte Ds1307w
I2cwbyte &H0
I2cwbyte _sec
I2cwbyte _min
I2cwbyte _hour
I2cstop
Return
DIBAWAH INI SKEMANYA BRO ??
skemanya pakai proteus ya kawan
atau ini
sekema gambar
JANGAN LUPA TINGGALKAN KOMENNYA YA?
SAYA AKAN BAGIKAN LIST CODE BUAT JAM DIGITAL 7 SEGMENT DENGAN RTC DAN IC MIKRO DENGAN ATMEGA16
INI GAN LISTNYA:
$regfile = "m16def.dat"
$crystal = 12000000 ' clock=12MHz
$hwstack = 32
$swstack = 10
$framesize = 60
'-----------------------------------alokasi memori------------------------------
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
'-----------------------------------Konfigurasi interupsi-----------------------
Config Porta = 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 Sda = Portc.1
Config Scl = Portc.0
Const Ds1307w = &HD0
Const Ds1307r = &HD1
Config Clock = User
Dim Weekday As Byte
Dim Buff3 As Byte
Dim Buff2 As Byte
Dim Buff As Byte '
Portb = 255
'----------------------------------Program utama--------------------------------
'Gosub Display_detik
Do
Gosub Getdatetime
Gosub Baca_tombol
Gosub Kalkulasi
Gosub Tampil_segment
Loop
'----------------------------------Sub Program----------------------------------
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
'--------------------------------Tampilan---------------------------------------
Tampil_segment:
For X = 2 To 114
Portd = &B11011111
Data_segment = Lookup(detik_sat , 7_seg)
Porta = Not Data_segment
Waitms 1
Portd = &B11101111
Data_segment = Lookup(detik_pul , 7_seg)
Porta = Not Data_segment
Waitms 1
Portd = &B11110111
Data_segment = Lookup(menit_sat , 7_seg)
Porta = Not Data_segment
Waitms 1
Portd = &B11111011
Data_segment = Lookup(menit_pul , 7_seg)
Porta = Not Data_segment
Waitms 1
Portd = &B11111101
Data_segment = Lookup(jam_sat , 7_seg)
Porta = Not Data_segment
Waitms 1
Portd = &B11111110
Data_segment = Lookup(jam_pul , 7_seg)
Porta = Not Data_segment
Waitms 1
Next X
Portd = 255
Return
'-------------------------------------Baca tombol-------------------------------
Baca_tombol:
If Pinb.0 = 0 Then
Gosub Settime
Incr _min
Detik_sat = 0
Detik_pul = 0
Gosub Tampil_segment
End If
If Pinb.1 = 0 Then
Gosub Settime
Incr _hour
Detik_sat = 0
Detik_pul = 0
Gosub Tampil_segment
End If
Return
'------------------------------------Data 7-segment-----------------------------
7_seg:
Data &B11000000 '0
Data &B11111001 '1
Data &B10100100 '2
Data &B10110000 '3
Data &B10011001 '4
Data &B10010010 '5
Data &B10000010 '6
Data &B11111000 '7
Data &B10000000 '8
Data &B10010000 '9
'------------------------sub rutin RTC------------------------------------------
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
Settime:
_sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
I2cstart
I2cwbyte Ds1307w
I2cwbyte &H0
I2cwbyte _sec
I2cwbyte _min
I2cwbyte _hour
I2cstop
Return
DIBAWAH INI SKEMANYA BRO ??
skemanya pakai proteus ya kawan
atau ini
sekema gambar
JANGAN LUPA TINGGALKAN KOMENNYA YA?
Tidak ada komentar:
Posting Komentar