Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => Microchip PIC => Konuyu başlatan: suleymanq - 06 Mayıs 2013, 17:42:36

Başlık: pic16f877 + keypad + iki tane 7-segment (yardim edin)
Gönderen: suleymanq - 06 Mayıs 2013, 17:42:36
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.

(http://img197.imageshack.us/img197/2390/16f877.JPG)

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
   }
}
Başlık: Ynt: pic16f877 + keypad + iki tane 7-segment (yardim edin)
Gönderen: haydarpasamikro - 06 Mayıs 2013, 20:39:55
C dilinizde bir eksiklik yok. Bayağı yazmışsınız. Sadece programı devreye uyarlamak kalmış.
Başlık: Ynt: pic16f877 + keypad + iki tane 7-segment (yardim edin)
Gönderen: suleymanq - 07 Mayıs 2013, 10:56:42
Program calisiyor fakat sadece PORTB calisiyor yani birinci 7-seg calisiyor.
PORTC devre disi duruyor bunu aktif hale nasil getirebilirim hangi komut eklemem lazim?
Başlık: Ynt: pic16f877 + keypad + iki tane 7-segment (yardim edin)
Gönderen: 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.

#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
Başlık: Ynt: pic16f877 + keypad + iki tane 7-segment (yardim edin)
Gönderen: 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 ...

İyi çalışmalar dilerim ..

Başlık: Ynt: pic16f877 + keypad + iki tane 7-segment (yardim edin)
Gönderen: suleymanq - 07 Mayıs 2013, 15:20:57
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
Başlık: Ynt: pic16f877 + keypad + iki tane 7-segment (yardim edin)
Gönderen: serhat1990 - 07 Mayıs 2013, 15:29:36
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 .
Başlık: Ynt: pic16f877 + keypad + iki tane 7-segment (yardim edin)
Gönderen: suleymanq - 07 Mayıs 2013, 16:08:10
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
  }
}
Başlık: Ynt: pic16f877 + keypad + iki tane 7-segment (yardim edin)
Gönderen: serhat1990 - 07 Mayıs 2013, 16:21:59
Porta değer atayınca istediğin çıkışı veriyor mu  ? Kodlarına baktım şimdi birşey göremedim.
Başlık: Ynt: pic16f877 + keypad + iki tane 7-segment (yardim edin)
Gönderen: suleymanq - 07 Mayıs 2013, 16:31:13
Hayir vermiyor. port aktif fakat deger cikmiyor

(http://img198.imageshack.us/img198/2290/111j.JPG)
Başlık: Ynt: pic16f877 + keypad + iki tane 7-segment (yardim edin)
Gönderen: serhat1990 - 07 Mayıs 2013, 16:49:47
#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 ...
Başlık: Ynt: pic16f877 + keypad + iki tane 7-segment (yardim edin)
Gönderen: suleymanq - 07 Mayıs 2013, 16:54:04
Simdi oldu ya:) tesekkur ederim dostum
0x07 ne anlama geldigini bilmiyorum simdi ogrenecem
Başlık: Ynt: pic16f877 + keypad + iki tane 7-segment (yardim edin)
Gönderen: serhat1990 - 07 Mayıs 2013, 16:57:39
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.
Başlık: Ynt: pic16f877 + keypad + iki tane 7-segment (yardim edin)
Gönderen: xoom - 07 Mayıs 2013, 18:05:34
Bu Yapılan değişikliklerle 1.mesajında istediğin şeyi yaptığına emin misin?
Başlık: Ynt: pic16f877 + keypad + iki tane 7-segment (yardim edin)
Gönderen: suleymanq - 07 Mayıs 2013, 18:43:22
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
  }
}
Başlık: Ynt: pic16f877 + keypad + iki tane 7-segment (yardim edin)
Gönderen: serhat1990 - 08 Mayıs 2013, 09:10:22
İlk girilen sayıyı 1.segmentte , 2.girilen sayıyı ikinci segmentte göstermek için yapman gereken şey çok basit ... Keypad'den ilk numara girildiğinde yazılımsal olarak oluşturduğun bir sayacı 1 arttır . Bir daha numara girildiğinde yazılımsal olarak ayarladığın sayacı 1 azalt . Sonra bu sayacın 0 veya 1 olmasına göre portlara atama işlemini yap bu kadar basit ...

İyi çalışmalar ... 
Başlık: Ynt: pic16f877 + keypad + iki tane 7-segment (yardim edin)
Gönderen: suleymanq - 08 Mayıs 2013, 17:09:15
if for sayi=0 butun bildiklerimi denedim yapamadim :( size zahmet o dediginiz yazilimsal sayiciyi yazabilir misiniz

#include <16f877.h> 

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

#use delay (clock=4000000)

#use fast_io(b)
#use fast_io(c)
#use fast_io(d)

#byte   portb=0x06
#byte   portc=0x07   

#define sut1   pin_d0
#define sut2   pin_d1
#define sut3   pin_d2
#define sut4   pin_d3

#define sat1   pin_d4
#define sat2   pin_d5
#define sat3   pin_d6
#define sat4   pin_d7

char tus=0;

//*********** Keypad Tarama Fonksiyonu *********
char keypad_oku()
{
   output_d(0x00);

   output_high(sat1);
   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;
}

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

void main ( )
{
   setup_psp(PSP_DISABLED);       
   setup_timer_1(T1_DISABLED);   
   setup_timer_2(T2_DISABLED,0,1);
   setup_adc_ports(NO_ANALOGS); 
   setup_adc(ADC_OFF);             
   setup_CCP1(CCP_OFF);
   setup_CCP2(CCP_OFF);

   set_tris_b(0x00);
   set_tris_c(0x00); 
   set_tris_d(0x0F); 

   output_b(0x00);
   output_c(0x00);

   while(1) 
   {
      portc=keypad_oku();
  }
}
Başlık: Ynt: pic16f877 + keypad + iki tane 7-segment (yardim edin)
Gönderen: suleymanq - 09 Mayıs 2013, 17:25:18
beyler yardim edin ya:)
Başlık: Ynt: pic16f877 + keypad + iki tane 7-segment (yardim edin)
Gönderen: drmp - 09 Mayıs 2013, 18:02:02
programın esik kalan yeri neresi simdi   
portc=tuş oku demişsin  altınada  portb=tuş oku dersen bu iş olmaz  iki displayde aynı gösterir

Başlık: Ynt: pic16f877 + keypad + iki tane 7-segment (yardim edin)
Gönderen: suleymanq - 09 Mayıs 2013, 23:41:50
Aynen oyle, nasil ayirabilirim arada nasil bir kod yazabilirim yardimci olurmusunuz
Başlık: Ynt: pic16f877 + keypad + iki tane 7-segment (yardim edin)
Gönderen: serhat1990 - 10 Mayıs 2013, 08:51:17
Alıntı yapılan: suleymanq - 09 Mayıs 2013, 23:41:50
Aynen oyle, nasil ayirabilirim arada nasil bir kod yazabilirim yardimci olurmusunuz

Söylediğim gibi bir kod yazabilirsin ... Şuan pek vaktim yok yazamadım . Dediğim adımları sırasıyla yazarsan çok rahat yapabilirsin ..
Başlık: Ynt: pic16f877 + keypad + iki tane 7-segment (yardim edin)
Gönderen: suleymanq - 10 Mayıs 2013, 12:30:46
Alıntı yapılan: serhat1990 - 10 Mayıs 2013, 08:51:17
Söylediğim gibi bir kod yazabilirsin ... Şuan pek vaktim yok yazamadım . Dediğim adımları sırasıyla yazarsan çok rahat yapabilirsin ..

bu kadarini yazabildim ancak >:(

int1 i;

for (i=1;i<2;i++)
if(i=1;portb=keypad_oku());
if(i=0:portc=keypad_oku());
Başlık: Ynt: pic16f877 + keypad + iki tane 7-segment (yardim edin)
Gönderen: xoom - 10 Mayıs 2013, 18:24:23
if(keypad_oku())
     {
     k++;
     if(k==1){portc=tus;}
     if(k==2){portb=tus;k=0;}
     }
Başlık: Ynt: pic16f877 + keypad + iki tane 7-segment (yardim edin)
Gönderen: suleymanq - 12 Mayıs 2013, 01:08:45
Olmadi, ayni sayi her iki 7-segmente cikiyor. baska ne yapilabilir?

#include <16f877.h> 

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

#use delay (clock=4000000)

#use fast_io(b)
#use fast_io(c)
#use fast_io(d)

#byte   portb=0x06
#byte   portc=0x07   

#define sut1   pin_d0
#define sut2   pin_d1
#define sut3   pin_d2
#define sut4   pin_d3

#define sat1   pin_d4
#define sat2   pin_d5
#define sat3   pin_d6
#define sat4   pin_d7

char tus=0;

//*********** Keypad Tarama Fonksiyonu *********
char keypad_oku()
{
   output_d(0x00);

   output_high(sat1);
   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;
}

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

void main ( )
{
   setup_psp(PSP_DISABLED);       
   setup_timer_1(T1_DISABLED);   
   setup_timer_2(T2_DISABLED,0,1);
   setup_adc_ports(NO_ANALOGS); 
   setup_adc(ADC_OFF);             
   setup_CCP1(CCP_OFF);
   setup_CCP2(CCP_OFF);

   set_tris_b(0x00);
   set_tris_c(0x00); 
   set_tris_d(0x0F); 

   output_b(0x00);
   output_c(0x00);

   int k;

   while(1) 
   {
     if(keypad_oku())
     {
     k++;
     if(k==1){portc=tus;}
     if(k==2){portb=tus;k=0;}
     }
  }
}
Başlık: Ynt: pic16f877 + keypad + iki tane 7-segment (yardim edin)
Gönderen: Mr.Java - 13 Mayıs 2013, 23:18:22
Yazılan Program 4x4 keypad için fakat siz 3x4 keypad kullanıyorsunuz.Copy paste kod yerine kendiniz mantığını kavrayıp yazın..
Başlık: Ynt: pic16f877 + keypad + iki tane 7-segment (yardim edin)
Gönderen: suleymanq - 14 Mayıs 2013, 02:34:11
Alıntı yapılan: Fkarizmatik - 13 Mayıs 2013, 23:18:22
Yazılan Program 4x4 keypad için fakat siz 3x4 keypad kullanıyorsunuz.Copy paste kod yerine kendiniz mantığını kavrayıp yazın..
inanin mantigini oyle bir kavradim ki ruyamda goruyorum keypad tarama kodlarini... en son bir hamle kaldi b ve c port ayrimi yardimci olursaniz cok sevinirim
Başlık: Ynt: pic16f877 + keypad + iki tane 7-segment (yardim edin)
Gönderen: suleymanq - 15 Haziran 2013, 12:42:14
Projenin son halini ekliyorum yardımcı olan bütün arkadaşlara çok teşekkür ediyorum

(http://img442.imageshack.us/img442/1705/s9c2.jpg)
#include <16f877.h>
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=2000000)

#use fast_io(b)
#use fast_io(c)
#use fast_io(d)

#byte   portb=0x06
#byte   portc=0x07

#define sut1   pin_d0
#define sut2   pin_d1
#define sut3   pin_d2
#define sut4   pin_d3

#define sat1   pin_d4
#define sat2   pin_d5
#define sat3   pin_d6
#define sat4   pin_d7

char tus=0,ptus,ekran;

char keypad()
{
   output_d(0x00);
   tus=0;
   output_high(sat1);
   if (input(sut1)) 
      { delay_ms(20); tus=1; }
   if (input(sut2)) 
      { delay_ms(20); tus=2; }
   if (input(sut3))   
      { delay_ms(20); tus=3; }
   output_low(sat1);

   output_high(sat2);
   if (input(sut1))   
      { delay_ms(20); tus=4; }
   if (input(sut2))   
      { delay_ms(20); tus=5; }
   if (input(sut3))   
      { delay_ms(20); tus=6; }
   output_low(sat2);

   output_high(sat3);
   if (input(sut1))   
      { delay_ms(20); tus=7; }
   if (input(sut2))   
      { delay_ms(20); tus=8; }
   if (input(sut3))   
      { delay_ms(20); tus=9; }
   output_low(sat3);

   output_high(sat4);
   if (input(sut1)) 
      { delay_ms(20); tus=0xE; }
   if (input(sut2))   
      { delay_ms(20); tus=0; }
   if (input(sut3))   
      { delay_ms(20); tus=0xF; }
   output_low(sat4);
     
   return tus;
   
}

void goster_b()
      {     
      ekran=tus;
      if(ekran==255){ekran=0;}output_b(tus);           
      }
void goster_c()
      {
      ekran=tus;
      if(ekran==255){ekran=0;}output_c(tus);           
      }

void main ( )
{
   setup_psp(PSP_DISABLED);       
   setup_timer_1(T1_DISABLED);     
   setup_timer_2(T2_DISABLED,0,1);
   setup_adc_ports(NO_ANALOGS);   
   setup_adc(ADC_OFF);             
   setup_CCP1(CCP_OFF);
   setup_CCP2(CCP_OFF);

   set_tris_b(0x00);
   set_tris_c(0x00);   
   set_tris_d(0x0F);   

   output_b(0x00);
   output_c(0x00);
   
   int k;
   
   while(1) 
   {
     keypad();
     if(tus>0)
     {
     k++;
     if(k==1){
     goster_b();
     ptus=tus;
     do{delay_ms(10);keypad();}while(tus==ptus);
     }
     
     if(k==2){
     goster_c();
     ptus=tus; k=0;
     do{delay_ms(10);keypad();}while(tus==ptus);
     }
    }
  }
}


(http://img850.imageshack.us/img850/694/ube6.jpg)
(http://img844.imageshack.us/img844/9656/qjz.png)
Devrenin sağ tarafındaki 10x10 matris çıkışına 90 adet röle bağlanabilir.
Başlık: Ynt: pic16f877 + keypad + iki tane 7-segment (yardim edin)
Gönderen: suleymanq - 22 Ekim 2013, 21:15:13
Merhaba arkadaşlar!
Projede biraz değişiklikler yaptım, son halini ekliyorum
#include <16f877.h>   
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=4000000)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)

#byte   portb=0x06
#byte   portc=0x07 

char tus,ptus,ekran;

int digit[16]={63,6,91,79,102,109,125,7,127,111,119,56,57,94,121,113};
//            [0 ,1,2 ,3 , 4 , 5 , 6 ,7, 8 , 9 , a , L ,c ,d , e , f ]

int k;

char keypad_oku()
{
   output_d(0x00);   
   tus=input_d(); 
   if(tus==11){k=0;reset_cpu();}     
   return tus;   
}

void goster_b()
      {     
      ekran=tus;
      if(ekran==255){ekran=0;}output_b(digit[ekran]);           
      }
void goster_c()
      {
      ekran=tus;
      if(ekran==255){ekran=0;}output_c(digit[ekran]);           
      }
     
void main ( )
{
   setup_psp(PSP_DISABLED);       
   setup_timer_1(T1_DISABLED);     
   setup_timer_2(T2_DISABLED,0,1);
   setup_adc_ports(NO_ANALOGS);   
   setup_adc(ADC_OFF);             
   setup_CCP1(CCP_OFF);
   setup_CCP2(CCP_OFF);

   set_tris_b(0x00);
   set_tris_c(0x00);   
   set_tris_d(0x0F);   

   output_b(digit[0]);
   output_c(digit[0]);
   
   while(1) 
   {
     keypad_oku();
     if(tus>0)
     {
     k++;
     if(k==1){
     goster_b();
     ptus=tus;
     do{delay_ms(10);keypad_oku();}while(tus==ptus);
     }
     
     if(k==2){
     goster_c();
     ptus=tus; k=0;
     do{delay_ms(10);keypad_oku();}while(tus==ptus);
     }
     }
     }
}

(http://img690.imageshack.us/img690/4540/nkf5.jpg)
(http://img692.imageshack.us/img692/8259/q4lb.jpg)
433Mhz RF modüller ve PT2262,72 entegreleri ekledim devre çalışıyor, kumandada basılan rakamı ekranda gösteriyor bir sıkıntı yok, yalnız program kısmında eklemek istediğim ufak bir şey var: günlük hayatımızda * ve # olarak adlandırdığımız iki tuş 'artır' ve 'azalt' olarak kullanmak istiyorum yani (tus=10 ise azalt) ve (tus=12 ise artır)
ıf(tus=10){portc bir azalt)
if(tus=12){portc bir artır}
Bunu nasıl yapabilirim?
http://www.dosya.tc/server17/5Er5I3/displayboard.rar.html (http://www.dosya.tc/server17/5Er5I3/displayboard.rar.html)
Başlık: Ynt: pic16f877 + keypad + iki tane 7-segment (yardim edin)
Gönderen: Mr.Java - 23 Ekim 2013, 20:52:07
O devreleri sen mi tasarladın ? Sen bana devre çizimini öğret ben sana displaylerde ki tüm fantazileri göstereyim :)
Başlık: Ynt: pic16f877 + keypad + iki tane 7-segment (yardim edin)
Gönderen: suleymanq - 24 Ekim 2013, 19:36:59
Dalga geçiyorsunuz herhalde? ;D yardımcı olun ya :) ben tasarladım daha yeni öğreniyorum altium designeri
Başlık: Ynt: pic16f877 + keypad + iki tane 7-segment (yardim edin)
Gönderen: mehmet - 24 Ekim 2013, 22:54:02
Alıntı yapılan: suleymanq - 22 Ekim 2013, 21:15:13
günlük hayatımızda * ve # olarak adlandırdığımız iki tuş 'artır' ve 'azalt' olarak kullanmak istiyorum yani (tus=10 ise azalt) ve (tus=12 ise artır)
ıf(tus=10){portc bir azalt)
if(tus=12){portc bir artır}
Bunu nasıl yapabilirim?

Portc ye gonderilecek değer için bir genel değişken
tanımlayın. Öneğin:
------------------------------------------
unsigned char G_Degisken;
...
...
...

if(tus == 10) G_Degisken--;
if(G_Degisken <= 0) G_Degisken = 0;
if(tus == 12) G_Degisken++;
if(G_Degisken >= 99) G_Degisken = 99;
...
...
---------------------------------------------

Tabi tuşlar için debounce gecikmesi unutulmamalıdır...

Kolaylıklar...
Başlık: Ynt: pic16f877 + keypad + iki tane 7-segment (yardim edin)
Gönderen: Mr.Java - 25 Ekim 2013, 17:47:17
Alıntı yapılan: mehmet - 24 Ekim 2013, 22:54:02
Portc ye gonderilecek değer için bir genel değişken
tanımlayın. Öneğin:
------------------------------------------
unsigned char G_Degisken;
...
...
...

if(tus == 10) G_Degisken--;
if(G_Degisken <= 0) G_Degisken = 0;
if(tus == 12) G_Degisken++;
if(G_Degisken >= 99) G_Degisken = 99;
...
...
---------------------------------------------

Tabi tuşlar için debounce gecikmesi unutulmamalıdır...

Kolaylıklar...


Aslında mehmet abim delay fonksyonları yerine switch case içerisinde atsak programları ve tuşlar basıldığında bir sayaç eklesek sayacın durumuna göre basılan  tuşları algılasak kodun tam çevrim süresinde daha az zaman harcıyor olmaz mıyız ?Hem bu sayede multitasking'de yapmış oluruz kanımca.
Başlık: Ynt: pic16f877 + keypad + iki tane 7-segment (yardim edin)
Gönderen: suleymanq - 25 Ekim 2013, 19:10:33
Güzel güzel anlatıyorsunuz da biz yapamıyoruz :'(
Şöyle bir soru sorsam daha basit: kodun mevcut halini değiştirmeden bir ek ile yapılabilecek bir iş mi acaba bu?

şöyle birşey de denedim olmadı
char keypad_oku()
{
 
   output_d(0x00);
   tus=input_d();
   
   if(tus == 10) keypad_oku()--;
   if(keypad_oku()<=0) keypad_oku() = 0;
   if(tus == 12) keypad_oku()++;
   if(keypad_oku() >= 99) keypad_oku() = 99;
     
   if(tus==11){k=0;reset_cpu();}
   return tus;
}