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 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.

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.
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:
; -------------------------------------------------------------
; 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
[caption id="" align="aligncenter" width="300"]
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.
Rangkaian Satu Seven Segmen pada port 0 mikrokontroller AT89Sxx
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 :
- Komputer PC yang mempunyai port Serial …….. 1 buah
- Programmer DT-HQ ………………………………….. 1 buah
- Board Peraga Mikrokontroler ………… .....……………. 1 set
- Perangkat Lunak Kompiler ASM51 atau HB2000 ....……1 paket
- 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
Related articles
- History and Architecture of Microprocessors (invent.answers.com)
- What Is a Microprocessor (isuruma.wordpress.com)
Komentar
Posting Komentar