Sayıları basamaklara ayırma

Başlatan Maxim, 19 Nisan 2008, 11:25:58

Maxim

aslında bunun ismi başka birşey ama neyse ,

temelde  float bir sayıyı 75hc164 kullanarak 7 segment displayde görmeye çalışıyorum .

örnek :1.23 sayısı

bu iş için shout komutu kullanılıyor ,
sayının basamaklarını tek tek shout komutu ile göndermem gerekiyor ,
ilk sayı 1. displayde gözüküyor 2. sayı 2. displayde ..
sıraylar basamakları peş peşe gönderiyoruz .

word sayısında iş daha kolay DIG komutu ile hangisini istiyorsan ayıklayıp gönderiyorum da ,float oldumu zorlanmaya başladım çünkü float sayılarda DIG komutu kullanılmıyor .

bende rakamı string yapıp öyle göndereyim dedim ,

oldu da ama ayıklama işleminden sonra ortaya çıkan sayılar neden garip onu anlayamadım ?

mesela 1.23 sayısı

1. basamakta(BIRLER) hex 31 yani decimal olarak 49 geliyor
2. basamak yani nokta işareti desimal 46
3. basamak desimal 50
4. basamak desimal 51


söylemeyi unuttum devre voltmetre olacak ,
örnek 12.45 volt

umarım anlatabilmişimdir ..

Dim A1 As Float
A1 =1.23

Dim BIRLER As Byte
Dim ONLAR As Byte
Dim YUZLER As Byte
Dim BINLER As Byte
 
StrN SAYI = Str$(DEC2 A1)

BIRLER = SAYI[0]
ONLAR  = SAYI[1] 
YUZLER = SAYI[2]
BINLER = SAYI[3]

Veli B.

ASCII char olduğu için böyle oldu. Elde ettiğin değerlerden 48 çıkarırsan, 7S e gönderebilmen için (Decimal)onluk tabanda rakamlar elde edersin.

SHOUT DTA , CLK , MSBFIRST , [ SAYI[0]-48, SAYI[2]-48,SAYI[3]-48]

dönüştürme vs işlemleri atladım, o kısımları sen yaparsın.

atila

aslında stringe çevirmeden bu iş daha kolay olur.virgülden sonra iki rakamımız var farzedersek;
a=1.23 mesale
b=ax100;(123 önce sayıyı yüzle çarpıp virgülden kurtarıyoruz)sonra
d=b % 10 (10 a bölümünden kalan d=3)
b=b/10;(b=12 oldu)
c=b %10 ( c=2)
b=b/10;  (b=1)

b=1 c=2 d=3 bu şekilde basamakları elde etmiş oluyoruz

kolay gelsin..

Maxim

iki cevapta harika .

katana hocam birşey daha sorabilirmiyim ?

normalde displayde 1 sayısını görebilmek için ,
decimal 96 yani binary 01100000 göndermek gerekiyor ,
bu sizin dönüştürme işi dediğiniz olay bu değilmi ?

yani shout ile 1 gönderirsem olmaz ,
1 sayısını 96 yapıp öyle göndermeliyim,
başka bir yolu yok değilmi benim bilmediğim ?

kolay gelsin