Elektronik / Mikrodenetleyici Projeleri/

89C51 7 Segment Display Kullanarak Sayısal Saat

Sponsorlu Bağlantılar

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.

7segment-display-sayisal-saat-projesi sayisal-saat-devre-isis-semasi

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

Hazırlayan: Neşe Horasan Proje Dosyaları 89C51 7 Segment Display Kullanarak Sayısal Saat

Dosya indirme LINK listesi (TXT formatında) link-4750.zip şifre-pass: 320volt.com
Emeği geçen Kişilere Teşekkürler

C Programı

#include 
int 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++);
}
}
  • mehmet

    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ış?

  • Zeynep Subaşı

    Merhaba mplab ile yazılmış saat kodu var mı