1000 kişiden bir kişi için ! devam.... 320volt blog

Elektronik Devreler Projeler » Atmel devreleri bilgiler »

8051 mikrodenetleyici ile aşağı yukarı sayıcı devresi

8051-atmel-asagi-yukari-sayici-devresi

Hazırlayan: Erkan ÇAĞLAR keil kod ve proteus simülasyon dosyaları proje-asagi-yukari-sayici-devresi Emeği geçen Kişilere Teşekkürler

8051 ile AŞAĞI YUKARI SAYICI

Bu devrenin temel prensibi tuş takımından girilen sayıya göre aşağı veya yukarı sayma yapmasıdır. Aşağı sayma yapabilmesi için tuş takımından # basılması ve yukarı sayma yapabilmesi için ise * basılması gerekir.

8051 programlanırken dikkat edilmesi gereken hususlar tuş takımının algılanması, TIMER doğru şekilde kullanılmasıdır.

Sayıcı devre şeması
program-denetleyiciler-8051-labaratuar-projesi

Devrede Kullanılan Elemanlar

  • At89c81RC2 (1 adet)
  • 7447 (BCD den 7 Segment dönüşüm sürücüsü) (2 adet)
  • 7 Segment Display (2 adet)
  • Tuş Takımı (1 adet)
  • 330ohm (14 adet)
  • 8.2Kohm (1 adet)
  • 22pF (2 adet)
  • 10uF (1 adet)
  • XTAL 12MHz (1 adet)

Kullanılan Elemanlara Ait Bacak Bağlantıları

7447-entegresine-ait-bacak-baglantisi
7447 entegresine ait bacak bağlantısı

ortak-anod-7-segment-display-bacak-baglantisi
Ortak Anod 7 Segment Display bacak bağlantısı

Keil Programın Kodları

#include 
#define segment   P1     // Onlar basamağına ait çıkış
#define KLAV      P2      // Tuş takımı

int birler_basamagi,onlar_basamagi,kare_tusu;
int girilen_sayi,onlar_basamagi;
int tekrar	;
bit say;
int o;

void tarama() interrupt 1
// Her 1msn'de kesme oluşur (Gösterge taramasının oluşturulması)
{	

  TH0=0xFC;	TL0=0x17; // 1 msn için yükleme

    P3=birler_basamagi;
    segment=onlar_basamagi;
}

void sure() interrupt 3
{ // Her 50 msn'de kesme oluşur. 1 sn'lik süre elde etmek için
  int sayac;
  TH1=0x3C; TL0=0xAF; //50 msn için yükleme
  sayac++;
  if (sayac==20)// 50msn x 20 = 1 sn değeri için
  {
    sayac=0;

	   if (o==11) //# tuşuna basılmış ise
	{
	tekrar--;
    if (tekrar>=0)
    { //Aşağı sayma işlemi
      if(birler_basamagi==0)
      {
	  birler_basamagi=9;
	  if(onlar_basamagi==0)
	    onlar_basamagi=9;
 	  else
	    onlar_basamagi--;
      }
      else
        birler_basamagi--;
    }
	else
    {   // 0'a ulaşıldı ise
      TR1=0;	           // T1 zamanlayıcısını durdur
      girilen_sayi=0;   // Bir sonraki giriş için sayıyı sıfırla
    }
   }

	 else if (o==10)//* tuşuna basılmış ise
	{
	tekrar++;
    if (tekrar<=99)
    {  // Yukarı sayma işlemi
      if(birler_basamagi==9)
      {
	  birler_basamagi=0;
	  if(onlar_basamagi==9)
	    onlar_basamagi=0;
 	  else
	    onlar_basamagi++;
      }
      else
        birler_basamagi++;
    }
	else
    {   // 99'a ulaşıldı ise
      TR1=0;	           // T1 zamanlayıcısını durdur
      girilen_sayi=0;   // Bir sonraki giriş için sayıyı sıfırla
    }
   }
  }
}

unsigned char klavyeOku(void)
{   // Keypad'ten girilen sayının tespiti
  unsigned char i = 0;
  unsigned char x = 0;
 /*Sırasıyla Birinci,ikinci ve üçüncü sütuna sıfır göndermek için
    gerekli tablo */
  unsigned tablo[] = {0x7f,0xbf,0xdf};
  KLAV = 0x0F;                   // Satırların hepsi 1
  while((KLAV & 0x0F) == 0x0F)   // Bir tuşa basılana kadar dön
    ;

  for(i=0; i < 3;i++)
  {
    KLAV = tablo[i];     // Sütunlara sırasıyla sıfır gönder
    x = KLAV & 0x0F;     // Satırların tespiti için son dört
                         // bitin elde edilmesi
    switch(x)
    {
      case 7:   // D satırı aktif (*, 0 veya # tuşlarından biri)
      {
        while((KLAV & 0x0F) != 0x0F);//Buton bırakılana kadar dön
        if (i==1) // Basılan Tuş 0 ise
        {
		return 0;	//Sıfır değerini gönder
		}
		else if(i==0)
		{
		 say=1; // Sayma işleminin yetkilendirilmesi
		 return 10;	//* tuşuna basıldığında 10 değerini gönder
		}
		else if(i==2)
		{
		 say=1; // Sayma işleminin yetkilendirilmesi
		 return 11;	//# tuşuna basıldığında 11 değerini gönder
		}
      }
      break;

      case 11:  // C satırı aktif (7, 8 veya 9 tuşlarından biri)
      {
        while((KLAV & 0x0F) != 0x0F);//Buton bırakılana kadar dön
        return 7+i;	 // (i'ye göre 7,8 veya 9 değerini gönder)
      }
      break;

      case 13: // B satırı aktif (4, 5 veya 6 tuşlarından biri)
      {
        while((KLAV & 0x0F) != 0x0F);//Buton bırakılana kadar dön
	 return 4+i;	 // (i'ye göre 4,5 veya 6 değerini gönder)
      }
      break;

      case 14:  // A satırı aktif (1, 2 veya 3 tuşlarından biri)
      {
        while((KLAV & 0x0F) != 0x0F);//Buton bırakılana kadar dön
        return 1+i;	 // (i'ye göre 1,2 veya 3 değerini gönder)
      }
      break;
    }
  }
}

void main(void)
{
  TMOD=0x11;  // T0 16-bit zamanlayıcı,T1 16-bit zamanlayıcı
  TH0=0xFC;   // Gösterge tarama frekansı için 1000 (1 msn)
  TL0=0x18;   // 65536-1000=64536 Hex karşılığı 0xFC18
  TH1=0x3C;   // 1 sn'lik süre elde etmek için 50000x20 saymalı
  TL1=0xB0; // 65536-50000=15536  Hex karşılığı 0x3CB0
  ET0=1;    // T0 kesmesinin yetkilendirilmesi
  ET1=1;    // T1 kesmesinin yetkilendirilmesi
  TR0=1;    // T0'ın çalıştırılması
  EA=1;	    // Bütün kesmelerin yetkilendirilmesi
  while(1)
  {
    onlar_basamagi=klavyeOku(); // Keypadden onlar basamağını gir
    birler_basamagi=klavyeOku();//Keypadden birler basamağını gir
    girilen_sayi=(10*onlar_basamagi)+birler_basamagi; // sayı 

    kare_tusu=klavyeOku(); // # yada * tuşlarının tespiti
	o=kare_tusu;
    if (kare_tusu==11 && say==1 || kare_tusu==10)
    { // * veya # tuşuna basıldı ise
      TR1=1;	//T1 i çalıştır
      say=0;	//Sayma yetkilendirmeyi sıfırla
      tekrar=girilen_sayi;
    }

  }
}

sakla feedmail facebook twit  

Yazar: gevv

Yazarımızın 320volt.com Blog üzerinde şu an okuduğunuz yazı dahil 1893 yazısı bulunmaktadır. Yazarımız hakkında bilgileri ve diğer yazılarını görmek için bakınız;

online elektronik komponent satışı

Yorum yapın

Doğrulama: (kutuyu işaretleyiniz)


  • Lütfen Türkçe imla kurallarına dikkat etmeye özen gösteriniz.
  • Yorumunuz yönetici tarafından kontrol edilmeden yayımlanmaz.
  • Paylaşılan devrelerin malzeme listesini istemeyiniz. Olsa zaten paylaşılırdı şema üzerinden listeyi çıkartabilirsiniz
  • Gavatar sitesine avatarınızı yükleyebilirsiniz.
sponsor

sponsor

diptrace

diptrace

sponsor

sponsor

embeddedtrading

embeddedtrading

sponsor

sponsor

seo

Seo Danışmanlığı

feed save face twit  
Translate: TürkçeEnglish

Forum Son İletiler