4 DIG DISP BASILAN TUSLARIN GOSTERIMI

Başlatan cesurcelik, 26 Ekim 2005, 14:33:13

cesurcelik

herkese merhaba
4 adet tus ve 4 dig 7 seg kullanarak,basilan tus u ekranda basarak,yeni bir tusa basilmissa eskiyi 2 digite,yeniden yeni bir tusa basilmissa 3 digite gonderen ve eski tuslarin 2. ve 1 displayda kalmasini saglayan bir programi pbp da yaziyorum..
basilan tusu first digitte gosterdim fakat yeni tuslara basildiginda kaydirma mantigini cozemedim.
program mantigi hakkinda yardimci olacak arkadaslara simdiden tessekur ederim .
mutlu gunler

stlg

Sevgili cesurcelik
Arkadasım pbp konusunu bilmiyorum ben assembly kullanıyorum ama
genelde mantık aynıdır oncelikle senin displeyleri nasıl surdugunu bilmemiz lazım pic ile displey arasında bir entegre falan varmı
devren hakkında bilgi verirsen sana yardım edebiliriz

                ALLAHA EMANET OLUNUZ
ALLAHA EMANET OLUNUZ Hoştur bana senden gelen,  Ya gonca gül yahut diken,  Ya kaftandır yahut kefen,  Kereminde hoş lütfunda hoş.

ete

BU iş için senin nasıl bir mantık kullandığını bilmediğimden aklıma ilk gelen çözümü sana söyleyeyim belki işine yarar.

Bu işde on tabanına göre sayı sisteminin avantajını kullanman gerekir. Şöyleki;
- ilk bastığın tuş 4 olsun, ikinci 3 ve üçüncüde 2 olsun hatta dördüncü 1 olsun.
- bu durumda bastığın tuşlar sırası ile şöyle gözükmesi gerekir 4321. Yani birler hanesinde 1, onlar hanesinde 2, yüzler hanesinde 3 ve binler hanesinde ise 4 rakamı görülmelidir.
- Öncelikle SAYI adında bir WORD değişkeni tanımla (4 haneden dolayı)
  SOnra Birler, Onlar, Yuzler ve binler adı altında byte değişkenleri tanımla.
- İlk girilen sayı 4 olduğundan sayı=4 olacaktır.
- Ekran adı altında bir alt program düzenle ve şunları yaz;
 Birler=SAYI DIG 0
 Onlar= SAYI DIG 1
 Yuzler=SAYI DIG 2
 Bınler = SAYI DIG 3
 Önce birinci digit'i aktif hale getir ve port'a Birler'ı ver.
 SOnra ikinci digit'i aktif yap ve port'a Onlar'ı ver
 Sonra yuzler'i
 Sonra Binler'i ver.
Böylece ilk rakam birinci digit de görülecektir.
- Şimdi ikinci rakamı gir yani 3 rakamını, hesap makinesi kullanmış olsaydık ekran şöyle görülecek idi  " 43" bu nedir 43 rakamıdır. O halde
Sayı değişkeninde 43 rakamının olması gerekir. BU şöyle yap;
Sayı=birler x 10+Sayı  (sayı değişkeninde yeni girilen 3 rakamı olduğunu biliyoruz) Bu durumda Sayı= 4x10+3 =43 olacaktır.
-Gosub Ekran dediğin zaman sağdan 1 digitde 3 ikincide 4 rakamı görülecektir.
- Şimdi üçüncü rakamı girelim yani 2 rakamını ekran görüntüsü 432 olması gerekir. O halde Sayı=(birlerX10)+(onlarX100)+(yuzlerX1000)+Sayı
Sayı=3x10 + 4x100 + 0x1000 + 2 = 432 olacaktır.
- Tekrar gosub ekran dediğin anda göreceğin değer 432 olacaktır.
Artık son digitide sen yaparsın bu kadar açıklamadan sonra değilmi?.

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

cesurcelik

herkese merhaba.

ozellikle fikir paylasiminda bulunan arkadaslara degerli zamanlarini paylastiklari icin  teşekkür ederim.
boyle guzel insanlarin oldugunu bilmek cok guzel.
ete nin yazdidigi program mantigini kullanarak programi pbp da yazdim:
PortA=0
TrisA=%00001111
PortB=0
TrisB=%00000000

Symbol TUSA=PORTA.0
SYMBOL TUSB=PORTA.1
SYMBOL TUSC=PORTA.2
SYMBOL TUSD=PORTA.3
SAYI     VAR WORD
SAYI1 VAR WORD
BIRLER   VAR BYTE
ONLAR    VAR BYTE
YUZLER VAR BYTE
BINLER VAR BYTE
PORTB=0
SAYI=0
'--------------------------------------------------

START
      GOSUB TUS
      SAYI=SAYI
      GOSUB SCR
      GOSUB TUS
      SAYI=SAYI+BIRLER*10
      GOSUB SCR
      GOSUB TUS
      SAYI=SAYI+(BIRLER*10)+(ONLAR*100)
      GOSUB SCR
      GOSUB TUS
      SAYI=SAYI+(BIRLER*10)+(ONLAR*100)+(YUZLER*1000)
      GOSUB SCR
      
      GOTO START
TUS:      
      IF TUSA=0 THEN SAYI=1 :PAUSE 150 
      WHILE TUSA=0
      WEND
      
      IF TUSB=0 THEN SAYI=2 :PAUSE 150 
      WHILE TUSB=0
      WEND
      
      IF TUSC=0 THEN SAYI=3 :PAUSE 150 
      WHILE TUSC=0
      WEND
   
      IF TUSD=0 THEN SAYI=4 :PAUSE 150 
      WHILE TUSD=0
      WEND    
    
      RETURN  
       
SCR: 
      BIRLER=SAYI DIG 0
      ONLAR= SAYI DIG 1
      YUZLER=SAYI DIG 2
      BINLER=SAYI DIG 3
          
      PORTB=$F0 | BIRLER
      LOW PORTB.7
      PAUSE 1
      HIGH PORTB.7
      PAUSE 1
    
      PORTB=$F0 | ONLAR
      LOW PORTB.6
      PAUSE 1
      HIGH PORTB.6
      PAUSE 2
      
      PORTB=$F0 | YUZLER
      LOW PORTB.5
      PAUSE 1
      HIGH PORTB.5
      PAUSE 2
      
      PORTB=$F0 | BINLER
      LOW PORTB.4
      PAUSE 1
      HIGH PORTB.4
      PAUSE 2
      RETURN
   
      END
                  

fakat programi proteus da simule ettigimde devre sayici devresi gibi calisiyor sanki random degerler gonderiyor,nerede bir mantik hatasi yaptigimi simdillik bulamadim,dig leri surmek icin 4511 ent si kullandim
devreyi buraya nasil upload yapacagimi bilmedigim icin gonderemedim.
herkese mutlu gunler

ete

@cesurcelik,

Programda bazı kusurların var. Aşağıdaki kodu dene ve kusurlarını karşılaştırarak bulmaya çalış.
ETE

PortA=0 
TrisA=%00001111 
PortB=0 
TrisB=%00000000 

Symbol TUSA=PORTA.0 
SYMBOL TUSB=PORTA.1 
SYMBOL TUSC=PORTA.2 
SYMBOL TUSD=PORTA.3 
SAYI    VAR BYTE
RAKAM   VAR WORD
SAYI1   VAR byte 
BIRLER  VAR BYTE 
ONLAR   VAR BYTE 
YUZLER  VAR BYTE 
BINLER  VAR BYTE 

CLEAR
PORTB=0 
SAYI=0 
RAKAM=0

GOSUB SCR
'-------------------------------------------------- 

START: 
      GOSUB TUS
      IF SAYI=0 THEN IKI 
      GOSUB SCR 

IKI:  GOSUB TUS 
      IF SAYI=0 THEN UC
      GOSUB SCR 

UC:   GOSUB TUS 
      IF SAYI=0 THEN DORT
      GOSUB SCR 

DORT: GOSUB TUS 
      IF SAYI=0 THEN BES
      GOSUB SCR 

BES:  GOTO START 
TUS:      
      SAYI=0
      IF TUSA=0 THEN SAYI=1 :PAUSE 150 
      WHILE TUSA=0 
      WEND 
      
      IF TUSB=0 THEN SAYI=2 :PAUSE 150 
      WHILE TUSB=0 
      WEND 
      
      IF TUSC=0 THEN SAYI=3 :PAUSE 150 
      WHILE TUSC=0 
      WEND 
    
      IF TUSD=0 THEN SAYI=4 :PAUSE 150 
      WHILE TUSD=0 
      WEND    

      RETURN  
        
SCR:  RAKAM=SAYI+(BIRLER*10)+(ONLAR*100)+(YUZLER*1000)
      BIRLER=RAKAM DIG 0 
      ONLAR= RAKAM DIG 1 
      YUZLER=RAKAM DIG 2 
      BINLER=RAKAM DIG 3 
          
      PORTB=240 | BIRLER 
      LOW PORTB.7 
      PAUSE 1 
      HIGH PORTB.7 
      PAUSE 1 
       
      PORTB=240 | ONLAR 
      LOW PORTB.6 
      PAUSE 1 
      HIGH PORTB.6 
      PAUSE 1 
      
      PORTB=240 | YUZLER 
      LOW PORTB.5 
      PAUSE 1 
      HIGH PORTB.5 
      PAUSE 1 
      
      PORTB=240 | BINLER 
      LOW PORTB.4 
      PAUSE 1 
      HIGH PORTB.4 
      PAUSE 1 
      RETURN 
    
      END
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

cesurcelik

merhaba ete.
ete teşekkürler ,yazdigin cod lari denedim, calisiyor.

mutlu gunler.