ccs ile keypak kullanımı sorunu?

sadoazb

Üye
Katılım
26 Ara 2009
Mesajlar
159
Puanları
1
Yaş
52
Kod:
#include "F:\elektronik+\pic\ccs_c\ccs_uygulamalar\keypad\uzun\pB\877_keypad.h"


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

#use delay (clock=4000000)                         //gecikme için kullanılacak osilatör frekansını belirle

void lcd_calis (void);

//****************LCD TANIMLAMALARI********************************************
#use fast_io(d)     //port yönlendirme komutlar B portu için
#define use_portd_lcd TRUE         //lcd b portuna bağlı
#include <lcd.c>              //lcd.c dosyasını programa tanıt

//***************KEYPAD TANIMLALAMLARI*******************************************
#use fast_io(b)             //port yönlendirme komutu portD
#define use_portb_kbd TRUE 
#include <kbd.c> 




//tanımlalamalar______________________________________________________________-

#define sut1 pin_b0    //sutun1 ifadesi pin_d0 ifasesine eşitleniyor
#define sut2 pin_b1    //sutun1 ifadesi pin_d1 ifasesine eşitleniyor
#define sut3 pin_b2    //sutun1 ifadesi pin_d2 ifasesine eşitleniyor
#define sut4 pin_b3    //sutun1 ifadesi pin_d3 ifasesine eşitleniyor

#define sat1 pin_b4    //sat1 ifadesi pin_d4 ifasesine eşitleniyor
#define sat2 pin_b5    //sat1 ifadesi pin_d5 ifasesine eşitleniyor
#define sat3 pin_b6    //sat1 ifadesi pin_d6 ifasesine eşitleniyor
#define sat4 pin_b7    //sat1 ifadesi pin_d7 ifasesine eşitleniyor


char tus=0;            //karekter tipinde değişken tanımlanıyor

//******************************************************************************

void lcd_calis (void)      
{

lcd_gotoxy(1,1);      
printf(lcd_putc, "basılan Tus:");  
lcd_gotoxy(1,2);      
printf(lcd_putc,"%d",tus);

delay_ms(20);
}      




char keypad_oku()         //fonksiyon 
{
output_d(0x00);    //d portu sıfırla
//______________________________________
output_high(sat1);     //satır1 1 yap
   if (input(sut1))    //sutun1 oku
   {delay_ms(20); tus=1;}    //eger sutun1 1 ise tus=1  yani 1 basılı
   if (input(sut2))    //sutun2 oku
   {delay_ms(20); tus=2;}
   if (input(sut3))    //sutun3 oku
   {delay_ms(20); tus=3;}
   if (input(sut4))    //sutun4 oku
   {delay_ms(20); tus=0xA;}
output_low(sat1);           //satır 1 low yap

//______________________________________
output_high(sat2);     //satır2 1 yap
   if (input(sut1))    
   {delay_ms(20); tus=4;}   
   if (input(sut2))    
   {delay_ms(20); tus=5;}
   if (input(sut3))   
   {delay_ms(20); tus=6;}
   if (input(sut4))   
   {delay_ms(20); tus=0xB;}
output_low(sat2);   

//______________________________________
output_high(sat3);     //satır3 1 yap
   if (input(sut1))    
   {delay_ms(20); tus=7;}   
   if (input(sut2))    
   {delay_ms(20); tus=8;}
   if (input(sut3))   
   {delay_ms(20); tus=9;}
   if (input(sut4))   
   {delay_ms(20); tus=0xC;}
output_low(sat3);  


//______________________________________
output_high(sat4);     //satır4 1 yap
   if (input(sut1))    
   {delay_ms(20); tus=0xE;}   
   if (input(sut2))    
   {delay_ms(20); tus=0;}
   if (input(sut3))   
   {delay_ms(20); tus=0XF;}
   if (input(sut4))   
   {delay_ms(20); tus=0xD;}
output_low(sat4); 

return tus;   //fonksiyon tuş değeri ile geri döner
}

void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);

   // TODO: USER CODE!! 
   
   set_tris_d(0x00);  //B portu LCD için komple çıkış
   set_tris_b(0x0F);  //D portu 4 bit çıkış 00001111  4 bit giriş
   
   output_b(0x00);    //B portu temizle
   lcd_init();          //lcd hazırlanıyor
   while(1)
   {
   keypad_oku();  //basılan tuş değerini portb ye gönder
   lcd_calis();

   }
}

yukarıdaki kod çalışmaktadır fakat 0-9 arası rakamları giriyorum Lcd de ğörünüyor ama şifre için daha uzun numaraları nasıl gireceğim
örneğin 456 yı sırayla girip lcd ekranda 456 yazmasını nasıl sağlarız..

teşekkürler
 
bir değişkene atayarak yapabilirsin yıldız silme tuşun olur kare kaydetme vsvs
char olarak yaparsan sanırım yan yana yazar denemek lazım
sifre = sifre + keypad bilgisi
 
tus zaten char olarak tanımlı


***********************
void lcd_calis (void)
{

lcd_gotoxy(1,1);
printf(lcd_putc, "basılan Tus:\n");

//tus=tus+tus;
printf(lcd_putc,"%d",tus);

delay_ms(20);
}
********************************
alt satıra tek rakam yazıyor yanına ikincisini yazdıramıyorum
 
sorunu şu şekilde çözdüm;

Lcd yazdırma bölümü
Kod:
void lcd_calis (void)      
{ 
if(tus=='*') 
           printf(lcd_putc,"%d", '*'); 
       else 
        
          printf(lcd_putc,"%d",tus); 
       tus=0; 

delay_ms(20); 
}


while döngü bölümü

Kod:
   while(TRUE) 
   { 
   delay_ms(40); 
   keypad_oku();  //basılan tuş değerini portb ye gönder 
    
      if(tus!=0) 
       { 
       lcd_calis ();    
       } 


   }


şimdi uzun şekilde sorunu hallettik kısa şekilde çalışması için
kbd_getc(); yi kullanarak bir örnek verebilecek varsa çok iyi olurdu

saygılarımla...
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için onları kabul etmelisiniz. Daha fazla bilgi edin…