tus takımı ve display

Başlatan hamzahaluk, 13 Temmuz 2014, 00:36:56

hamzahaluk

Aşağıda verdiğim gibi bir devreye ve yine aşağıda ki programı yükledim fakat şöyle bir sorun ortaya çıktı.Tuş takımındaki 1. satır 1,2,3,A ; 2. satır 4,5,6,B ; 3. satır 7,8,9,C ; 4. satır D,0,E,F şeklinde olmasını istiyordum fakat bu devre ve yazdığım bu programla 1. SÜTUN 1,2,3,A ; 2. SÜTUN 4,5,6,B ; 3. SÜTUN 7,8,9,C ; 4. SÜTUN D,0,E,F şeklinde oldu. Bu sorunu nasıl düzeltebilirim ya da devre veya programda nerede hata var?



Device 16F877
XTAL 4
TRISB=0
PORTB=0

TRISD=%11110000 

tara:
PORTD=%00000001
If PORTD.4=1 Then PORTB=0x06
If PORTD.5=1 Then PORTB=0x5b
If PORTD.6=1 Then PORTB=0x4f
If PORTD.7=1 Then PORTB=0x77

PORTD=%00000010
If PORTD.4=1 Then PORTB=0x66
If PORTD.5=1 Then PORTB=0x6d
If PORTD.6=1 Then PORTB=0x7c
If PORTD.7=1 Then PORTB=0x7c

PORTD=%00000100
If PORTD.4=1 Then PORTB=0x07
If PORTD.5=1 Then PORTB=0x7f
If PORTD.6=1 Then PORTB=0x6f
If PORTD.7=1 Then PORTB=0x39

PORTD=%00001000
If PORTD.4=1 Then PORTB=0x5e
If PORTD.5=1 Then PORTB=0x3f
If PORTD.6=1 Then PORTB=0x79
If PORTD.7=1 Then PORTB=0x71
GoTo tara



baranekrem9

Yani anladığım kadarıyla satırlarda yapmak istediğin özelliği sütunlara yapmışsın eğer böyleyse şunu yapabilirsin.Devrende sütunları pull down etmişsin farkında mısın ? onu kontrol et okuma işlemini de ona göre yap pbp bilmediğim için başka bir şey diyemiyeceğim denemekten zarar gelmez :)

ete

Yapman gereken şey , satır ortak uçlarını çıkış yapacaksın. Sütun pinlerini giriş yapacaksın. Şu anda yapmış olduğunu tersi yani.
Örnek vermek gerekir ise PORTD.4 pinini çıkış yaptım. Oraya HIGH verdim.
Şimdi teker teker bakıyorum.;
IF PORTD.0=1 ise tuş=1 dir
IF PORTD.1=1 ise TUS=2 dir
IF PORTD.2=1 ise TUS=3 dür.
IF PORTD.3=1 ise TUS=A dır.
Böylece istediğin olmuş olacak.
Bu işlem için yapman gereken değişiklikler de şunlar.
PORTD.4-PORTD.7 arasında bağlı seri dirençleri kaldır. Onlar gereksiz.
TRISD=%11110000  yerine TRISD=%00001111
Tuş kontrollerinin tamamını silip yeniden yapacaksın.
PORTD=%00010000 'ilk satıra HIGH verdim
IF PORTD.0=1 THEN TUS=1
IF PORTD.2=1 then TUS=2
IF PORTD.3=1 then TUS=3
If PORTD.4=1 then TUS=A

PORTD=%00100000
IF PORTD.0=1 THEN TUS=4
IF PORTD.2=1 then TUS=5
IF PORTD.3=1 then TUS=6
If PORTD.4=1 then TUS=B

PORTD=%01000000
IF PORTD.0=1 THEN TUS=7
IF PORTD.2=1 then TUS=8
IF PORTD.3=1 then TUS=9
If PORTD.4=1 then TUS=C

PORTD=%10000000
IF PORTD.0=1 THEN TUS=D
IF PORTD.2=1 then TUS=0
IF PORTD.3=1 then TUS=E
If PORTD.4=1 then TUS=F

şeklinde yapılacak. Tuş kodlarını yazmadım sadece TUS şu olacak dedim onları sen yazarsın.

Ete

Sıfır

Alıntı yapılan: ete - 13 Temmuz 2014, 08:08:30
Yapman gereken şey , satır ortak uçlarını çıkış yapacaksın. Sütun pinlerini giriş yapacaksın. Şu anda yapmış olduğunu tersi yani.
Örnek vermek gerekir ise PORTD.4 pinini çıkış yaptım. Oraya HIGH verdim.
Şimdi teker teker bakıyorum.;
IF PORTD.0=1 ise tuş=1 dir
IF PORTD.1=1 ise TUS=2 dir
IF PORTD.2=1 ise TUS=3 dür.
IF PORTD.3=1 ise TUS=A dır.
Böylece istediğin olmuş olacak.
Bu işlem için yapman gereken değişiklikler de şunlar.
PORTD.4-PORTD.7 arasında bağlı seri dirençleri kaldır. Onlar gereksiz.
TRISD=%11110000  yerine TRISD=%00001111
Tuş kontrollerinin tamamını silip yeniden yapacaksın.
PORTD=%00010000 'ilk satıra HIGH verdim
IF PORTD.0=1 THEN TUS=1
IF PORTD.2=1 then TUS=2
IF PORTD.3=1 then TUS=3
If PORTD.4=1 then TUS=A

PORTD=%00100000
IF PORTD.0=1 THEN TUS=4
IF PORTD.2=1 then TUS=5
IF PORTD.3=1 then TUS=6
If PORTD.4=1 then TUS=B

PORTD=%01000000
IF PORTD.0=1 THEN TUS=7
IF PORTD.2=1 then TUS=8
IF PORTD.3=1 then TUS=9
If PORTD.4=1 then TUS=C

PORTD=%10000000
IF PORTD.0=1 THEN TUS=D
IF PORTD.2=1 then TUS=0
IF PORTD.3=1 then TUS=E
If PORTD.4=1 then TUS=F

şeklinde yapılacak. Tuş kodlarını yazmadım sadece TUS şu olacak dedim onları sen yazarsın.

Ete
Erol Hocam benim anlamadığım bir nokta var:Bir yerde ıf portd.0=1 then tus=D yazıyor bir yerde tus=4 yazıyor.Ben bu olayı anlayamadım.Giriş,çıkışları nasıl değiştiriyorsunuz öyle pic karışmaz mı?

ete

verdiğim o açıklama kod değil adı üzerinde açıklamadır. Ne olduğunu anlayasın diye öyle yazdım.
Karşılığını programına göre değiştirmen gerekir. Sen basılan tuşu belirlemiyor, onun 7 segment kodunu PortB de gösteriyorsun. O halde yapman gereken;

if portd.0=1 then tus=D yerine
if portd.0=1 then PORTB=94 (veya $5E) demen gerekir.

If Portd.0=1 then tus=4 yerine
If Portd.0=1 then Portb=52 (veya $34) demen gerekiyor.

Ete

Powered by EzPortal