PIC İLE SAYISAL KLAVYE YAPIMI

PIC ile ileri düzey uygulama örnekleri. PIC16F877 ve CCS C kullanarak sayısal değerler giren klavye yapımı. 1 – 9 arası rakamları ASCII kodlarıyla okuyan ve Lcd ekrana yazan PIC uygulaması. 


PIC ile klavye yapımının 2. Bölümündeyiz. Bu bölümde PIC mikro denetleyiciye ASCII kodları ile sayısal değerler göndereceğiz. PIC16F877 bu değerleri okuyacak ve LCD ekrana karşılık gelen sayıyı yazdıracak. Uygulamanın program kodlarını CCS C derleyicisi ile yazdık

 10 adet buttonumuz olacak. 1. Uygulamada sadece 1 portu 1 yapıyorduk ve d portlarını topluca okuyorduk Bu uygulamada yine d portlarını topluca okuyacağız ama okuduğumuz değer ASCII kodları olacak. Peki PIC işlemcisine ASCII kodlarını nasıl göndereceğiz? Bunu ben diyotlarla yaptım. Bilindiği gibi diyotlar elektrik enerjisini tek yönlü geçiren yarı iletken malzemelerdir. Ben de bu malzemelerden yararlandım. Ayrıca diyotların ters polarize olmasını engellemek için her buttona ait diyot grubu bir direnç üzerinden topraklanmıştır. Topraklamayı yapmazsanız buttonlar karışır ve işlevini yapamaz. Bilgisayar ortamı sanal ortamdır, gerçek dünyadaki uygulama bilgisayar ortamındaki uygulamayı birebir tutmaz, bu nedenle gerçek uygulamada bazı değerleri değiştirmek zorunda kalabilirsiniz. Ben bilgisayar uygulamasında 1k lik direnç kullandım. Siz eğer bu uygulamayı gerçek anlamda yaparsanız uygun dirençler kullanın. Eğer 1 k’lik dirençlerle doğru sonucu elde edemezseniz daha küçük ve daha büyük dirençler kullanın. İlk beş buttonda doğru çalışan direnç değeri ondan sonra da doğru gidecektir. Diyotlar diğer buttonların tele verdiği enerjinin kendi buttonlarına geçerek diğer telleri de 1 yapmasını engellemektedirler. Böylece 10 adet button 6 adet teli bir tek kendisi varmış gibi kullanabilecek.


CCS kodlarında LCD’ye her bilgi gönderiminden sonra 50 ms bekletiyoruz, aksi halde her basışta ardı ardına karakterleri yazar. Böylece siz buttonu bırakıncaya kadar zaman kazanıyorsunuz. Basılı tutmaya devam ederseniz sürekli aynı karakteri yazmaya devam eder.

Diyotların bağlantı şekli aşağıdadır.


En soldaki diyot 25 pinine 2. Diyot 26 pinine gidiyor. Böylece 48 yazacaktır. PIC bunu okuyacak ve ekrana 0 yazacaktır. 2 button 49 yazacaktır. Bu button 48 yazmak için bir diyot aracılığı ile 1. Buttonun diyotlarını kullanmıştır. 1 sayısını ise 1 diyotla B7 pinine göndermiştir.

Devrenin tam şeması

numeric1 


Buttonların pinlere giden kablolara bağlanışı.

numeric2


Tüm parçaların şemasına yer vermedik. Eğer isterseniz yorum kısmından bize bildirin. Ayrı bir sayfada ayrıntılı şemasını açıklayarak verebiliriz.

Bundan sonraki uygulamamız alfa-numerik karakterleri göstermek üzerine olacaktır. LCD'ye alfabetik ve sayısal değerler yazdıran bir klavye yapacağız.

Program kodları aşağıdadır, kolay gelsin.

#define LCD_RS_PIN PIN_D0
#define LCD_RW_PIN PIN_D1
#define LCD_ENABLE_PIN PIN_D2
#define LCD_DATA4 PIN_D3
#define LCD_DATA5 PIN_D4
#define LCD_DATA6 PIN_D5
#define LCD_DATA7 PIN_D6
#include <16F877A.h>
#use delay(crystal=8000000)
#include <lcd.c>

 #fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD 

int portread();
int deger=0;
int i=0;
int wait=50;
void main()
{
     set_tris_b(0x00); 
      set_tris_a(0xFF);
      output_b(0x00);      
      output_a(0x00);
      output_d(0x00);
  lcd_init();
  lcd_putc('\f'); 
  while(TRUE)
  {
  deger=portread();
    
    if(deger==48)
    {
      lcd_gotoxy(i+1, 1);           
      lcd_send_byte(1,0x30);
      delay_ms(wait);
      i++;
    }
    if(deger==49)
    {
      lcd_gotoxy(i+1, 1);           
      lcd_send_byte(1,0x31);
      delay_ms(wait);
      i++;
    }
    if(deger==50)
    {
      lcd_gotoxy(i+1, 1);           
      lcd_send_byte(1,0x32);
      delay_ms(wait);
      i++;
    }
     if(deger==51)
    {
      lcd_gotoxy(i+1, 1);           
      lcd_send_byte(1,0x33);
      delay_ms(wait);
      i++;
    }
     if(deger==52)
    {
      lcd_gotoxy(i+1, 1);           
      lcd_send_byte(1,0x34);
      delay_ms(wait);
      i++;
    }
     if(deger==53)
    {
      lcd_gotoxy(i+1, 1);           
      lcd_send_byte(1,0x35);
      delay_ms(wait);
      i++;
    }
     if(deger==54)
    {
      lcd_gotoxy(i+1, 1);           
      lcd_send_byte(1,0x36);
      delay_ms(wait);
      i++;
    }
     if(deger==55)
    {
      lcd_gotoxy(i+1, 1);           
      lcd_send_byte(1,0x37);
      delay_ms(wait);
      i++;
    }
     if(deger==56)
    {
      lcd_gotoxy(i+1, 1);           
      lcd_send_byte(1,0x38);
      delay_ms(wait);
      i++;
    }
     if(deger==57)
    {
      lcd_gotoxy(i+1, 1);           
      lcd_send_byte(1,0x39);
      delay_ms(wait);
      i++;
    }
   
    
  }
}
int portread()
{
   int sayi=0;
   if(input_b()==0b00001100)
   {
      sayi=48;
   }
   if(input_b()==0b10001100)
   {
      sayi=49;
   }
   if(input_b()==0b01001100)
   {
      sayi=50;
   }
   if(input_b()==0b11001100)
   {
      sayi=51;
   }
   if(input_b()==0b00101100)
   {
      sayi=52;
   }
   if(input_b()==0b10101100)
   {
      sayi=53;
   }
   if(input_b()==0b01101100)
   {
      sayi=54;
   }
   if(input_b()==0b11101100)
   {
      sayi=55;
   }
   if(input_b()==0b00011100)
   {
      sayi=56;
   }
   if(input_b()==0b10011100)
   {
      sayi=57;
   }
   
   
   return sayi;
}


PIC İle Alfa - Numerik Klavye Yapımı


SANATSAL BİLGİ

12/03/2019

  • YORUM YAZ
  • ADI SOYADI(veya nick)
  • YORUM


  • BİLGİSAYAR - ELEKTRİK
  • YGS - LYS KONULARI
  • 8. SINIF
  • 7. SINIF
  • 6. SINIF
  • GENEL MATEMATİK
  • BİRİM ÇEVİRİCİLER
COPYRIGHT© HER HAKKI SAKLIDIR
Sitede Yer Alan Bilgi Belge Ve Materyallerin İzinsiz olarak Kopyalanması ve Alıntılanması Yasaktır

SANATSAL BILGI