Tamam, kusuruma bakmayın, yanlışlıkla üzerime alınmışım. :)
 
Bu sorun için başka bir forumda sana cevap vermiştim. İşini görmedi mi?

Bu arada değişkenlere neden dec girmeye çalışıyorsunuz. 255 ile 0xFF aynı anlamı ifade eder.
Değişkenlere doğrudan HEX girin.

Keypad konusuna gelince CCS ve HI-TEC ile yapılmış bir yığın örnek internette dolaşıyor zaten.

Evet güzel valla küçük ayrıntılarda boğulmuşum güzel yaklaşım tebrik ederim :)

Peki 6 haneli hex sayısını mesela FFAA00

R = FF
G = AA
B = 00

olarak 2 hanelere nasıl bölerim ?
 
Bir şeyi merak ettim, ben de durumu kavrarsam, benim açımdan çok iyi olur.
Tuş takımından girilen FF bilgisini, değişkene direkt olarak nasıl atıyorsunuz?
 
Bir şeyi merak ettim, ben de durumu kavrarsam, benim açımdan çok iyi olur.
Tuş takımından girilen FF bilgisini, değişkene direkt olarak nasıl atıyorsunuz?

Abi yanlış anlama sana lafımız yok :) ama ben zaten direk girmek istemiyorum. Tuış takımından giricem LCD ekrandan görücem yanlış yazmamışsam enter tuşuna basıcam değişkenlere gidicek
 
Yanlış anlama filan yok.
Sadece merak ettim.
Tuş takımından A tuşuna basıldığında, bir değişkene direkt 0x0A olarak girme varsa, öğrenmek istiyorum.
 
4*4 keypadlar HEX girilebilecek yapıda tasarlanmıştır. Aksi durumda 3*4 keypad yeterli olur.
 
Ben onu demek istemiyorum.
Sen dedin ya, desimal girmek yerine niye direkt hexa olarak girmiyorsun diye.
İşte o yüzden sordum.
 
Sonunda bitti.
ricetyx farkettiysen, beni sürekli uğraştırıyorsun. :)
Proteus'taki KeyPad, koduma uymadığı için biraz değişik oldu tuş takımı.
Zaten devre üzerinde, tuş takımının haritasını yazdım.
LCD'deki yönergeleri de bilerek İngilizce yazdım.
Türkçe karakterleri değiştirmeyi sevmiyorum. :)
Aşağıda, çalışır haldeyken birkaç ekran görüntüsü var devrenin.
Kodu incele bakalım, kolay mı zor mu görürsün. :)
Ufak tefek hatalar ya da mantık hataları olabilir. ;)


circuit01.png
circuit02.png
circuit03.png


Kod:
#include <16f877.h>
#INCLUDE <stdlib.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>

char str[2];

#define CONVERT PIN_C0
#define ROW0 PIN_C4
#define ROW1 PIN_C5
#define ROW2 PIN_C6
#define ROW3 PIN_C7
#define COL0 PIN_D4
#define COL1 PIN_D5
#define COL2 PIN_D6
#define COL3 PIN_D7

char const KEYS[4][4] =
{{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'F','0','E','D'}};

#define KBD_DEBOUNCE_FACTOR 33

short int ROW_HIGH()
{
    if(input (ROW0) || input (ROW1) || input (ROW2) || input (ROW3))
        return (1);
    else
       {
        return (0);
    }
}

char kbd_getc()
{
    static byte kbd_call_count;
    static short int kbd_down;
    static char last_key;
    static byte col;

    byte kchar;
    byte row;

    kchar='\0';

if(++kbd_call_count>KBD_DEBOUNCE_FACTOR)
{
   switch (col)
      {
         case 0:
         output_high(col0);
         output_low(col1);
         output_low(col2);
         output_low(col3);
         break;
       
         case 1:
         output_low(col0);
         output_high(col1);
         output_low(col2);
         output_low(col3);
         break;
       
         case 2:
         output_low(col0);
         output_low(col1);
         output_high(col2);
         output_low(col3);
         break;

         case 3:
         output_low(col0);
         output_low(col1);
         output_low(col2);
         output_high(col3);
         break;
      }

   if(kbd_down)
   {
      if(!ROW_HIGH())
         {
            kbd_down=false;
            kchar=last_key;
            last_key='\0';
         }
   }
   else
   {
      if(ROW_HIGH())
      {
         if(input (row0))
            row=0;
         else if(input (row1))
            row=1;
         else if(input (row2))
            row=2;
         else if(input (row3))
            row=3;
         last_key = KEYS[row][col];
         kbd_down = true;
      }
       else
         {
            ++col;
            if(col==4)
            col=0;
         }
     }
   kbd_call_count=0;
  }
return(kchar);
}

int8 HEXtoDEC()
{
    int8 result;;
    char *ptr;
    result=strtol(str,&ptr,16);
  
    return(result);
}

void SetLCD()
{
    printf(lcd_putc,"\f");
    lcd_gotoxy(1,1);
    printf(lcd_putc,"Put HEX Code");
    lcd_gotoxy(1,2);
    printf(lcd_putc,"#");
}

void main()
{
    char string[6], sout[6], red[2], green[2], blue[2];
    int8 iRed, iGreen, iBlue = 0;
    int cnt = 0;
  
    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);   // PORTB çıkış
    set_tris_c(0xFF);   // PORTD giriş
    set_tris_d(0x00);   // PORTD çıkış
    lcd_init();   // LCD hazırlanıyor
    SetLCD();
  
    while(1)
    {
        char k=0;
        k=kbd_getc();
        if(k!=0)
        {          
            if(cnt<6)
            {
                string[cnt] = k;
                printf(lcd_putc,"%c",string[cnt]);
                cnt++;
            }
              
            if(cnt==6)
            {
                lcd_gotoxy(1,1);
                printf(lcd_putc,"Press Convert   ");
                while(!input(CONVERT));
                printf(lcd_putc,"\f");
                lcd_gotoxy(1,1);
                printf(lcd_putc,"Press Restart");
              
                red[0] = string[0];
                red[1] = string[1];
                green[0] = string[2];
                green[1] = string[3];
                blue[0] = string[4];
                blue[1] = string[5];
                  
                str[0] = red[0];
                str[1] = red[1];
                iRed = HEXtoDEC();
                str[0] = green[0];
                str[1] = green[1];
                iGreen = HEXtoDEC();
                str[0] = blue[0];
                str[1] = blue[1];
                iBlue = HEXtoDEC();
              
                lcd_gotoxy(1,2);
                printf(lcd_putc,"R%u G%u B%u", iRed, iGreen, iBlue);
                delay_ms(500);
                while(!input(CONVERT));
                cnt = 0;
                SetLCD();
            }
        }
    }
}
 
Sonunda bitti.
ricetyx farkettiysen, beni sürekli uğraştırıyorsun. :)
Proteus'taki KeyPad, koduma uymadığı için biraz değişik oldu tuş takımı.
Zaten devre üzerinde, tuş takımının haritasını yazdım.
LCD'deki yönergeleri de bilerek İngilizce yazdım.
Türkçe karakterleri değiştirmeyi sevmiyorum. :)
Aşağıda, çalışır haldeyken birkaç ekran görüntüsü var devrenin.
Kodu incele bakalım, kolay mı zor mu görürsün. :)
Ufak tefek hatalar ya da mantık hataları olabilir. ;)


Ekli dosyayı görüntüle 24101 Ekli dosyayı görüntüle 24102 Ekli dosyayı görüntüle 24103

Kod:
#include <16f877.h>
#INCLUDE <stdlib.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>

char str[2];

#define CONVERT PIN_C0
#define ROW0 PIN_C4
#define ROW1 PIN_C5
#define ROW2 PIN_C6
#define ROW3 PIN_C7
#define COL0 PIN_D4
#define COL1 PIN_D5
#define COL2 PIN_D6
#define COL3 PIN_D7

char const KEYS[4][4] =
{{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'F','0','E','D'}};

#define KBD_DEBOUNCE_FACTOR 33

short int ROW_HIGH()
{
    if(input (ROW0) || input (ROW1) || input (ROW2) || input (ROW3))
        return (1);
    else
       {
        return (0);
    }
}

char kbd_getc()
{
    static byte kbd_call_count;
    static short int kbd_down;
    static char last_key;
    static byte col;

    byte kchar;
    byte row;

    kchar='\0';

if(++kbd_call_count>KBD_DEBOUNCE_FACTOR)
{
   switch (col)
      {
         case 0:
         output_high(col0);
         output_low(col1);
         output_low(col2);
         output_low(col3);
         break;
      
         case 1:
         output_low(col0);
         output_high(col1);
         output_low(col2);
         output_low(col3);
         break;
      
         case 2:
         output_low(col0);
         output_low(col1);
         output_high(col2);
         output_low(col3);
         break;

         case 3:
         output_low(col0);
         output_low(col1);
         output_low(col2);
         output_high(col3);
         break;
      }

   if(kbd_down)
   {
      if(!ROW_HIGH())
         {
            kbd_down=false;
            kchar=last_key;
            last_key='\0';
         }
   }
   else
   {
      if(ROW_HIGH())
      {
         if(input (row0))
            row=0;
         else if(input (row1))
            row=1;
         else if(input (row2))
            row=2;
         else if(input (row3))
            row=3;
         last_key = KEYS[row][col];
         kbd_down = true;
      }
       else
         {
            ++col;
            if(col==4)
            col=0;
         }
     }
   kbd_call_count=0;
  }
return(kchar);
}

int8 HEXtoDEC()
{
    int8 result;;
    char *ptr;
    result=strtol(str,&ptr,16);

    return(result);
}

void SetLCD()
{
    printf(lcd_putc,"\f");
    lcd_gotoxy(1,1);
    printf(lcd_putc,"Put HEX Code");
    lcd_gotoxy(1,2);
    printf(lcd_putc,"#");
}

void main()
{
    char string[6], sout[6], red[2], green[2], blue[2];
    int8 iRed, iGreen, iBlue = 0;
    int cnt = 0;

    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);   // PORTB çıkış
    set_tris_c(0xFF);   // PORTD giriş
    set_tris_d(0x00);   // PORTD çıkış
    lcd_init();   // LCD hazırlanıyor
    SetLCD();

    while(1)
    {
        char k=0;
        k=kbd_getc();
        if(k!=0)
        {         
            if(cnt<6)
            {
                string[cnt] = k;
                printf(lcd_putc,"%c",string[cnt]);
                cnt++;
            }
             
            if(cnt==6)
            {
                lcd_gotoxy(1,1);
                printf(lcd_putc,"Press Convert   ");
                while(!input(CONVERT));
                printf(lcd_putc,"\f");
                lcd_gotoxy(1,1);
                printf(lcd_putc,"Press Restart");
             
                red[0] = string[0];
                red[1] = string[1];
                green[0] = string[2];
                green[1] = string[3];
                blue[0] = string[4];
                blue[1] = string[5];
                 
                str[0] = red[0];
                str[1] = red[1];
                iRed = HEXtoDEC();
                str[0] = green[0];
                str[1] = green[1];
                iGreen = HEXtoDEC();
                str[0] = blue[0];
                str[1] = blue[1];
                iBlue = HEXtoDEC();
             
                lcd_gotoxy(1,2);
                printf(lcd_putc,"R%u G%u B%u", iRed, iGreen, iBlue);
                delay_ms(500);
                while(!input(CONVERT));
                cnt = 0;
                SetLCD();
            }
        }
    }
}




Yani yalakalık malakalık değil ama hakketten sen bu işi biliyorsun. Çok teşekküre ederim abi olayıda anladım valla.. dile benden ne dilersen :)
 
YARARMAN abi birde PWM ilen LED lerde olsaymış dahada güzel olurmuş.
Burada babyiğit adam olduğunu gösterdin :D
Biz seyirci kalıyoz kusurumuza bakma baba.
 

Yeni mesajlar

Forum istatistikleri

Konular
128,172
Mesajlar
915,632
Kullanıcılar
449,936
Son üye
AsilOzgenc

Yeni konular

Geri
Üst