key-pad'ten girilen sayıları ondalık olarak hesaplayamıy

Başlatan mustafa_cmbz, 05 Ekim 2008, 18:55:25

mustafa_cmbz

merhaba arakdaşlar

bir aralar lcd+keypad ile iligi girilen sayıları ekranda gösteren bir uygulama yapmayı planlıyordum hem key-pad kullanmayı öğrenme açısından benim için faydalı olacaktı...bir aralar biraz tırmaladım ee hocanın 8 dersinden key-pad kullanmanın inceliklerini öğrendim öğrenmesine ama bu seferde display veya lcd'ye key-pad'en birbiri ardına girilen sayıların tümünü ekrana yazdırmak mesele oldu sağolsun ete hocam bundan önceki tırmalama aşamasında bana o işin formülünü verdi ama şimdi ise o formülü programa oturtmak mesele oldu benim için...nasıl yapacağımı şaşırdım...daha önceki konu başlığında ete hocamdan bu konuyla ilgili yardım istedim birazda o işi yapamanın kızgınlıyla biraz da çıkışmıştım ve bir daha da o konu başlığı altında bana cvp gelmedi...

şimdi işin mantığını tam olarak kavrayamadım benim sorunum bu..keypad'ten girilen sayıları aşağıdaki formül ile hesaplatmam lazım fakat bu formülü nereye koymam gerek onu bir türlü çözemedim...

formül:

HESAPLA: 
SAYI=SAYI*10+TUS 
RETURN



yapmak istediğim şey ise kısaca (büyük ihtimal ile lcd kullanacağım) key-pad'ten peş peşe girilen sayıları ekranda görmemi sağlıyacak ve harici bir buton'dan alınan tetikleme ile  girdiğim sayı kadar da geriye doğru sayacak ve süre sonlandığında güç transistörleri ile sürülen ledleri yakıp söndürecek...program belli bir süre böyle icra edilecek...ondan sonrası kolay zaten....

bu konuda yardımlarınızı bekliyorum...

Maxim

benim hiç keypad çalışmam olmadı ,
o yüzden umarım yanlış anlamadım,

girilen değerleri peş peşe toplayarak toplam sayıyı bulabiliriz .
aynı şeydenmi bahseediyoruz ?

yani şöyle olamazmı ?

temp As Byte
sayi As Word

hesap:
temp = keypad`ten gelen değer
sayi = sayi + temp
temp = 0
Return

mustafa_cmbz

yok hocam onu demiyorum benim demek istediğim şey key-pad'ten girilen girilen sayıları lcd göstermek ve girilen sayı kadar geirye sayım yaptırmak

örnek olarak:

key-pad'ten 0230 girildi diyelim ekranda 02:30 gözükecek ve 2:30 saat lik bir geçikme yapacak yani geriye doğru sayacak ve süre 00:00 olduğunda ledleri yakıp söndürecek...

Maxim

hala sayı diyorsun ,
şuna " girilen zaman veya saat kadar " desen ?

mustafa_cmbz

Alıntı yapılan: "maxiboost"hala sayı diyorsun ,
şuna " girilen zaman veya saat kadar " desen ?

hocam kafam çok dağınık kusra bakma sabahtab beri pc başındayım bunun la ve diğer işler ile uğraşmaktan kendime gelemedim daha....

konuya gelince tamda dediğin gibi hocam girilen zamandan geriye sayacak...ilk önce zamanı girecez bir butondan tetikleme aldığında geri sayacak...

Maxim

peki ,o zaman bize RTC (real time clock) veya onun gibi bir zaman hesaplaması yapmak gerekecekmi ?
devre ne kadar hassas çalışacak ?

o zaman en azından interrupla bir rtc kurulması lazım sanırım ?

yani 02:30 girdiğimiz zaman ,
devre 02:27 dakika sonra çıkış verirse ,ne olur ?

mustafa_cmbz

hassas olup olmaması önemli değil hocam...

Alıntı Yapedit: zaman gecikmesi max. 20-25 dk. olacakmış maxibost hocam fornext ile de yapılabilinir tam olarak timer'i çözmüş olsaydım onu da çözerdim ama bazı konuları çözemiyorum oda bazı şeyleri gözümde büyüttüğümdendir herhalde...kolay gelsin...

ete

Formülün doğru yeri basılan tuş belirlendikten sonra bir GOSUB komutu ile hesap alt programına gönderip orada formülü vermektir.
Mesela örnek şöyle olabilir.
If yatay_A=0 then
  TUS=8
  GOSUB HESAP
  GOSUB EKRAN
ENDIF

gibi. Sonuç olarak basılan tuş belirlendikten sonra hemen rakamı hesaplayabilir ve hemen ardından hesaplanan rakamıda ekranda gösterebilirsin.

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

mustafa_cmbz

iyi akşamlar hocam sorunum ile ilgilenme inceliğini gösteridğiniz için teşekkür ederim....şimdi size 2 sorum olacak hocam

ete hocam daha önce verdiğiniz hesap formülü yukarıda da verdiğim gibi tek satır olacak değilmi yani her gosup ile aynı yere gidilecek ve bu dallanmalar sırasında  tuş değeri 0 olup ve tekrar girilen değer değişkene aktarılıncak ve tuş basıldıkça hesap etiketindeki degerde her defasında 10 ile çarpılacağı için artacak değilmi ?

2. sorum ise bu elde ettiğimiz toplam değeri lcd'de göstermek için haneleri bölme ve lcd ye gönderme işlemi nasıl yapılyor bir de onu çözemedim

misal:

lcdout $fe,1,


dedikten  sonra hesapladığımız degeri nasıl böleceğiz ve lcd ye nasıl yollayacağız_? eğer bunlarıda çabuk kavrayabileceğim şekilde açıklarsanız geri de bir tek girilen değerden geriye doğru saydırmak kalıyor onuda ben biraz araştırıp takıldığım yerlerde yardım alarak bişeyler yapmaya çalışırım artık....


ete hocam senden daha öğreneceğimiz çoook şey var yardımların için çok sağol....kolay gelsin

ErsinErce

Merhaba

Protonda ondalıklı göstermek için;

Lcdout $fe,2, Dec Temp / 10 , "." , DEC1 Temp

Açıklaması;
$fe,2 = 1 ile Lcd yi komple silerken 2 ile üzerine yazar ve ekrandaki titreme yok olur
Dec = sayma sayısı olarak gösterir
DEC1 = sadece ilk hanesini gösterir

Basicteki karşılığını bilmiyorum malesef :( Yardım dosyasına bakarak çevirebilirseniz bu kod işinizi görür

papsukkal

For Col = 0 To 3
         TrisB = Dcd col ^ $ff
           Row = PortB >> 4
           if row != $f then
               key = ((col) * 3) + (ncd (Row ^ $f))
               gosub SayiGir
           endif
      Next
       goto basla

sayigir:
       if (PortB >> 4)   != $f then sayigir
       key1 = key: say = 0
       pause 10
       if x = 1 then
           sayia = 0
       endif
       x = x * 10
       sayia = Sayia + (key1 * (x / 10))  

.....
               endif


cıktı için ise

lcdout $fe,2, dec4 sayia

şeklinde daha önce kullanmıştım. 4 basamaklı bir sayıyı (şifre) lcd de her bastığımda bir basamak olarak görebiliyorum.

inceleyip formülü uyarlarsanız saat için uygulanabilir sanırım

kolay gelsin

ete

Girilecek sayılar veya rakam gurubu bir saat değeri ise ozaman saat ve dakikaların 59 dan büyük olamama kontrolünüde yapman gerek.
Gösterim formatına gelince diyelimki tuş takımından;
- önce 5 girdin. Bu durumda TUS=5 ve Rakam =5 oldu
- Sonra 3 girdin, Tus=3 ve Rakam=35 oldu
- sonra 2 girdin Tus=2 ve rakam =235 oldu.
Şimdi bunu ekranda saat formatı le yazdıralım.
Kolay Yolu Saat=rakam/100 yani saat=235/100=2 olarak bulunur.
Ohalde dakika da geriye kalanlar olacağına göre DAK=rakam//100 (Mod alma işlemi)
Böylece Saat=2 ve Dak=35 olarak elde etmiş olduk.
LCDOUT $fe,2,dec2 saat,":",dec2 dak
şeklinde de ekrana yazdırırsın.
Diğer bir metod da her bir haneyi tek tek alıp ekrana vermek olabilir.
Birler=Rakam dig 0
Onlar=Rakam Dig 1
Yuzler=Ralam Dig 2
Binler =Rakam Dig 3
şeklinde bütün hepsini tek tek alabilirsin.
LCDOUT $fe,2,dec1 binler,dec1 yuzler,":",dec1 onlar,dec1 birler
şeklinde de ekrana yazdırırsın.

Saat ile ilgili bilgiler girilirken ekran formatında saat , dak ve saniye hanelerini aralarına (:) koyarak ayırmakta gösterim açısından fayda vardır. Bu şekilde girişlerde de ilgili değerler maksimum ve min değerlerin kontrolleride kolaylıkla yapılmış olur veya olmalıdır. Hatırlatayım dedim.

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

mustafa_cmbz

merhaba ete hocam yazınıa cvp vermek için biraz geçiktim açıkçası verdiğiniz kodlar ile deneme yapıp sonuçları yazmak istedim..

verdiğiniz kodlardan faydalanarak isiste key-pad'ten girdiğim sayıları lcd ekranda görebiliyorum fakat devreyi geçeğe uyarladığımda bazı sorunlar ile karşılaştım

şöyleki:

devreye enerji verdiğim ilk anda ekrana zaman miktarını giriniz yazdırdıktan sonra keypad'ten sayı girilmesini bekliyor..tuş takımından herhangi bir rakam tuşuna bastığımda direk olarak bütün hanelere sayı atıyor ve ekranda kafasına göre bir zaman miktarı çıkıyor sonra tekrar diyelim 1 rakamına bastık ekranda dakika ya 1 yazıyor tekrar 1 veya farklı bir tuşa bastığımda o tuşun değerini atıyor fakat 3. olarak bir tuşa bastığımda o tuşun degerini alamıyorum bu sefer saat hanesi ve dakika hanesi de kafasına göre rakam atıyor...

ilk başta ise sayı değişkenini var byte olarak atadığım için sorun yaşamıştım sonra word yapınca o sorunu aştım fakat şimdi ise yukarıda bahsettiğim gibi bir sorun çıkıyor...

kodlar isiste çalışıyor gerçek uygulamada çalışmıyor...ne yapmalıyım hatamı nerede aramalıyım ?