CCS C de BİR LCD DENEMESİ ve İLGİNÇ BİR DURUM

elektrofizikci

Usta Üye
Katılım
30 Haz 2007
Mesajlar
1,185
Puanları
181
Yaş
39
Arkadaşlar LCD ile oynuyordum gece gece de şunu farkettim: 2*16 satır bir karakter lcd var elimde, programdaki aynı bilgiyi, LCD nin iki satırında da gösteremiyorum. Normal mi, hata mı var bende, yoksa sizede ilginç geldi mi? :)



4*3 tus takımı var, keypad_oku diye bir tustakımından gelen bilgiyi okuyan alt program var, alınan bilgiyi de tus değerine atıyor.

lcd ye hem "keypad_oku" yu gönderdim hemde " tus" u sadece birini yazdırdı, iki satıra da sadece "tus" bilgisini yolladım hiç birşey yazmadı, sadece "keypad_oku" bilgisini yolladım, tek satıra onu da yazdı...
 
Proteus da denerken , .hex değil .cof yükle.
Adım adım tuşuna tıkla , kodların açılacak(yazdığın satırlar).
Yukarı menüde adım sembolleri var ona tıkladıkça program satır satır ilerleyecek.
Hata ayıklamada yararlı bir yöntemdir.
Butona basma gibi şeyler varsa şemadan takılı kalan buton haline getir.
Adım adıma tıklamaya devam et .
Hangi satırdan hangi satıra atlıyor , okumadığı neresi , yada hangi döngüde kalıyor .., net biçimde görür ve ona göre düzeltirsin.

Ayrıca kodlarını ve çalışma dosyanı vermiş olsaydın daha net olurdu..
 
Bu hata LCD'den değil yazılan programdan kaynaklanıyor. Kodları versydin size yardımcı olabilirdim.
 
Arkadaşlar LCD ile oynuyordum gece gece de şunu farkettim: 2*16 satır bir karakter lcd var elimde, programdaki aynı bilgiyi, LCD nin iki satırında da gösteremiyorum. Normal mi, hata mı var bende, yoksa sizede ilginç geldi mi? :)



4*3 tus takımı var, keypad_oku diye bir tustakımından gelen bilgiyi okuyan alt program var, alınan bilgiyi de tus değerine atıyor.

lcd ye hem "keypad_oku" yu gönderdim hemde " tus" u sadece birini yazdırdı, iki satıra da sadece "tus" bilgisini yolladım hiç birşey yazmadı, sadece "keypad_oku" bilgisini yolladım, tek satıra onu da yazdı...

S.A.
Evet Kod ve şema çok önemli. Yoksa hata bulmamız çok zor. Benim paylaştığım program var onu bir inceleyin derim.
 
ARKADAŞLAR ÖNCELİKLE İLGİNİZ İÇİN TEŞEKKÜRLER. BU ÇOK ÖNEMLİ BİR DURUM VEYA İHTİYAÇ DEĞİLDİR. ZAMANINIZI HARCAMAYIN İSTERSENİZ.

kodlar ve üzerinde yaptığım oynamalar ve ekran çıktıları şu şekilde:

#include <16f877.h> // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

// Denetleyici konfigürasyon ayarları
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.

#use fast_io(b) //Port yönlendirme komutları B portu için geçerli
#use fast_io(d) //Port yönlendirme komutları B portu için geçerli

#define use_portb_lcd TRUE // LCD B portuna bağlı

#include <lcd.c> // lcd.c dosyası tanıtılıyor

#define sut1 pin_d1 // sut1 ifadesi pin_d0 ifadesine eşitleniyor
#define sut2 pin_d2 // sut2 ifadesi pin_d1 ifadesine eşitleniyor
#define sut3 pin_d3 // sut3 ifadesi pin_d2 ifadesine eşitleniyor
#define sat1 pin_d4 // sat1 ifadesi pin_d4 ifadesine eşitleniyor
#define sat2 pin_d5 // sat2 ifadesi pin_d5 ifadesine eşitleniyor
#define sat3 pin_d6 // sat3 ifadesi pin_d6 ifadesine eşitleniyor
#define sat4 pin_d7 // sat4 ifadesi pin_d7 ifadesine eşitleniyor

char tus=0; // karakter tipinde değişken tanımlanıyor

//*********** Keypad Tarama Fonksiyonu *********

char keypad_oku() // Fonksiyon ismi
{
output_d(0x00); // D portu çıkışı sıfırlanıyor

output_high(sat1); // 1. satır lojik-1 yapılıyor
if (input(sut1)) // 1. sütun okunuyor
{ delay_ms(20); tus=1; }
if (input(sut2)) // 2. sütun okunuyor
{ delay_ms(20); tus=2; }
if (input(sut3)) // 3. sütun okunuyor
{ delay_ms(20); tus=3; }

output_low(sat1); // 1. satır lojik-0 yapılıyor

output_high(sat2); // 2. satır lojik-1 yapılıyor
if (input(sut1)) // 1. sütun okunuyor
{ delay_ms(20); tus=4; }
if (input(sut2)) // 2. sütun okunuyor
{ delay_ms(20); tus=5; }
if (input(sut3)) // 3. sütun okunuyor
{ delay_ms(20); tus=6; }

output_low(sat2); // 2. satır lojik-0 yapılıyor

output_high(sat3); // 3. satır lojik-1 yapılıyor
if (input(sut1)) // 1. sütun okunuyor
{ delay_ms(20); tus=7; }
if (input(sut2)) // 2. sütun okunuyor
{ delay_ms(20); tus=8; }
if (input(sut3)) // 3. sütun okunuyor
{ delay_ms(20); tus=9; }

output_low(sat3); // 3. satır lojik-0 yapılıyor

output_high(sat4); // 3. satır lojik-1 yapılıyor
if (input(sut1)) // 1. sütun okunuyor
{ delay_ms(20); tus=0xE; }
if (input(sut2)) // 2. sütun okunuyor
{ delay_ms(20); tus=0; }
if (input(sut3)) // 3. sütun okunuyor
{ delay_ms(20); tus=0xF; }

output_low(sat4); // 3. satır lojik-0 yapılıyor

return tus; // Fonksiyon "tus" değeri ile geri döner
}

//********** ANA PROGRAM FONKSİYONU*******

void main ( )
{
setup_psp(PSP_DISABLED); // PSP birimi devre dışı
setup_timer_1(T1_DISABLED); // T1 zamanlayıcısı devre dışı
setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
setup_adc_ports(NO_ANALOGS); // ANALOG giriş yok
setup_adc(ADC_OFF); // ADC birimi devre dışı

set_tris_b(0x00); // B portu komple çıkış
set_tris_d(0x0F); // Yüksek değerlikli 4 bit çıkış, düşük değerlikli 4 bit giriş

lcd_init(); // LCD hazırlanıyor

printf(lcd_putc,"\fBasilan Tus="); // LCD'ye string yazdırılıyor

while(1) // Sonsuz döngü
{
lcd_gotoxy(13,1); // İmleç 3.sütun, 1.satıra konumlandırılıyor

if (keypad_oku()>9) // Eğer basılan tuş değeri 9'dan büyük ise
printf(lcd_putc,"%d",keypad_oku()); // Tuş değeri LCD'ye yazdırılıyor
else // Eğer basılan tuş değeri 9'dan büyük değilse
printf(lcd_putc,"%d ",keypad_oku()); // Tuş değeri LCD'ye yazdırılıyor
}
}



Çıktısı: Basılan Tus=4 şeklinde



Kodları şöyle yaparsam:

while(1) // Sonsuz döngü
{
lcd_gotoxy(13,1); // İmleç 3.sütun, 1.satıra konumlandırılıyor

if (keypad_oku()>9) // Eğer basılan tuş değeri 9'dan büyük ise
printf(lcd_putc,"%d",tus); // Tuş değeri LCD'ye yazdırılıyor
else // Eğer basılan tuş değeri 9'dan büyük değilse
printf(lcd_putc,"%d ",tus); // Tuş değeri LCD'ye yazdırılıyor
}

Çıktısı: Basılan Tus: 4



Kodları şöyle yaparsam:

printf(lcd_putc,"\fBasilan Tus="); // LCD'ye string yazdırılıyor
printf(lcd_putc,"\nBasilan Tus="); // LCD'ye string yazdırılıyor

while(1) // Sonsuz döngü
{
lcd_gotoxy(13,1); // İmleç 3.sütun, 1.satıra konumlandırılıyor
printf(lcd_putc,"%d",tus); // Tuş değeri LCD'ye yazdırılıyor

lcd_gotoxy(13,2); // İmleç 3.sütun, 1.satıra konumlandırılıyor
printf(lcd_putc,"%d",tus); // Tuş değeri LCD'ye yazdırılıyor
}

Çıktısı: Basılan Tus: 0
Basılan Tus: 0 şeklinde oldu.




Kodları şöyle yaparsam:

printf(lcd_putc,"\fBasilan Tus="); // LCD'ye string yazdırılıyor
printf(lcd_putc,"\nBasilan Tus="); // LCD'ye string yazdırılıyor

while(1) // Sonsuz döngü
{
lcd_gotoxy(13,1); // İmleç 3.sütun, 1.satıra konumlandırılıyor
printf(lcd_putc,"%d",tus); // Tuş değeri LCD'ye yazdırılıyor
}

Çıktısı: Basılan Tus= 0
Basılan Tus= şeklinde oluyor.



Kodları şöyle yaparsam:

printf(lcd_putc,"\fBasilan Tus="); // LCD'ye string yazdırılıyor

while(1) // Sonsuz döngü
{
lcd_gotoxy(13,1); // İmleç 3.sütun, 1.satıra konumlandırılıyor
printf(lcd_putc,"%d",tus); // Tuş değeri LCD'ye yazdırılıyor
}

Çıktısı: Basılan Tus=0 şeklinde



Kodları şöyle yaparsam:

printf(lcd_putc,"\fBasilan Tus="); // LCD'ye string yazdırılıyor

while(1) // Sonsuz döngü
{
lcd_gotoxy(13,1); // İmleç 3.sütun, 1.satıra konumlandırılıyor
printf(lcd_putc,"%d",keypad_oku()); // Tuş değeri LCD'ye yazdırılıyor
}

Çıktısı: Basılan Tus=4 şeklnde yani çıkış veriyor.



Kodları şöyle yaparsam:

printf(lcd_putc,"\fBasilan Tus="); // LCD'ye string yazdırılıyor
printf(lcd_putc,"\nBasilan Tus="); // LCD'ye string yazdırılıyor

while(1) // Sonsuz döngü
{
lcd_gotoxy(13,1); // İmleç 3.sütun, 1.satıra konumlandırılıyor
printf(lcd_putc,"%d",keypad_oku()); // Tuş değeri LCD'ye yazdırılıyor

lcd_gotoxy(13,2); // İmleç 3.sütun, 1.satıra konumlandırılıyor
printf(lcd_putc,"%d",keypad_oku()); // Tuş değeri LCD'ye yazdırılıyor
}

Çıktısı: Basılan Tus= 4
Basılan Tus=4 şeklinde yani çıkış veriyor.




Son denemede istediğim oldu, iki satırda da bilgiyi yazdırdım. Benim aklımı baştaki durum karıştırdı. Keypad_oku yerine “tus” yazıncada çıktı alabiliyordum (if-else li durumda). Ama alt alta iki kere “tus” u kullanırsam yazdıramıyorum. Keypad_oku yazınca yazdırabiliyorum. Altalta yazınca tus u neden kabul etmedi onu anlamadım J gece yarısı da olunca algılayıcılarım kapandı J
 
diğer bir husus ise tuş takımından 5 basamaklı bir sayı girip, daha önce yüklü olan bir şifre ile karşılaştırma yapmaya çalışıyorum. Şifreli kilit yani. hazır kodlara bakmak istemiyorum. 5 basamaklı sayıyı dizi şeklinde tanımlayıp for ile mi girmek mi mantıklı olur yoksa daha değişik tecrübesi olan var mı? şuan sadece aklıma 5 elemanlı önceden tanımlı diziyi, elemanları tuştakımından girilen 5 elemanlı yeni dizi ile karşılaştırmak var.. izlediğim mantık doğru mudur acaba...sağlıcakla...CCs C kullanıyorum.
 
lcd_gotoxy(13,1); // İmleç 3.sütun, 1.satıra konumlandırılıyor

3. sütun mu 13. sütun mu?

5 basamaklı sayıyı dizi şeklinde tanımlayıp for ile mi girmek mi mantıklı olur yoksa daha değişik tecrübesi olan var mı? şuan sadece aklıma 5 elemanlı önceden tanımlı diziyi, elemanları tuştakımından girilen 5 elemanlı yeni dizi ile karşılaştırmak var.. izlediğim mantık doğru mudur acaba...sağlıcakla...CCs C kullanıyorum.

Değişkenleri ister dizide tut, ister ayrı ayrı tanımla, farkeden birşey olmaz. Yeter ki neyi ne ile karşılaştırdığın karışmasın.
 

Forum istatistikleri

Konular
127,950
Mesajlar
913,864
Kullanıcılar
449,599
Son üye
Gksn

Yeni konular

Geri
Üst