Y

TUŞ TAKIMI

Başlatan YK44, 15 Ocak 2012, 16:49:07

YK44

Merhabalar ETE Hocam,

Bir tuş takımı yapmaya çalışıyorum 1,2,3,4,5,6,7,8,9,0,A,B,C,D olan ve 6 hane yazabileceğim iki sorunum var yardımcı olabilirmisiniz.

Öncelikle a,b,c,d yi ekranda harf olarak göstermek istiyorum bununla ilgili sorunum A tuşuna basılınca hex karşılığı çıkıyor ekranda yani 65 diyor bir türlü ekrana A olarak yansıtamadım

İkinci sorunumsa sayıyı 6 hane ekranda gösterdikten sonra ekranın silinip tekrar girdiğim 6 hane rakamı görmek.

YATAY_D=1
    If DIKEY_1=1 Then
      Tus=10:GOSUB EKRAN
      While DIKEY_1=1:Wend
    Endif
    If DIKEY_2=1 Then
      Tus=0:GOSUB EKRAN
      While DIKEY_2=1:Wend
    Endif
    If DIKEY_3=1 Then
      Tus=11:GOSUB EKRAN
      While DIKEY_3=1:Wend
    Endif
    IF DIKEY_4=1 THEN
      TUS=15:GOSUB EKRAN
      WHILE DIKEY_4=1:WEND
    ENDIF
    YATAY_D=0
   
    Goto BASLA

EKRAN:
IF TUS=11 then
SAYI=0:tus=0
ENDIF

sayI=SAYI*10+TUS
IF TUS=12 then SAYI="A"
IF TUS=13 then SAYI="B"
IF TUS=14 then SAYI="C"
IF TUS=15 then SAYI="D"
LCDOUT $FE,1
lcdout $fe,$c0,"SAYI=",DEC SAYI," "
RETURN

Yardımcı olabilirseniz sevinirim.

İyi çalışmalar.

est32

lcdout $fe,$c0,"SAYI=",DEC SAYI

Orada DEC dendiği için 65-66... sayıları çıkıyor.

lcdout $fe,$c0,"SAYI=",SAYI

şeklinde yazılırsa ekranda A-B-C-D olarak görünür ama bu sefer de diğer sayılar da ASCII olarak ekrana çıkar. Sıfır için ekrana 48, dokuz için de ekrana 57 çıkar.Biraz kafa yormak gerek.
tablo;

Mucit23

#2
Karakter LCD lerin hafızalarındakikarakterleri ekrana yazmak için LCD'ye o karaktere denk gelen ASCII kodu göndermelidir. Mesela "A" harifin ASCII karşığı 65 dir. Normalde LCDye bu değer gönderilirse. Ekranda A harfi Belirmesi gerekir. Sende İse Neden Ekranda A harfi yerine 65 sayısı görünüyor ona bakalım.
Sayı Adında bir değişkenin var. Basılan tuşa göre O tuşa Denk gelen Harfin ASCII değerini Sayı Değişkenine Yüklüyorsun. Buraya kadar Tamam. Peki Hata nerede? Ne yapmışsın Ona bakalım.

Sayı değişkeninin Değerini LCD ye yazmak için Aşağıdaki komutu kullanmışsın.
lcdout $fe,$c0,"SAYI=",DEC SAYI,"

Burada DEC komutunu açıklayalım önce.
DEC komutu Bir Değişkenin Sayı değerini Desimal olarak Ekrana yazmak için kullanılan bir komututu. Yani Dec Sayı dediğin zaman Sayı  Değişkenin değeri 65 ise Ekranda 65 sayısını görürsün. Eğer Hex Sayı Deseydin Ekranda 41 değerini, Bin sayı deseydin Ekranda 1000001 değerini görürdün. Sonuçta Hepsi Desimal olarak 65 değerine eşit. Sadece Sayı formatları farklı. Dec, Hex, Bin komutları ise Değişken içeriklerini Farklı formatlarda ekrana yazmamıza yarıyor.  Bu yüzden Sen DEC Sayı dediğin için Ekranda A harfi yerine A harifin Desimal Karşılığı olan 65 değerini Ekranda görüyorsun. Peki A harfini Ekranda görmemiz için ne yapmamız gerekiyor?  Çok Basit.  Sen Sayı Değişkeninden önceki Dec komutunu kaldırırsan eğer Sayı değişkenin içeriği direk LCD ye gönderilir. Eğer Sayı Değişkenin içeriği 65 ise Ekranda A harfi çıkar.

Mesela Aşağıdaki komutu yazarsan Ekrana 3 adet A harfi çıkar.
SAYI="A"
lcdout $fe,$c0,SAYI,65,"A"
Görüldüğü gibi yazım şekilleri değişsede yapılan iş aynıdır.

Senin yapman gereken ise ;
lcdout $fe,$c0,"SAYI=",DEC SAYI,; Bu komut yerine
lcdout $fe,$c0,"SAYI=",SAYI ;Bu komutu kullanmak

Umarım aradaki farkı anlamışsındır.
Kolay Gelsin...
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

YK44

est32 teşekkürler

MUCİT23 İlgin için teşekkür ederim

lcdout $fe,$c0,"SAYI=",SAYI"

senin dediğin şekildede kullanıncada A,B,C,D bunlarda sonuç alıyorum ama bu kezde sayılar çıkmuyor daha doğrusu ASCII karşılığı çıkıyor.


Mucit23

Orada ufak bi yazım hatası yapmışım.
lcdout $fe,$c0,"SAYI=",SAYI
Doğrusu yukarıdaki gibi olacak
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

YK44

Mucit23,

Bu şekildede denedim ama malesef yine sayılarda sayı(1,2,3,4,5,6,7,8,9,0) yerine  ancıı kodlarını görüyorum.ABCD tamam.
Sanırım başka bir yolu olmalı.

est32

IF SAYI>47 AND SAYI<58 THEN SAYI=SAYI-48

YK44

Bi yerde yanlış yapuyorum ama nerde vakti olan bir arkadaşımız bakabilirse.

YK44

Doğru denklemi buldum sanırım bu şekilde sayılar vede A,B,C,D çalışıyor ama sayılar toplanmuyor yani ekrana 123456 yazamuyorum sadece tek hane yazılıyor.

TUS=SAYI*10+TUS
IF TUS=>0 and TUS<10 then TUS=TUS+48
IF TUS>9 and tus<16 then TUS=TUS+55
LCDOUT $FE,$C0,"TUS=",TUS

ete

Birden fazla kusur var bu programda;
Birincisi; 10 dan küçük sayılar sayı olarak 10 dan büyük sayılar ise karekter olarak gösterilmelidir.
İkinicisi 16 lı tuş takımını kullanırsan ya bütün sayıları HEX formatında göstermen yada hex sayının Desimal karşılığına razı olman gerekir. Örnek verecek olursak 123AC sayısı normalde desimal olarak 74668 sayısına eşdeğerdir. BU sayıyı 74668 olarak mı göstereceksin yoksa 123AC şeklinde hex formatında (16 tabanına göremi) göstereceksin buna karar vermen gerekiyor.

Diğer bir kusur ise, 16 tabanına göre sayı sisteminde;
10= A
11= B
12= C
13= D
14= E
15= F
şeklinde gösterilir. Sen kendi kafana göre bir sisrem uygulamışsın. Buda yanlış. Özel bir amacın varsa sorun değil ama satndartların dışına çıkmasan daha iyi olur bence.

Ete

YK44

İyi akşamlar ETE Hocam,

123AC sayısını desimal(74668) olarak değilde 123AC olarak ekranda göstermem gerekecek.

est32

Alıntı yapılan: YK44 - 15 Ocak 2012, 20:47:45
İyi akşamlar ETE Hocam,

123AC sayısını desimal(74668) olarak değilde 123AC olarak ekranda göstermem gerekecek.

o zaman;
LCDOUT $FE,$C0,"TUS=",HEX TUS
Olarak yazılması gerek

YK44

est32,

Teşekkür ederim.
Söylediğin şekilde bi yazıp üzerinde çalışayım bakalım.Olur umarım.

ete

Ekran: alt programını aşağıdaki şekilde düzelt ,stediğin olacaktır.
İsis de "Keypad-Smallcalc" isimli bir tuş takımı mevcut. Onu kullan en azından hangi tuş ne basıyor görebilirsin.

Ete

EKRAN:
IF TUS=11 then
SAYI=0:tus=0
lcdout $fe,1
ENDIF
 
sayI=SAYI*10+TUS
IF TUS>9 THEN TUS=TUS+55


IF TUS<10 then
LCDOUT $FE,2,#tus
ELSE
LCDOUT $fe,2,TUS
endIf

lcdout $fe,$c0,"SAYI=",HEX SAYI,"  "

RETURN

YK44

ETE Hocam,

Teşekkür ederim. Akşam dener yazarım.

Powered by EzPortal