Membuat Program Counter 7-Segmen Atmega16

Dapet tugas sekolah, UKK (Uji Kompetensi Kejuruan) yaitu membuat tampilan counter 7-segmen, cukup menantang walau sebelumnya belum pernah mencoba, sempet nyari2 di google dan akhirnya dapet caranya, menggunakan command lookup(), sempet bingung karena rumit banyak cara yang di gunakan untuk mencacah bilangan dari 00-59, dan akhirnya menemukan cara yang mudah yang saya temukan sendiri...

Cara kerja yang saya buat saat UKK yaitu ada 3 tombol:
  • Tombol 1 di tekan 7-segmen akan menghitung secara naik (increment) dari 00-59
  • Tombol 2 di tekan 7-segmen akan menghitung secara Menurun (decrement) dari 59-00
  • Tombol 1 di tekan 7-segmen akan berhenti di posisi terakhir, beberapa detik kemudian 7-segmen akan berkedip selama 3x dan 7-segmen akan menunjukan angka 00
berikut skemanya

dan berikut script bascom-nya



$regfile = "m16def.dat"
$crystal = 8000000
Config Porta = Output
Config Portc = Output
Config Portd = Input
Portd = &HFF

S1 Alias Pind.0                                  'Switch Counter Up
S2 Alias Pind.1                                  'Switch Counter Down
S3 Alias Pind.2                                  'Switch Stop

Dim K As Integer                               'Kondisi
Dim S As Integer                                'Satuan
Dim P As Integer                                'Puluhan
Dim U As Integer                                'Untuk Perulangan

K = 0
S = 0
P = 0

Do                                                      'program Utama

If S1 = 0 Then K = 1                          'switch counter up
If S2 = 0 Then K = 2                          'switch counter down
If S3 = 0 Then K = 3                          'switch Stop

If K = 1 Then                                     '----counter up----
   Incr S
   If S = 10 Then
      S = 0
      Incr P
   End If
   If P = 6 Then
      P = 0
   End If
End If

If K = 2 Then                                     '----counter down----
   Decr S
   If S = -1 Then
      S = 9
      Decr P
   End If
   If P = -1 Then
      P = 5
   End If
End If

If K = 3 Then              '----Counter Stop, blink n then Counter 0----
  Wait 1
   For U = 0 To 3
         Portc = Lookup(s , Segmen)
         Porta = Lookup(p , Segmen)
      Waitms 300
         Portc = &HFF
         Porta = &HFF
      Waitms 300
   Next U
   S = 0
   P = 0
   K = 0
End If


Portc = Lookup(s , Segmen)         'Keluarkan Data Satuan Di PortC
Porta = Lookup(p , Segmen)         'Keluarkan Data Puluhan Di PortC
Waitms 100
Loop

Segmen:
Data &HC0 , &HF9 , &HA4 , &HB0 , &H99 , &H92 , &H82 , &HF8 , &H80 , &H9

*update ....
berikut adalah cara baru untuk mencacah angka yang akan di tampilkan oleh 7Segmen.


$regfile = "m16def.dat"
$crystal = 8000000
Config Porta = Output
Config Portc = Output
Config Portd = Input
Portd = &HFF

S1 Alias Pind.0                                             'Switch Counter Up
S2 Alias Pind.1                                             'Switch Counter Down
S3 Alias Pind.2                                             'Switch Stop

Dim K As Integer                                            'Kondisi
Dim O(2) As Integer                                         'Data Out 7Segmen
Dim U As Integer                                            'Untuk Perulangan
Dim N As Integer

K = 0
N = 0
Do                                                          'program Utama

If S1 = 0 Then K = 1                                        'switch counter up
If S2 = 0 Then K = 2                                        'switch counter down
If S3 = 0 Then K = 3                                        'Switch Stop

If K = 1 Then                                               '----counter up----
   Incr N
Elseif K = 2 Then                                           '----counter down----
   Decr N
Elseif K = 3 Then                                           '----Counter Stop, blink n then Counter 0----
  Wait 1
   For U = 0 To 3
         Porta = Lookup(o(1) , Segmen)
         Portc = Lookup(o(2) , Segmen)
      Waitms 300
         Portc = &HFF
         Porta = &HFF
      Waitms 300
   Next U
   N = 0
   K = 0
End If

If N = 60 Then N = 0
If N = -1 Then N = 59

O(1) = N / 10
O(2) = N Mod 10

Portc = Lookup(o(2) , Segmen)                               'Keluarkan Data Satuan Di PortC
Porta = Lookup(o(1) , Segmen)                               'Keluarkan Data Puluhan Di PortC
Waitms 300
Loop

Segmen:
Data &HC0 , &HF9 , &HA4 , &HB0 , &H99 , &H92 , &H82 , &HF8 , &H80 , &H90

download
http://adf.ly/1ZKzdu
http://adf.ly/1ZKzTs
Password Rar: ganyang-angkara.blogspot.com

moga bermanfaat bagi agan-agan yang ingin mencobanya,
moga berhasil mencobanya..

*..sesama blogger harus saling menghargai, jika agan-agan ingin mengcopas harap cantumkan alamat urlnya, Terimakasih..*