Tuş takımından okuduğum Numarayı Ekranda Kaydırmak

Başlatan tekniker_murat, 04 Kasım 2008, 23:09:34

tekniker_murat

Arkadaşlar selamun aleyküm...Ben proton basic kullanarak bir tuş takımını okutup lcd ekranda sıra ile bastığım tuşun ekrana gelmesini istiyorum ama sorun şurda çıkıyor karşıma
Tuş takımını aşağıda örneğini vereceğim şekilde okutuyorum ve bastığım tuş ekranda görünüyo fakat elimi çekince numara da siliniyo oysa ben istiyorum ki tuşa her bastığımda bir önceki numarayı sola doğru ötelesin ve son bastığım tuşu ekranda göstersin örneğin 01234567896 numarasını ele alalım burda en önce 0 tuşuna basılmış ve sırası ile geriye kalan tuşlar basılmış olsun ekrana en sağdan başlayıp ilk bastığım tuşu sola sola kaydıracak bir programın mantığı nedir en canlı örnek cep telefonlarımızda birisini aramak için numarasını tuşlarken ki olan sistemin aynısı yine aynı bir tuş ile de son yazdığımızı silebileceğimiz bir program en mantıklı nasıl olur
Benim Tuş takımını okuturken kullandığım mantık şu önce satırları tanımlıyorum sonra stunları

symbol sat_1=portb.7
symbol sat_2=portb.6
symbol sat_3=portb.5
symbol sat_4=portb.4
symbol sut_1=portb.3
symbol sut_2=portb.2
symbol sut_3=portb.1
symbol sut_4=portb.0
dim tus as byte
tus=0
basla:
high sat_1
while sut_1=1
tus=1
gosub ekran
wend
tus=0
while sut_2=1
tus=2
gosub ekran
wend
sut=0
while sut_3=1
tus=3
gosub ekran
wend
tus=0
while sut_4=1
tus="A"
gosub ekran
wend
tus=0
low sat_1
high sat_2
while sut_1=1
tus=4
gosub ekran
wend
tus=0
while sut_2=1
tus=5
gosub ekran
wend
tus=0
while sut_3=1
tus=6
gosub ekran
wend
tus=0
while sut_4=1
tus="B"
gosub ekran
wend
low sat_2
high sat_3
"
"
"
"
"
"goto basla
ekran:
print at 1,1,"tus= ",#tus
return

arkadaşlar bu tam çalışan ve benim devremdeki program değil sadece mantığı yani yaptığım program da bunun gibi ama ekran etiketi ile return arasında sanırım işlem yapmam lazım ki ekrana gelecek veri silinmeden bir sola kaysın mantığı sizce nasıl olmalı ben birkaç yöntem buluyorum ama programı baya uzatıyor en kısa yoldan nasıl yapabilirim birde tecrübeli insanların fikrini alayım dedim
[email]murat.yagci.1984@gmail.com[/email]

Tagli

Tuş takımıyla ilgili hiç deneyimim olmadı o yüzden bu konuda yardımcı olamam ama ekranda kaydırma hakkında fikir verebilirim:

Öncelikle kullandığın ekranın şu bildiğimiz 2x16 (veya benzeri) bir LCD ekran olduğunu varsayıyorum. Elinde 16'lık bir byte dizisi olduğunu düşün. Ve bu dizinin doğrusal değil dairesel olduğunu varsay, öyle ki 16. alandan (yani adres = 0F) sonra 1 ileri gidersek 1. alana (adres = 00) ulaşmış oluyoruz.

Bir adet işaretçin (pointer) olduğunu düşün 0F adresinde. Her karakter algılandığında bu karakteri dizide işaretçinin gösterdiği yere yazıp işaretçiyi 1 arttırmalısın. Daha sonra da bu diziyi işaretçinin gösterdiği yerden başlayarak ekrana yazdırmalısın. Tabi 16 byte'ı ekrana gönderirken işaretçi bir yerde 0F'den 10'a atlayıp taşma yapacaktır, bunu da kontrol edip taşma olduğunda işaretçiyi 00 yapmalısın.

Aynı yöntemi tersten uygulayarak silme de yapabilirsin. Bu sefer öncelikle işaretçiyi bir azaltıp sonra işaretçinin gösterdiği yere boşluk karekteri yazmalısın. Sonra da yine işaretçiden başlayarak 16 byte'ı ekrana yollamalısın.
Gökçe Tağlıoğlu

ete

10 'lu sayı sisteminin mantığını kullanarak kolayca aşabilirsin bu sorunu.

Elinde Tus isimli bir byte değişkeni ve Sayı isimli bir de WORD (16 bit) yada olabiliyor ise 32 bitlik bir değişkenin olsun.
Her tuş basımından sonra sayı değişkenini hesapla ve ekrana yazdır. Kullanacağın formül şu;
Sayı=Sayı*10+Tus
SOnra ekrana tus yarine sayı yı yazdır.
Örnek verelim istersen,
Sayı başlangıçta sıfırdır o halde "0" yazılacaktır.
1 tusuna bastın  SAYI=Sayı*10+tus = 0*10+1=1 olacak ve ekrana "1" yazılacaktır.
Sonra 3 tusuna bastın,
SAYI=1*10+3=13 olacak ve ekrana "13" yazılacaktır.
Bu şekilde devam ettikçe değişkenin sınırları dahilinde bu işlemi yapabilirsin.
Unutma 16 bitlik değişken kullanırsan en büyük yazabileceğin sayı 65535 olacaktır. Şayet 32 bitlik kullanabiliyorsan yazabileceğin en büyük sayı  4.294.967.295 olacaktır.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

tekniker_murat

Sn Tagli ustam ve Sn ETE hocam vermiş olduğunuz cevaplar için teşekkür ederim fakat ete hocama farklı bir konu daha sormak istiyorum...
Şöyle ki bu yukarıda yazmış olduğunuz mantık ile ekrana yazacağımız sayıyı yazdık ama silmesi silme işini de formulle yapabilirsek o daha güzel olacaktır Bunun yanında proton basicde birde tuş takımı için özel bir komut var sanırım ama bu komutun çalışma mantığı hakkında bir bilgi bulamadım bu konuya da bir el atarsanız çok faydalı olacaktır saygılarımla...
[email]murat.yagci.1984@gmail.com[/email]

Maxim

hiç kullanmadım ama yardım dosyasında şöyle diyor ,

komutun ismi "INKEY"

Example

DIM VAR1 as BYTE
VAR1 = INKEY      ' Scan the keypad
DELAYMS 50        ' Debounce by waiting 50ms
PRINT @VAR1 , " " ' Display the result on the LCD


INKEY will return a value between 0 and 16. If no key is pressed, the value returned is 16. Using a LOOKUP command, the returned values can be re-arranged to correspond with the legends printed on the keypad: -

VAR1 = INKEY
KEY = LOOKUP VAR1, [255,1,4,7,"*",2,5,8,0,3,6,9,"#",0,0,0]



DECLARE KEYPAD_PORT PORT

OG

Evet INKEY çok kullanışlı bir komut.

Bu satırın
KEY = LOOKUP VAR1, [255,1,4,7,"*",2,5,8,0,3,6,9,"#",0,0,0]
dağılım değerlerini de istediğiniz gibi değiştirebilirsiniz, değişik keypadlere uygulayabilirsiniz.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

mustafa_cmbz

arkadaşlar bu inkey hakkında birşeyde ben sormak istiyorum...vermişolduğunuz tablodan hangi tuşa basılıp basılmadığını nasıl algılarız_?

birde ete hocam sizin basic için verdiğiniz hesaplama formülünü daha önce kullandım ve çok acayip bir sorun ile karşılaştım sorunum ise keypad'ten 4. değeri girdikten sonra değerlerin karışması yani keypad'ten ilk olarak 1 e bastığımda ekranda 1'i görüyorum 2. olarak yine herhangi bir tuşa bastığımda onunda değerini ekranda görebiliyorum 3. değer içinde aynı şey geçerli fakat 4. tuş için deger girdiğimde bastığım tuşun değerini ekranda alamıyorum bunun yanında 3. degere kadar girdiğim  rakamlarda gidiyor...

sonradan fark ettim ki key-pad'in uçlarını farklı portlara bağlantılarını yapmışım acaba tarama esnasında karşılaştığım bu sorun bundan kaynaklanabilirmi_?

kolay gelsin...