Menampilkan Angka dengan 7 Segmen Melalui Mikrokontroller

Oleh Ipung Nurdianto / 11.11.2328 / TI 11 A

[caption id="" align="aligncenter" width="300"]Italiano: Primo microprocessore Intel, l'Intel... Italiano: Primo microprocessore Intel, l'Intel 4004. (Photo credit: Wikipedia)[/caption]

Teori Singkat

Ada dua jenis seven segmen yaitu : Common Katoda dan Common Anoda. Common Katoda adalah seven segmen yang setiap katoda LED-nya disambung bersama sehingga hanya yang keluar hanya stau pin saja yang keluar yang diberi nama Common.  Data untuk seven segmen common katoda dimasukkan pada setiap anoda LED. Begitu juga untk Common Anoda,  semua anoda LED-nya disambungkan bersama, sehingga data akan dimasukan pada masing-masing kotoda.

Pada percobaan ini akan dibangun program untuk menampilkan data angka dengan Seven segmen COMMON ANODA yang terpasang pada port P0 mikrokontroler AT89S51.Untuk membangun program harap diperhatikan koneksi antara pin seven segmen dengan pin port P0 tersebut. Koneksi pin antara keduanya adalah sebagai berikut :

Pin a -> pin P0.0,                    Pin b -> pin P0.1,        Pin c -> pin P0.2,        Pin d -> pin P0.3,

Pin e -> pin P0.4,                    Pin f -> pin P0.5,        Pin g ->  pin P0.6,        Pin h ->  pin P0.7.

seven3          seven2

rangkaianRangkaian Satu Seven Segmen pada port 0 mikrokontroller AT89Sxx



rangkaian3Rangkain Tiga Seven Segmen



Sebelum memprogram tampilan seven segmen perlu disusun data untuk masing angka yang akan ditampilkan. Sesuai dengan koneksi pin-pin perangkat kerasnya dan common pin dari seven segmen seperti gambar seven segmen tunggal, maka dapat disusun table data untuk tampilan masing-masing angka seperti table 1.




























































TAMPILAN ANKGA



KOMPOSISI DATA(h,g,f,e,d,c,b,a)



DATA (HEXA)



0



1100 0000



C0



1



1111 1001



F9



2



1010 0100



A4



3



1011 0000



B0



4



1001 1001



99



5



1001 0010



92



6



1000 0010



82



7



1111 1000



F8



8



1000 0000



80



9



1001 0000



90




Untuk memperogram tampilan sebuah angka pada seven segemen dilakukan dengan mengirimkan data yang sudah disusun tadi melalui port, seperti potongan ptogram berikut .

 



       mov  A,#00111111b                    ; isi Reg A dengan C0H (angka 0)

       mov  P0,A                                    ; Kirim data dari A  ke |P0



Menampilkan angka sacara berurut dilakukan dengan cara mengirimkan komposisi data melaluim port sepaket demi sepaket dan yang diselingi dengan delay. Artinya setelah sebuah angka tampil harus ditahan dulu sebentar baru dikrimkan data beriktunya. Jika anda ingin menampilkan angka secara berurut turun  maka dapat dilakukan dengan mengirimkan data mulai dari komposisi data angka 9 menuju ke angka 0.

Persoalan berikutnya adalah menampilkan angka lebih dari satu. Sebenarnya angka yang ditampikan tetap satu demi satu juga, tetapi ditampilkan secara bergantian dengan kecepatan 50 kali setiap detik. Yang perlu diperhatikan juga adalah bahwa tampilan bukan sekedar hanya bergantian tetapi yang lebih penting lagi adalah posisi tampilan angka tersebuat harus sesuai dengan bobotnya, apakah angka itu satuan, puluhan atau ratusan.

Untuk memprogram tampilan  tiga buah seven segmen seperti rangkain 3. dimana ketiga pin common tidak digabung lagi tetapi masing-masing common disambungkan ke pin P2.0, P21 dan P2.2. Tujuannya adalah agar masing-masing seven segmen dapat dinyalakan sendiri-sendiri. Data untuk kedua seven segmen dimasukkan pada saluran yang sama. Dengan demikian kedua port  P0 dan P2 harus diprogram secara bersama. Agar angka satuan tampil pada seven segmen satuan maka common seven segmen satuan harus diberi logika 1 sedangkan common yang lain harus berlogika 0. Begitu juga untuk menampilkan angka puluhan maka  common seven segmen puluhan yang diberi logika 1 sedangkan common yang satuan diberi logika 0. Kemudian yang amat penting adalah bahwa angka satuan dan puluhan dan ratusan ditampilkan dengan cara brganti dengan frekuensi lebih besar dari batas penglihatan manusia ( >25 kali / detik). Berikut potongan program tampilan dua angka pada seven segmen common anoda yang dirangkai seperti gambar 3:

 


Ulang:    mov    A,#0A4H                       ; isi Reg. A dengan A4H (angka 2)
                 mov  P0,A                     ; isi kirim data dari A ke port P0
                 mov P2,#00000001b            ; NYALAKAN ANGKA SATUAN
                 call delay                ; panggil waktu tunda
                
                 mov    A,#0F8H                ; isi Reg. A dengan F8H (angka 7)
                 mov  P0,A                     ; isi kirim data dari A ke port P0
                 mov P2,#00000010b             ; NYALAKAN ANGKA PULUHAN
                 call delay                ; panggil waktu tunda
 
                 mov    A,#92H                 ; isi Reg. A dengan 92H (angka 5)
                 mov  P0,A                     ; isi kirim data dari A ke port P0
                 mov P2,#00000100b             ; NYALAKAN ANGKA RATUSAN
                 call delay                ; panggil waktu tunda
          jmp ulang              ; tampilkan berulang-ulang



 Alat dan Bahan :




  1. Komputer PC yang mempunyai port Serial  ……..            1 buah

  2. Programmer DT-HQ …………………………………..    1 buah

  3. Board Peraga Mikrokontroler ………… .....……………. 1 set

  4. Perangkat Lunak Kompiler ASM51 atau HB2000 ....……1 paket

  5. Perangkat Lunak ISP Programming  ................................ 1 paket



Listing Program  :





 POGRAM 1



; -------------------------------------------------------------

; Menampilkan angka 0 s/d 9     dengan seven segmen  yang tersambung pada port P0

; dengan cara : Data langsung dikeluarkan ke port yang bersangkutan

; -------------------------------------------------------------

Org          0h

Mulai:

Mov     P0,#0C0h        ; keluarkan kode angka 0 Port 0

Acall    Delay               ; panggil sub routine Delay

Mov     P0,#0F9h         ; keluarkan kode angka 1 Port 0

Acall    Delay               ; panggil sub routine Delay

Mov     P0,#0A4h        ; keluarkan kode angka 2 Port 0

Acall    Delay               ; panggil sub routine Delay

Mov     P0,#0B0h        ; keluarkan kode angka 3 Port 0

Acall    Delay               ; panggil sub routine Delay

Mov     P0,#099h         ; keluarkan kode angka 4 Port 0

Acall    Delay               ; panggil sub routine Delay

Mov     P0,#092h         ; keluarkan kode angka 5 Port 0

Acall    Delay               ; panggil sub routine Delay

Mov     P0,#082h         ; keluarkan kode angka 6 Port 0

Acall    Delay               ; panggil sub routine Delay

Mov     P0,#0F8h         ; keluarkan kode angka 7 Port 0

Acall    Delay               ; panggil sub routine Delay

Mov     P0,#080h         ; keluarkan kode angka 8 Port 0

Acall    Delay               ; panggil sub routine Delay

Mov     P0,#090h         ; keluarkan kode angka 9 Port 0

Acall    Delay               ; panggil sub routine Delay

Sjmp    Mulai               ; Lompat ke alamat dg label Mulai

;-------------------

; sub routine delay

;-------------------

Delay:  Mov     R0,#0FFh        ; Isi Register R0 dengan FF (Hex)

Delay1: Mov   R1,#0FFh        ; Isi Register R1 dengan FF (hex)

Delay2: Djnz   R1,Delay2       ; Kurangi R1 dengan 1, bila hasil belum

; sama dengan 0 maka lompat ke Delay2

Djnz    R0,Delay1       ; Kurangi R0 dengan 1, bila hasil belum

; sama dengan 0 maka lompat ke Delay1

Ret                                      ; Kembali ke alamat setelah perintah

; 'Acall Delay'

End

PROGRAM 2

; -------------------------------------------------------------

; Menampilkan angka 0 s/d 9     dengan seven segmen  yang tersambung pada port P0

; dengan cara : Data diambil dengan pointer LOOKUP TABLE

; -------------------------------------------------------------

Org          0h

Mulai:

Mov     R2,#10            ; jumlah angka numerik

Mov     DPTR,#Numerik         ;

Nextdata:

Clr       A

Movc   A,@A+DPTR

Mov     P0,A                ; keluarkan data A ke port 0

Inc       DPTR

Acall    Delay               ; panggil sub routine delay panjang

Djnz    R2,Nextdata   ; Kurangi R2 dengan 1, bila hasil belum

; sama dengan 0 maka lompat ke Nextdata

Sjmp    Mulai               ; Lompat ke alamat dg label Mulai

;-------------------

; sub routine delay

;-------------------

Delay:  Mov     R0,#0FFh        ; Isi Register R0 dengan FF (Hex)

Delay1: Mov   R1,#0FFh        ; Isi Register R1 dengan FF (hex)

Delay2: Djnz   R1,Delay2       ; Kurangi R1 dengan 1, bila hasil belum

; sama dengan 0 maka lompat ke Delay2

Djnz    R0,Delay1           ; Kurangi R0 dengan 1, bila hasil belum

; sama dengan 0 maka lompat ke Delay1

Ret                                        ; Kembali ke alamat setelah perintah

; 'Acall Delay'

;--------------------------

; Lokasi data

;--------------------------

Numerik:

DB      0C0h,0F9h,0A4h,0B0h,99h,92h,82h,0F8h,80h,90h

End

PROGRAM 3

; ------------------------------------------------------

; Program untuk menghidupkan Display 3 x 7 Segment ANGKA BERURUT  DARI 0-225

; ------------------------------------------------------

Org      0h

;----------- variables -----------

ratusan          equ 30h

puluhan        equ 31h

satuan           equ 32h

angka            equ 33h

;---------- main program ---------

mulai:     mov angka,#0

loop1:     mov r0,#40

loop2:     mov a,angka

mov b,#0ah

div ab

mov satuan,b

mov b,#0ah

div ab

mov puluhan,b

mov ratusan,a

;

Mov  DPTR,#numerik          ;

Mov  A, satuan

Movc   A,@A+DPTR

Mov     P0,A                ; keluarkan data A ke port 0

Mov P2,#01H

Acall    Delay               ; panggil sub routine delay panjang

;

Mov  A, puluhan

Movc   A,@A+DPTR

Mov     P0,A                ; keluarkan data A ke port 0

Mov P2,#02H

Acall    Delay               ; panggil sub routine delay panjang

;

Mov  A, ratusan

Movc   A,@A+DPTR

Mov     P0,A                ; keluarkan data A ke port 0

Mov P2,#04H

Acall    Delay               ; panggil sub routine delay panjang

djnz r0,loop2

inc angka

sjmp loop1

;-------------------

; sub routine delay

;-------------------

Delay:  Mov     R0,#05h          ; Isi Register R0 dengan 05 (Hex)

Delay1: Mov   R1,#0FFh        ; Isi Register R1 dengan FF (hex)

Delay2: Mov   R2,#0FFh

Djnz R2,$

Djnz   R1,Delay2      ; Kurangi R1 dengan 1, bila hasil belum

; sama dengan 0 maka lompat ke Delay2

Djnz    R0,Delay1       ; Kurangi R0 dengan 1, bila hasil belum

; sama dengan 0 maka lompat ke Delay1

Ret                              ; Kembali ke alamat setelah perintah

; 'Acall Delay'

;--------------------------

; Lokasi data

;--------------------------

Numerik:

DB      0C0h,0F9h,0A4h,0B0h,99h,92h,82h,0F8h,80h,90h

End

Demikian postingan mengenai seven segmen yang bisa saya sampaikan. Terima kasih.

Sumber artikel : http://edidaspdg.files.wordpress.com/2010/01/job-11-menampilkan-angka-seven-segmen-dengan-mikrokontroler.doc



Komentar