Port0 dan gelen veriler 7447 entegresinde kodlanıp 7-segment display’lere ulaşır.7447 entegresi mikrodenetleyiciden gelen binary kodunu 7 segment display’de göstermek için kullanılmıştır.
Yani 0000 geldiğinde a,b,c,d,e,f ledleri yanar g edi yanmaz.7 segment display’ler birbirlerine paralel bağlanmıştır.Paralel 7 segment display’lere aynı veri yolunu kullanarak farklı zamanlarda değişik 7 segment display’leri seçerek o anlık hangi display seçilmişse ona ait veriler gider.
Uygulamada ortak anot 7 segment displayler kullanılmıştır. Port2 nin uçları transistorlerin beyzlerine bağlıdır.Transistörler display’leri sürmeye yarar.yani bir displaylerden birini seçmeye yarar. Port3 teki butonlar yardımıyla saat,dk,alarm ayarları yapılır.
Port1.0 a alarm takılmıştır. Butonlarda butonun bir ucu mikrodenetleyiciye diğer ucu ise topraklamada kullanılıyor. Dirençler’in özelliği ise butona basılmadığında mikrodenetleyiciye 1 sinyali göndermektir. Yani buton aktif 0 ile mikrodenetleyiciyi tetikliyor.
Programda ise TMOD’u 2’ye kurduk ve TH0 ve TL0’da -100 kurduk.Yani 100µs olacak şekilde bir interrupt yani kesme olsun dedik.IE=82ye kurduk. 10000010.Program olağan akışındayken her 100 µs’de bir kesme olacak ve o kesmede de bir sayaç kurduk.
Bu sayacı da 10000’e kurduk.Yani 100×10000 µs=1000 ms=1 sn oldu.Gerçek zaman olarak 1 sn’de 1 programdaki saniye değişkenini arttırdık.sn++ ve sn değişkeni 60 olduğunda dakikayı arttır ve sn=0 olsun dk=60 olduğunda ise st’ı arttır ve dk=0 olsun. st=24 ise st=0 olsun
Uygulamada Kullanılan Malzemeler
- 6x ortak anot 7-segment display
- 1x 89C51 entegre
- 1x alarm
- 1x 7447 entegre
- 1x 7805 entegre
- 1x 12 MHz kristal
- 2x 33 pF kondansatör
- 1x 10µF kondansatör
- 1x soket
- 1x 10×10 plaket
- 7x 3906 transistör
- 7x 2.2 K direnç
- 5x 1 K direnç
- 1x 8.2 K direnç
- 4x buton
- 1x anahtar
- 2x klemens
- 8x 330? direnç
- 1x 9V pil+kablosu
C Programı
#includeint don=0,sn=0,dk=0,st=0,k=1,say=0,a=0,alrm=0; int asn=0,adk=0,ast=0,gsn=0,gdk=0,gst=0; timer_isr () interrupt 1 { don++; if (don>=10000){ don=0; sn++; if (sn==60) {sn=0; dk++;} if (dk==60) {dk=0; st++;} if (st==24) {st=0;} } } void main(void) { // Zamanlayici ve Kesmelerin kurulumu TMOD = 0x02; /* TMOD */ IE = 0x82; TH0=-100; TL0=-100; TR0 = 1; /////////dahili keseme sayici while(1){ k <<=1; if (k>=128)k=2; P2=~k; /////saat displaya göster if (P3_4) {gst=st;gdk=dk;gsn=sn;} else {gst=ast;gdk=adk;gsn=0;} if (k==64) P0=gst/10; if (k==2) P0=gst%10; ///dakika displaya göster if (k==4) P0=gdk/10; if (k==8) P0=gdk%10; ///saniye displaya göster if (k==16) P0=gsn/10; if (k==32) P0=gsn%10;//birler ////saat ayar if ((!P3_3)&&(!P3_5)) {say++; if (say>=100) {say=0; st++;if (st>=24)st=0;}} if ((!P3_3)&&(!P3_6)) {say++; if (say>=100) {say=0; dk++;if (dk>=60)dk=0;}} //// alarm ayar if ((!P3_4)&&(!P3_5)) {say++; if (say>=100) {say=0; ast++;if (ast>=24)ast=0;}} if ((!P3_4)&&(!P3_6)) {say++; if (say>=100) {say=0; adk++;if (adk>=60)adk=0;}} // alarm çal if ((st==ast)&&(dk==adk)&&(!P3_7)) {alrm++;if(alrm>=200){alrm=0; P1_0=~P1_0;}} else {P1_0=1;} for (a=0;a<=100;a++); } }
Hazırlayan: Neşe Horasan Emeği geçen Kişilere Teşekkürler.
Şifre-Pass: 320volt.com
Yayım tarihi: 2009/01/01 Etiketler: 7 segment, anot, AT89C51, atmel avr projeleri, atmel devreleri, display, mikrodenetleyici, Saat
yukarıda verdiğiniz 89c51 ile sayısal saat devre şemasındaki malzemeler ile listedeki malzemeler farklı. bu devre şemaya göre kurulunca çalışlıyor mu ? liste mi şema mı yanlış?
Merhaba mplab ile yazılmış saat kodu var mı