Selasa, 28 April 2015

JAM DIGITAL SEDERHANA 7 SEGMEN ATMEGA 16

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?

Tidak ada komentar: