ps2 klavye Hk.

Başlatan erhans, 07 Ekim 2014, 21:02:40

erhans

Klavyeden gelen verileri okuyup  if (c==0x1c) -if (c==0x32)...if (c==0x1a). diye işlem yapıyorum.Anlaşılacağı gibi program cok uzun oluyor. 1c=a .. 1a=z olduğunu const olarak yazıp for ile kontrol yapmayı düşünüyorum .Fakat const içinde gelen kodun karşışığı budur nasıl diyebilirim?

RaMu

Birkaç farklı yöntemle yapılabilir,
birisi switch case
kullanımı için birkaç örnek programa bakarsan hemen çözersin zaten,
en basit haliyle şöyle bir yapı,
switch(klavyeden gelen değer senin c değişkenine klavyeden okuyup aldığın değer)

case(0x1c)
gerçek değer='a'  //eğer klavyeden okunan değer 1c ise bu değer a ya karşılık geliyor demiş olduk
break;

case(0x1a)
gerçek değer='z'  //1a ise z
break;
.
.
.
case(...)
gerçek...
break...

default
gerçek değer=hata;
break;

bu şekilde birşey diyebiliriz.

Diğer bir yöntem
eğer okunan değer ile karşılık geldiği değer arasında
bir bağıntı varsa bunu değerlendirmek ki
yanlış hatırlamıyorsam ufak bir matematik işlemle dönüşüm sağlanabiliyordu.

Veya tablo yöntemi kullanılabilir.

Veya senin istediğin gibi
constant char değer dönüştür[] {0 okunursa, 1 okunursa, 2 okunursa, 3 okunursa ... , son değer}
şimdi bu tabloyu neye göre oluşturacaksın
klayveden okuduğun değer 0 ise bu tablodaki 0 okunursa değerini gidip alır
o zaman klavyeden 0 okunursa gerçekte hangi değer olması gerekiyor misal k olsun
o zaman dizinin ilk elemanı k olacak
sırasıyla klavyeden 1 gelince olması gereken değer l ise dizinin 2. elemanına l yazacaksın ('k' 'l')
sonra program içinde
dönüşmüş değer=değer dönüştür[klavyeden okuduğun değer sende c ye aldığın değer];
dediğinde artık dönüşmüş değer değişkeni içinde ne olur :)
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

HexfeT

#2
12 yıl kadar önce yürüyen yazı panosuna veri girişi için pc klavyesi kullanmayı kafayı takmış ve kodları picbasic+asm ile yazarak halletmiştim. Tuş kombinasyonlarını bile algılatabilmiştim.

Yanlış hatırlamıyorsam klavye basılan tuşa ait 8 bitlik bir scan kodu gönderiyor. Klavyenin iletişim protokolünü çözüp veri alabildikten sonra gerisi kolay. Yapılması gereken bir sabit dizi tanımlayıp her scan kodunun karşılık geldiği adrese o tuşun ascii kodunu koymak. Daha sonra gelen scan kodunu offset adresi olarak kullanıp diziden karşılık geldiği elemanı almak. Misal gelen scan kodu 1c ise dizinin 1c'ninci elemanını alıp gelmek. 1c hangi karaktere karşılık geliyorsa dizinin 1c'ninci elemanı olarak onun ascii kodunu tanımlamıştık.

erhans

#3
Arkadaşlar cevaplarınız için çok teşekkürler fakat tam olarak anlayamadım :(


constant char değer dönüştür[] {a,b,c,d,e,.....v,y,z} toplamda 28 harf
{
.....
{

for(i=0; i<28; i++)
            if(deger dönüstür == kkod)
                printf (lcd_putc,"%cC   ", değer dönştür");
                    return ;

yukarıdaki örneği sadece mantık kurmak için salladım. i=3 olsun  değer dönüştür den 'c'  alınacak ,fakat kkod=0x21 ekranda görmemiz gereken harf 'c' iken hiçbirşey görünmeyecek.Yanlış mantık ise lütfen uyarın.Burda kkod taki verinin 'c' olduğunun nasıl çözerim.

RaMu

Örneğin ya çok kötü yada ben birşey anlayamadım,
sen sallayacaksan bu işi bizde boşuna sallamayalım.

swich case kullan o zaman, dediğin gibi bir dert olmaz.

Dizi kullanacam İllaki diyorsan,
dediğim gibi algoritmayı bulmalısın,
eğer 0x21 c, 0x22 d, ... , 0x3d z ye sırasıyla karşılık geliyorsa,
o zaman tablodan değer okurken,
karşılık geldiği değer = değer dönüştür[klavyeden okunandeğer-0x19] dersin olur biter,
klavyeden okunan değer 0x19 ise değerdönüştür[0] denmiş olunur
ve tablodaki ilk değer olan a yı almış karşılık geldiği değer adlı değişkene almış olursun.

Baktın mı okunan ile olması gereken değer arasında bağıntı var mıymış?
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

HexfeT

klavyeden "c" tuşuna basıldığında gelen kod 0x21 ise dizinin 0x21'inci elemanı olarak "c" tanımlayacaksın. Aynı şeyi bütün tuşlar için yapacaksın. Klavyeden gelen kod dizideki elemanın adresi olmuş olacak. Tabi doğal olarak "a,b,c,d,e..." diyen bir dizi olmayacak, her harf klavyeden gelen kodun gösterdiği konumda olacak.

erhans

Değerler arasında bi bağlantı bulamadım. örnekte ise dizidekiler sıra sıra alıp kontrol ederek karakteri göstermek için .CCs yazma konusunda ileri seviyede değilim .Dizi kullanmayı da öğrenmek istiyorum.Birkaç satır örnek ile açıklanabilirse memnun olurum.İlgilenen arkadaşlara çok teşekkürler.