pic16f877 + keypad + iki tane 7-segment (yardim edin)

Başlatan suleymanq, 06 Mayıs 2013, 17:42:36

suleymanq

Merhabalar! Projem yarimda kaldi c dili eksikligimden dolayi bitiremiyorum yardiminiza ihtiyacim var. Resimde goruldugu gibi keypadta girilen sayi PORTB birinci 7-segmente gonderiliyor.
Amacim ise ilk girilen sayi birinci 7-seg ikinci girilen sayi ikinci 7-segmente yazmak yani 99'a kadar istedigim sayi girmek.



C kod:

/******************************************************
      PIC16F877 ile Tuþ Takýmý Uygulamasý-1
      PIC PROG/DEKA     : Port B jumper'ý LED konumunda olmalý
*******************************************************/
#include <16f877.h>     // Kullanýlacak denetleyicinin baþlýk dosyasý tanýtýlýyor.

// Denetleyici konfigürasyon ayarlarý
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000) // Gecikme fonksiyonu için kullanýlacak osilatör frekansý belirtiliyor.

#use fast_io(b) //Port yönlendirme komutlarý B portu için geçerli
#use fast_io(d) //Port yönlendirme komutlarý C portu için geçerli

#byte   portb=0x06   // B portu "tus" ismine eþitleniyor.

#define sut1   pin_d0 // sut1 ifadesi pin_d0 ifadesine eþitleniyor
#define sut2   pin_d1 // sut2 ifadesi pin_d1 ifadesine eþitleniyor
#define sut3   pin_d2 // sut3 ifadesi pin_d2 ifadesine eþitleniyor
#define sut4   pin_d3 // sut3 ifadesi pin_d2 ifadesine eþitleniyor

#define sat1   pin_d4 // sat1 ifadesi pin_d4 ifadesine eþitleniyor
#define sat2   pin_d5 // sat2 ifadesi pin_d5 ifadesine eþitleniyor
#define sat3   pin_d6 // sat3 ifadesi pin_d6 ifadesine eþitleniyor
#define sat4   pin_d7 // sat4 ifadesi pin_d7 ifadesine eþitleniyor

char tus=0; // karakter tipinde deðiþken tanýmlanýyor

//*********** Keypad Tarama Fonksiyonu *********
char keypad_oku() // Fonksiyon ismi
{
   output_d(0x00); // D portu çýkýþý sýfýrlanýyor

   output_high(sat1); // 1. satýr lojik-1 yapýlýyor
   if (input(sut1))   // 1. sütun okunuyor
      { delay_ms(20); tus=1; }
   if (input(sut2))   // 2. sütun okunuyor
      { delay_ms(20); tus=2; }
   if (input(sut3))   // 3. sütun okunuyor
      { delay_ms(20); tus=3; }
   if (input(sut4))   // 4. sütun okunuyor
      { delay_ms(20); tus=0xA; }
   output_low(sat1); // 1. satýr lojik-0 yapýlýyor

   output_high(sat2); // 2. satýr lojik-1 yapýlýyor
   if (input(sut1))   // 1. sütun okunuyor
      { delay_ms(20); tus=4; }
   if (input(sut2))   // 2. sütun okunuyor
      { delay_ms(20); tus=5; }
   if (input(sut3))   // 3. sütun okunuyor
      { delay_ms(20); tus=6; }
   if (input(sut4))   // 4. sütun okunuyor
      { delay_ms(20); tus=0xB; }
   output_low(sat2); // 2. satýr lojik-0 yapýlýyor

   output_high(sat3); // 3. satýr lojik-1 yapýlýyor
   if (input(sut1))   // 1. sütun okunuyor
      { delay_ms(20); tus=7; }
   if (input(sut2))   // 2. sütun okunuyor
      { delay_ms(20); tus=8; }
   if (input(sut3))   // 3. sütun okunuyor
      { delay_ms(20); tus=9; }
   if (input(sut4))   // 4. sütun okunuyor
      {delay_ms(20); tus=0x0C; }
   output_low(sat3); // 3. satýr lojik-0 yapýlýyor

   output_high(sat4); // 3. satýr lojik-1 yapýlýyor
   if (input(sut1))   // 1. sütun okunuyor
      { delay_ms(20); tus=0xE; }
   if (input(sut2))   // 2. sütun okunuyor
      { delay_ms(20); tus=0; }
   if (input(sut3))   // 3. sütun okunuyor
      { delay_ms(20); tus=0xF; }
   if (input(sut4))   // 4. sütun okunuyor
      {delay_ms(20); tus=0xD; }
   output_low(sat4); // 3. satýr lojik-0 yapýlýyor

   return tus; // Fonksiyon "tus" deðeri ile geri döner
}

/********* ANA PROGRAM FONKSÝYONU********/

void main ( )
{
   setup_psp(PSP_DISABLED);        // PSP birimi devre dýþý
   setup_timer_1(T1_DISABLED);     // T1 zamanlayýcýsý devre dýþý
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayýcýsý devre dýþý
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriþ yok
   setup_adc(ADC_OFF);             // ADC birimi devre dýþý

   set_tris_b(0x00);   // B portu komple çýkýþ
   set_tris_d(0x0F);   // Yüksek deðerlikli 4 bit çýkýþ, düþük deðerlikli 4 bit giriþ

   output_b(0x00); // Ýlk anda B portu çýkýþý sýfýrlanýyor

   while(1)  // Sonsuz döngü
   {
       portb=keypad_oku();  // Basýlan tuþ deðerini B portuna aktar
   }
}

haydarpasamikro

C dilinizde bir eksiklik yok. Bayağı yazmışsınız. Sadece programı devreye uyarlamak kalmış.
Mikro Dünyası.Haydarpaşa Teknik ve Endüstri Meslek Lisesi Mikrodenetleyici Atl. Şefi

suleymanq

Program calisiyor fakat sadece PORTB calisiyor yani birinci 7-seg calisiyor.
PORTC devre disi duruyor bunu aktif hale nasil getirebilirim hangi komut eklemem lazim?

subram

porgramda C portu için yönkendirme  yapılmamış. Sadece B ve D portu için yönlendirme var. C'yi de eklerseniz sorunun altından kalkarsınız.

#use fast_io(b) //Port yönlendirme komutlarý B portu için geçerli
#use fast_io(d) //Port yönlendirme komutlarý C portu için geçerli
http://www.elektronark.org  Türkiyede Elektronik Kültürünü Değiştirmeye Geliyoruz

serhat1990

C portu için CCP modunu kapatmalısınız hata burası ... CCP modunu kapattığınızda sorununuz çözülecektir ...

İyi çalışmalar dilerim ..


suleymanq

Alıntı yapılan: subram - 07 Mayıs 2013, 14:53:44
porgramda C portu için yönkendirme  yapılmamış. Sadece B ve D portu için yönlendirme var. C'yi de eklerseniz sorunun altından kalkarsınız.
Denedim ama olmadi, serhat1990'nin dedigi gibi bir sey daha var galiba yapilmasi gereken

Alıntı yapılan: serhat1990 - 07 Mayıs 2013, 15:00:30
C portu için CCP modunu kapatmalısınız hata burası ... CCP modunu kapattığınızda sorununuz çözülecektir ...

Tesekkur ederim hocam tam istedigim cevap aldim ama CCP'yi nasil kapatacagimi bilmiyorum nasil kapatayim onu

serhat1990

#6
Alıntı yapılan: suleymanq - 07 Mayıs 2013, 15:20:57
Denedim ama olmadi, serhat1990'nin dedigi gibi bir sey daha var galiba yapilmasi gereken

Tesekkur ederim hocam tam istedigim cevap aldim ama CCP'yi nasil kapatacagimi bilmiyorum nasil kapatayim onu

use_fast_io komutu sorunu çözmez burada . CCP modülü devre dışı bırakılınca ve C portu çıkış yapılınca sorunlar düzelecektir ... Komut olarak aşağıdakileri deneyebilirsiniz .. CCS C ' de artık yazmıyorum unutmuş olabilirim ama aşağıdakiler işinizi çözer diye düşünüyorum ...

setup_CCP1(CCP_OFF);
setup_CCP2(CCP_OFF);


Ayrıca C portunun giriş çıkış durumunu ayarlamamışsın .

Onuda eklemen gerekiyor ...

set_tris_c=0x00;



Kodlarına yazdığım bölümleri ekle düzelecektir.

İyi çalışmalar dilerim .

suleymanq

Ekledim, bu sefer PORTC aktif fakat sayi cikmiyor ne yapayim:)

#include <16f877.h>     // Kullanýlacak denetleyicinin baþlýk dosyasý tanýtýlýyor.

// Denetleyici konfigürasyon ayarlarý
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000) // Gecikme fonksiyonu için kullanýlacak osilatör frekansý belirtiliyor.

#use fast_io(c) //Port yönlendirme komutlarý B portu için geçerli
#use fast_io(d) //Port yönlendirme komutlarý C portu için geçerli

#byte   portc=0x06   // B portu "tus" ismine eþitleniyor.

#define sut1   pin_d0 // sut1 ifadesi pin_d0 ifadesine eþitleniyor
#define sut2   pin_d1 // sut2 ifadesi pin_d1 ifadesine eþitleniyor
#define sut3   pin_d2 // sut3 ifadesi pin_d2 ifadesine eþitleniyor
#define sut4   pin_d3 // sut3 ifadesi pin_d2 ifadesine eþitleniyor

#define sat1   pin_d4 // sat1 ifadesi pin_d4 ifadesine eþitleniyor
#define sat2   pin_d5 // sat2 ifadesi pin_d5 ifadesine eþitleniyor
#define sat3   pin_d6 // sat3 ifadesi pin_d6 ifadesine eþitleniyor
#define sat4   pin_d7 // sat4 ifadesi pin_d7 ifadesine eþitleniyor

char tus=0; // karakter tipinde deðiþken tanýmlanýyor

//*********** Keypad Tarama Fonksiyonu *********
char keypad_oku() // Fonksiyon ismi
{
   output_d(0x00); // D portu çýkýþý sýfýrlanýyor

   output_high(sat1); // 1. satýr lojik-1 yapýlýyor
   if (input(sut1))   // 1. sütun okunuyor
      { delay_ms(20); tus=1; }
   if (input(sut2))   // 2. sütun okunuyor
      { delay_ms(20); tus=2; }
   if (input(sut3))   // 3. sütun okunuyor
      { delay_ms(20); tus=3; }
   if (input(sut4))   // 4. sütun okunuyor
      { delay_ms(20); tus=0xA; }
   output_low(sat1); // 1. satýr lojik-0 yapýlýyor

   output_high(sat2); // 2. satýr lojik-1 yapýlýyor
   if (input(sut1))   // 1. sütun okunuyor
      { delay_ms(20); tus=4; }
   if (input(sut2))   // 2. sütun okunuyor
      { delay_ms(20); tus=5; }
   if (input(sut3))   // 3. sütun okunuyor
      { delay_ms(20); tus=6; }
   if (input(sut4))   // 4. sütun okunuyor
      { delay_ms(20); tus=0xB; }
   output_low(sat2); // 2. satýr lojik-0 yapýlýyor

   output_high(sat3); // 3. satýr lojik-1 yapýlýyor
   if (input(sut1))   // 1. sütun okunuyor
      { delay_ms(20); tus=7; }
   if (input(sut2))   // 2. sütun okunuyor
      { delay_ms(20); tus=8; }
   if (input(sut3))   // 3. sütun okunuyor
      { delay_ms(20); tus=9; }
   if (input(sut4))   // 4. sütun okunuyor
      {delay_ms(20); tus=0x0C; }
   output_low(sat3); // 3. satýr lojik-0 yapýlýyor

   output_high(sat4); // 3. satýr lojik-1 yapýlýyor
   if (input(sut1))   // 1. sütun okunuyor
      { delay_ms(20); tus=0xE; }
   if (input(sut2))   // 2. sütun okunuyor
      { delay_ms(20); tus=0; }
   if (input(sut3))   // 3. sütun okunuyor
      { delay_ms(20); tus=0xF; }
   if (input(sut4))   // 4. sütun okunuyor
      {delay_ms(20); tus=0xD; }
   output_low(sat4); // 3. satýr lojik-0 yapýlýyor

   return tus; // Fonksiyon "tus" deðeri ile geri döner
}

/********* ANA PROGRAM FONKSÝYONU********/

void main ( )
{
   setup_psp(PSP_DISABLED);        // PSP birimi devre dýþý
   setup_timer_1(T1_DISABLED);     // T1 zamanlayýcýsý devre dýþý
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayýcýsý devre dýþý
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriþ yok
   setup_adc(ADC_OFF);             // ADC birimi devre dýþý
   setup_CCP1(CCP_OFF);
   setup_CCP2(CCP_OFF);

   set_tris_c(0x00);   // B portu komple çýkýþ
   set_tris_d(0x0F);   // Yüksek deðerlikli 4 bit çýkýþ, düþük deðerlikli 4 bit giriþ

   output_c(0x00); // Ýlk anda B portu çýkýþý sýfýrlanýyor

   while(1)  // Sonsuz döngü
   {
      portc=keypad_oku();  // Basýlan tuþ deðerini B portuna aktar
  }
}

serhat1990

Porta değer atayınca istediğin çıkışı veriyor mu  ? Kodlarına baktım şimdi birşey göremedim.

suleymanq


serhat1990

#10
#include <16f877.h>     // Kullanýlacak denetleyicinin baþlýk dosyasý tanýtýlýyor.

// Denetleyici konfigürasyon ayarlarý
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000) // Gecikme fonksiyonu için kullanýlacak osilatör frekansý belirtiliyor.

#use fast_io(c) //Port yönlendirme komutlarý B portu için geçerli
#use fast_io(d) //Port yönlendirme komutlarý C portu için geçerli

#byte   portc=0x07   // C portu "tus" ismine eþitleniyor.

#define sut1   pin_d0 // sut1 ifadesi pin_d0 ifadesine eþitleniyor
#define sut2   pin_d1 // sut2 ifadesi pin_d1 ifadesine eþitleniyor
#define sut3   pin_d2 // sut3 ifadesi pin_d2 ifadesine eþitleniyor
#define sut4   pin_d3 // sut3 ifadesi pin_d2 ifadesine eþitleniyor

#define sat1   pin_d4 // sat1 ifadesi pin_d4 ifadesine eþitleniyor
#define sat2   pin_d5 // sat2 ifadesi pin_d5 ifadesine eþitleniyor
#define sat3   pin_d6 // sat3 ifadesi pin_d6 ifadesine eþitleniyor
#define sat4   pin_d7 // sat4 ifadesi pin_d7 ifadesine eþitleniyor

char tus=0; // karakter tipinde deðiþken tanýmlanýyor

//*********** Keypad Tarama Fonksiyonu *********
char keypad_oku() // Fonksiyon ismi
{
   output_d(0x00); // D portu çýkýþý sýfýrlanýyor

   output_high(sat1); // 1. satýr lojik-1 yapýlýyor
   if (input(sut1))   // 1. sütun okunuyor
      { delay_ms(20); tus=1; }
   if (input(sut2))   // 2. sütun okunuyor
      { delay_ms(20); tus=2; }
   if (input(sut3))   // 3. sütun okunuyor
      { delay_ms(20); tus=3; }
   if (input(sut4))   // 4. sütun okunuyor
      { delay_ms(20); tus=0xA; }
   output_low(sat1); // 1. satýr lojik-0 yapýlýyor

   output_high(sat2); // 2. satýr lojik-1 yapýlýyor
   if (input(sut1))   // 1. sütun okunuyor
      { delay_ms(20); tus=4; }
   if (input(sut2))   // 2. sütun okunuyor
      { delay_ms(20); tus=5; }
   if (input(sut3))   // 3. sütun okunuyor
      { delay_ms(20); tus=6; }
   if (input(sut4))   // 4. sütun okunuyor
      { delay_ms(20); tus=0xB; }
   output_low(sat2); // 2. satýr lojik-0 yapýlýyor

   output_high(sat3); // 3. satýr lojik-1 yapýlýyor
   if (input(sut1))   // 1. sütun okunuyor
      { delay_ms(20); tus=7; }
   if (input(sut2))   // 2. sütun okunuyor
      { delay_ms(20); tus=8; }
   if (input(sut3))   // 3. sütun okunuyor
      { delay_ms(20); tus=9; }
   if (input(sut4))   // 4. sütun okunuyor
      {delay_ms(20); tus=0x0C; }
   output_low(sat3); // 3. satýr lojik-0 yapýlýyor

   output_high(sat4); // 3. satýr lojik-1 yapýlýyor
   if (input(sut1))   // 1. sütun okunuyor
      { delay_ms(20); tus=0xE; }
   if (input(sut2))   // 2. sütun okunuyor
      { delay_ms(20); tus=0; }
   if (input(sut3))   // 3. sütun okunuyor
      { delay_ms(20); tus=0xF; }
   if (input(sut4))   // 4. sütun okunuyor
      {delay_ms(20); tus=0xD; }
   output_low(sat4); // 3. satýr lojik-0 yapýlýyor

   return tus; // Fonksiyon "tus" deðeri ile geri döner
}

/********* ANA PROGRAM FONKSÝYONU********/

void main ( )
{
   setup_psp(PSP_DISABLED);        // PSP birimi devre dýþý
   setup_timer_1(T1_DISABLED);     // T1 zamanlayýcýsý devre dýþý
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayýcýsý devre dýþý
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriþ yok
   setup_adc(ADC_OFF);             // ADC birimi devre dýþý
   setup_CCP1(CCP_OFF);
   setup_CCP2(CCP_OFF);

   set_tris_c(0x00);   // B portu komple çýkýþ
   set_tris_d(0x0F);   // Yüksek deðerlikli 4 bit çýkýþ, düþük deðerlikli 4 bit giriþ

   output_c(0x00); // Ýlk anda B portu çýkýþý sýfýrlanýyor

   while(1)  // Sonsuz döngü
   {
      portc=keypad_oku();  // Basýlan tuþ deðerini B portuna aktar
  }
}


Yukarıda yazdığımı denermisin ... B portu için ayarladığın bir yeri değiştirmeyi unutmuşsun ..

C portunun adresi 0x07H ;) kolay gelsin ...


İyi çalışmalar ...

suleymanq

Simdi oldu ya:) tesekkur ederim dostum
0x07 ne anlama geldigini bilmiyorum simdi ogrenecem

serhat1990

Alıntı yapılan: suleymanq - 07 Mayıs 2013, 16:54:04
Simdi oldu ya:) tesekkur ederim dostum
0x07 ne anlama geldigini bilmiyorum simdi ogrenecem

Ne demek iyi çalışmalar ...

Kod yazarken datasheet önünüzde kapalı olmasın tavsiyem :)

Datasheet'te "PIC16F876A/877A REGISTER FILE MAP" bölümünden anlayabilirsin.

xoom

Bu Yapılan değişikliklerle 1.mesajında istediğin şeyi yaptığına emin misin?

suleymanq

Alıntı yapılan: xoom - 07 Mayıs 2013, 18:05:34
Bu Yapılan değişikliklerle 1.mesajında istediğin şeyi yaptığına emin misin?

Hayir tam istedigimi yapamadim:) ama bir adim daha yaklastim. Simdi arada bir delay_ms() gecikme ile yada sirasiyla iki rakam girmek icin bir degisiklik kalmis bunu nasil yapabilirim mesela
#include <16f877.h>     // Kullanýlacak denetleyicinin baþlýk dosyasý tanýtýlýyor.

// Denetleyici konfigürasyon ayarlarý
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000) // Gecikme fonksiyonu için kullanýlacak osilatör frekansý belirtiliyor.
#use fast_io(b)
#use fast_io(c) //Port yönlendirme komutlarý B portu için geçerli
#use fast_io(d) //Port yönlendirme komutlarý C portu için geçerli

#byte  portb=0x06
#byte  portc=0x07   // C portu "tus" ismine eþitleniyor.

#define sut1   pin_d0 // sut1 ifadesi pin_d0 ifadesine eþitleniyor
#define sut2   pin_d1 // sut2 ifadesi pin_d1 ifadesine eþitleniyor
#define sut3   pin_d2 // sut3 ifadesi pin_d2 ifadesine eþitleniyor
#define sut4   pin_d3 // sut3 ifadesi pin_d2 ifadesine eþitleniyor

#define sat1   pin_d4 // sat1 ifadesi pin_d4 ifadesine eþitleniyor
#define sat2   pin_d5 // sat2 ifadesi pin_d5 ifadesine eþitleniyor
#define sat3   pin_d6 // sat3 ifadesi pin_d6 ifadesine eþitleniyor
#define sat4   pin_d7 // sat4 ifadesi pin_d7 ifadesine eþitleniyor

char tus=0; // karakter tipinde deðiþken tanýmlanýyor
char tus1=0;

//*********** Keypad Tarama Fonksiyonu *********

char keypad_oku() // Fonksiyon ismi
{
   output_d(0x00); // D portu çýkýþý sýfýrlanýyor

   output_high(sat1); // 1. satýr lojik-1 yapýlýyor
   if (input(sut1))   // 1. sütun okunuyor
      { delay_ms(20); tus=1; }
   if (input(sut2))   // 2. sütun okunuyor
      { delay_ms(20); tus=2; }
   if (input(sut3))   // 3. sütun okunuyor
      { delay_ms(20); tus=3; }
   if (input(sut4))   // 4. sütun okunuyor
      { delay_ms(20); tus=0xA; }
   output_low(sat1); // 1. satýr lojik-0 yapýlýyor

   output_high(sat2); // 2. satýr lojik-1 yapýlýyor
   if (input(sut1))   // 1. sütun okunuyor
      { delay_ms(20); tus=4; }
   if (input(sut2))   // 2. sütun okunuyor
      { delay_ms(20); tus=5; }
   if (input(sut3))   // 3. sütun okunuyor
      { delay_ms(20); tus=6; }
   if (input(sut4))   // 4. sütun okunuyor
      { delay_ms(20); tus=0xB; }
   output_low(sat2); // 2. satýr lojik-0 yapýlýyor

   output_high(sat3); // 3. satýr lojik-1 yapýlýyor
   if (input(sut1))   // 1. sütun okunuyor
      { delay_ms(20); tus=7; }
   if (input(sut2))   // 2. sütun okunuyor
      { delay_ms(20); tus=8; }
   if (input(sut3))   // 3. sütun okunuyor
      { delay_ms(20); tus=9; }
   if (input(sut4))   // 4. sütun okunuyor
      {delay_ms(20); tus=0x0C; }
   output_low(sat3); // 3. satýr lojik-0 yapýlýyor

   output_high(sat4); // 3. satýr lojik-1 yapýlýyor
   if (input(sut1))   // 1. sütun okunuyor
      { delay_ms(20); tus=0xE; }
   if (input(sut2))   // 2. sütun okunuyor
      { delay_ms(20); tus=0; }
   if (input(sut3))   // 3. sütun okunuyor
      { delay_ms(20); tus=0xF; }
   if (input(sut4))   // 4. sütun okunuyor
      {delay_ms(20); tus=0xD; }
   output_low(sat4); // 3. satýr lojik-0 yapýlýyor

   //return tus; // Fonksiyon "tus" deðeri ile geri döner
}

//////////////////////////////////////////////////////////////////

char keypad_oku1() // Fonksiyon ismi
{
   output_d(0x00); // D portu çýkýþý sýfýrlanýyor

   output_high(sat1); // 1. satýr lojik-1 yapýlýyor
   if (input(sut1))   // 1. sütun okunuyor
      { delay_ms(20); tus1=1; }
   if (input(sut2))   // 2. sütun okunuyor
      { delay_ms(20); tus1=2; }
   if (input(sut3))   // 3. sütun okunuyor
      { delay_ms(20); tus1=3; }
   if (input(sut4))   // 4. sütun okunuyor
      { delay_ms(20); tus1=0xA; }
   output_low(sat1); // 1. satýr lojik-0 yapýlýyor

   output_high(sat2); // 2. satýr lojik-1 yapýlýyor
   if (input(sut1))   // 1. sütun okunuyor
      { delay_ms(20); tus1=4; }
   if (input(sut2))   // 2. sütun okunuyor
      { delay_ms(20); tus1=5; }
   if (input(sut3))   // 3. sütun okunuyor
      { delay_ms(20); tus1=6; }
   if (input(sut4))   // 4. sütun okunuyor
      { delay_ms(20); tus1=0xB; }
   output_low(sat2); // 2. satýr lojik-0 yapýlýyor

   output_high(sat3); // 3. satýr lojik-1 yapýlýyor
   if (input(sut1))   // 1. sütun okunuyor
      { delay_ms(20); tus1=7; }
   if (input(sut2))   // 2. sütun okunuyor
      { delay_ms(20); tus1=8; }
   if (input(sut3))   // 3. sütun okunuyor
      { delay_ms(20); tus1=9; }
   if (input(sut4))   // 4. sütun okunuyor
      {delay_ms(20); tus1=0x0C; }
   output_low(sat3); // 3. satýr lojik-0 yapýlýyor

   output_high(sat4); // 3. satýr lojik-1 yapýlýyor
   if (input(sut1))   // 1. sütun okunuyor
      { delay_ms(20); tus1=0xE; }
   if (input(sut2))   // 2. sütun okunuyor
      { delay_ms(20); tus1=0; }
   if (input(sut3))   // 3. sütun okunuyor
      { delay_ms(20); tus1=0xF; }
   if (input(sut4))   // 4. sütun okunuyor
      {delay_ms(20); tus1=0xD; }
   output_low(sat4); // 3. satýr lojik-0 yapýlýyor

   //return tus; // Fonksiyon "tus" deðeri ile geri döner
}


/********* ANA PROGRAM FONKSÝYONU********/

void main ( )
{
   setup_psp(PSP_DISABLED);        // PSP birimi devre dýþý
   setup_timer_1(T1_DISABLED);     // T1 zamanlayýcýsý devre dýþý
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayýcýsý devre dýþý
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriþ yok
   setup_adc(ADC_OFF);             // ADC birimi devre dýþý
   setup_CCP1(CCP_OFF);
   setup_CCP2(CCP_OFF);

   set_tris_b(0x00);
   set_tris_c(0x00);   // B portu komple çýkýþ
   set_tris_d(0x0F);   // Yüksek deðerlikli 4 bit çýkýþ, düþük deðerlikli 4 bit giriþ

   output_b(0x00);
   output_c(0x00); // Ýlk anda B portu çýkýþý sýfýrlanýyor

   while(1)  // Sonsuz döngü
   {
         portb=keypad_oku();
         portc=keypad_oku1();  // Basýlan tuþ deðerini B portuna aktar
  }
}