CCS C Error 51. A numeric expression must appear here

Başlatan cadirmax, 13 Haziran 2013, 11:02:57

cadirmax

arkadaşlar öncelikle cahilliğimi hoş görün.
yeni pic öğreniyorum
ayrıca makineciyim...
ayrıca arama yaptım bu konu ile ilgili bir kaç konu var fakat derdime çare olmadı..
teşekkürler...

serdar çiçek hocanın CCS C kitabında bir uygulamayı (tuş takımı ve lcd uygulaması. sayfa 349-352) yaparken Error 51. A numeric expression must appear here hatası ile karşılaşıyorum..
kodlar aşağıdadır.

hatanın verildiği satırda açıklama yaptım..

özetle

4x3 bir keypad var
keypad için bir fonksiyon tanımlanıyor keypad_oku diye
değer char tipinde tus değişkeni ile geri dönüyor.
dönen bu char tipindeki tus degeri lcd de yazdırılmaya çalışılıyor.
hatayı bu değişkende veriyor diye düşünüyorum...

#include <16F877A.h>


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

#use delay(clock=4000000)

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

#define use_portb_lcd TRUE
#include <lcd.c>

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

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

char tus=0;

char keypad_oku()
{
   output_d(0x00);

   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=0x0F;}
    output_low(sat4); 
   
   return 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_d(0x0F);
      
      
      lcd_init();
      printf(lcd_putc,"\fBasilan Tus=");
      
      
    bas:
         
      lcd_gotoxy(13,1);
      if (keypad_oku()!="\0")
      {
         if (keypad_oku()>9)
         {
            printf(lcd_putc,"%d", keypad_oku());
         else                                                         //    Hatayı burada veriyor
            printf(lcd_putc,"%d " keypad_oku());
         }  
      }
     
   goto bas;
      
          
}






JKramer

"Hatayı burada veriyor" dediğiniz satırın altındaki ifadede virgül eksik, üsttekiyle aynı olması lazım.

mehmet

#2
Parantez hatası değil mi acaba???
if(şart)
{
     ..............
}
else
{
     ..............
     printf(lcd_putc,"%d", keypad_oku());
}
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

F493

YANLIŞ

       
       if (keypad_oku()>9)
       {
              printf(lcd_putc,"%d", keypad_oku());
         else                                                         //    Hatayı burada veriyor
               printf(lcd_putc,"%d " keypad_oku());
         } 

DOĞRU

     if (keypad_oku()>9)
              printf(lcd_putc,"%d", keypad_oku());
      else
             printf(lcd_putc,"%d " keypad_oku());

DOĞRU

     if (keypad_oku()>9)
    {
              printf(lcd_putc,"%d", keypad_oku());
     }
     else
    {
           printf(lcd_putc,"%d " keypad_oku());
    }

Bu hatanın nedenini anlaman için C dilinde if deyimi ile ilgili konuya bir gözatmalısın.
http://www.teknobakis.com/ccs-c-ile-pic-programlama-temel-c-bilgisi-3

cadirmax

arkadaşlar... sorun çözülmüştür.. teşekkür ederim.

tek satırsa paranteze gerek yok diye düşünüyordum...

güzel oldu...