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

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

serhat1990

İ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 ... 

suleymanq

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

suleymanq


drmp

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


suleymanq

Aynen oyle, nasil ayirabilirim arada nasil bir kod yazabilirim yardimci olurmusunuz

serhat1990

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 ..

suleymanq

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());

xoom

if(keypad_oku())
     {
     k++;
     if(k==1){portc=tus;}
     if(k==2){portb=tus;k=0;}
     }

suleymanq

#23
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;}
     } 
  }
}

Mr.Java

Yazılan Program 4x4 keypad için fakat siz 3x4 keypad kullanıyorsunuz.Copy paste kod yerine kendiniz mantığını kavrayıp yazın..

suleymanq

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

suleymanq

Projenin son halini ekliyorum yardımcı olan bütün arkadaşlara çok teşekkür ediyorum


#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);
     }
    }
  } 
}




Devrenin sağ tarafındaki 10x10 matris çıkışına 90 adet röle bağlanabilir.

suleymanq

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);
     }
     }
     }
}



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

Mr.Java

O devreleri sen mi tasarladın ? Sen bana devre çizimini öğret ben sana displaylerde ki tüm fantazileri göstereyim :)

suleymanq

#29
Dalga geçiyorsunuz herhalde? ;D yardımcı olun ya :) ben tasarladım daha yeni öğreniyorum altium designeri