CCS C ikili display 0-99 sayıcı yardım !!!

Katılım
16 Eki 2008
Mesajlar
2
Puanları
1
Yaş
39
Merhaba arkadaşlar CCS C ile pic programlama öğrenmeye çalışıyorum kitaptaki bir örnek kafama takıldı bir türlü çıkamadım işin içinden.
----------

öncelikle ikili 7 segment display kullanımını çözemedim. iki ayrı displayin aynı baraları birleştirlmiş ve ortak uçlar farklı.ortak uçtan hangisine 0 verirsek o seçilecek tamam ama benim anlamadığım örneğin sayı 9 kadar saydı 10 olması için ikisinide yakmamız lazım birini 1 diğerini 0 nasıl yapacağız yada yaptık sayı 11,12,13 diye sayarken onlar hanesini nasıl 1 olarak tutacağız ortak ucuna 1 verdiğimizde sönmeyecek mi? veya ikisinede 0 versek ikiside aynı sayıyı göstermeyecek mi? sanırım benim ikili displayda bilmediğim bişeyler var.
-------
yardımlarınızı bekliyorum şimdiden teşekkürler.
 
arkadaşlar kitaptaki uygulamanın kodları da bunlar proteusta çalıştıramadım.
---------------------------
#define display_1 pin_A0
#define display_2 pin_A1
#define buton pin_A2
char birler=0, onlar=0, sayi=0;
const int digit[10]={0x3F,0x06,0x5B,0X4F,0X66,0X6D,0X7C,0X07,0X7F,0X6F};
void main()
{
set_tris_a(0b11111100);
set_tris_b(0x00);
output_low(display_1);
output_low(display_2);
while(1)
{
birler=sayi%10;
onlar=sayi/10;

output_high(display_2);
output_b(digit[birler]);
delay_ms(5);
output_low(display_2);

output_high(display_1);
output_b(digit[onlar]);
delay_ms(5);
output_low(display_1);

if(input(buton))
{
delay_ms(10);
sayi++;
if(sayi==100)
sayi=0;
birler=sayi%10;
onlar=sayi/10;

while(input(buton))
{
output_high(display_2);
output_b(digit[birler]);
delay_ms(5);
output_low(display_2);

output_high(display_1);
output_b(digit[onlar]);
delay_ms(5);
output_low(display_1);
 
bu soruya cevap bulursan çok iyi olur,çünkü bende 2 gündür bu soru üzzerinde düşünüyorum ve CCS c den nefret etmeye başladım bu yüzden ama CCS C ile alakalı bir durum değil,sorun gerçekten çok tuhaf ,ikili 7 segmentin her iki ekranını b portuyla sürmemize rağmen nasıl 1. segmenti sabit tutup diğerini arttıracağız açıkcası benimde kafam çok karıştı,çünkü her ikiside b portu üzerinden sürüyor birnde 5 varken diğerinde 3 ifadesini nasıl göstereceğiz...???????????
 
..
#define birler pin_b4 //birler ifadesi pin_b4 yerine
#define onlar pin_b5 //onlar ifadesi pin_b5 yerine
...
output_low(birler); //birler transistör kesimde
output_low(onlar); //onlar transistör kesimde

while(1)
{
for( j=0; j < 100; j++) // 5 + 5 x 100 = 1 sn aralikli artis
{
output_d(digit[i/10]); // i sayısının onlar basağını al ve gonder(10 ile bölümü sonucu)
output_high(onlar); // onlar transistörü iletimde
delay_ms(5); // biraz bekle
output_low(onlar); // onlar transistörü kesimde

output_d(digit[i%10]); // i sayısının onlar basağını al ve gonder(10 ile bölümü sonucu)
output_high(birler); // birler transistörü iletimde
delay_ms(5); // biraz bekle
output_low(birler); // birler transistörü kesimde

}
if(++i >= 100)
i = 0; // i artır ve sonra i değeri 10 eşit büyük mü?

}


Aslında sırayla bir o yanıyor bir diğeri göz tabi belli bir frekansın altında göz algılayamıyor
 
Siz yanılıyorsunuz.1 herzaman yanmıyorki.Aslında yanıp sönüyor.
 
Proteus devresini kurarken kitaptaki display seçici uçlarındaki transistörleri kaldırıp direkt bağlayın ve de programı buna göre düzenleyin(nasıl yapılacagı orda anlatılmıştı) uyarısını dikkate aldınız mı? Eğer bu uyarıya göre düzenlemeleri yaptıysanız programın çalışması gerekir çünkü benim uygulama da program çalıştı.Çalışan kod dosyasını ve ISIS dosyasını da mesaja ekledim ordan da bakabilirisiniz.
 

Ekli dosyalar

  • display_sayıcı_0-99.rar
    28.7 KB · Görüntüleme: 83
Verdiğiniz koddaki "delay_ms(5)" yerine "delay_ms(1000)" yada "500" yapın sonra isiste çalıştırın nasıl olduğunu daha iyi anlayabilirsiniz..
 
asembly kodları olan da var mı
 
Merhaba arkadaşlar CCS C ile pic programlama öğrenmeye çalışıyorum kitaptaki bir örnek kafama takıldı bir türlü çıkamadım işin içinden.
----------

öncelikle ikili 7 segment display kullanımını çözemedim. iki ayrı displayin aynı baraları birleştirlmiş ve ortak uçlar farklı.ortak uçtan hangisine 0 verirsek o seçilecek tamam ama benim anlamadığım örneğin sayı 9 kadar saydı 10 olması için ikisinide yakmamız lazım birini 1 diğerini 0 nasıl yapacağız yada yaptık sayı 11,12,13 diye sayarken onlar hanesini nasıl 1 olarak tutacağız ortak ucuna 1 verdiğimizde sönmeyecek mi? veya ikisinede 0 versek ikiside aynı sayıyı göstermeyecek mi? sanırım benim ikili displayda bilmediğim bişeyler var.
-------
yardımlarınızı bekliyorum şimdiden teşekkürler.

arkadaşım örneğin hesap makinesi tasarımlarında minimum 8 basamak ve . ile birlike 8 segment vardır mantığı şudur;
segmentteki sayı ile birlikte segment seçim bilgisi t/8 süresi boyunca verilir segmentler sıra ile yanıp söner.Minimum saniyede 100 kere.bunda insanın göz yanılgısı kullanılır.Eğer sen bu displayleri hızlı bir kamera ile seyreder veya fotoğraf çekersen tek,tek yandığını görebilirsin...
 
#define artir portd.rd0
#define azalt portd.rd1








void main() {




int birler=0;
int onlar=0;
char display[10]={63,6,91,79,102,109,125,7,127,111};


portb=0;
trisb=0;
portc=0;
trisc=0;
portd=0;
trisd=0x03;


while(1){


portc=0x02;
delay_ms(50);
portb=display[onlar];
portc=0x01;
delay_ms(50);
portb=display[birler];




if(artir){

birler++;
if(birler>9){
birler=0;
onlar++;
}
if(onlar>9)onlar=0;

while(artir);
}


if(azalt){

birler--;
if(birler<0){
birler=9;
onlar--;
}

if(onlar<0)onlar=9;

while(azalt);


}








}






}





arkadaslar microc ile yazdıgım kod.0-99 up-down counter pic16f877a için yazdım.Şimdi kodda bulunan asagıdaki kısmı inceleyelim


portc=0x02;
delay_ms(50);
portb=display[onlar];
portc=0x01;
delay_ms(50);
portb=display[birler];

portc nin 2. bitini yaktıktan sonra 50 ms bekleme yapıoruz ve lcd ye portb aracılıgıyla onlar basamagını gönderiyoruz.Daha sonra portc nin 1.bitini yakıyor ve 50 ms bekletip lcd ye portb aracılıgıyla birler basamagını gönderiyoruz.50 ms lik degişmeleri insan gözü algılayamadıgı için onlar ve birler basamagı sürekli yanıyor gibi görünür.Sonsuz döngü içinde counter basarı ile çalısıyor.
 

Forum istatistikleri

Konular
128,165
Mesajlar
915,601
Kullanıcılar
449,930
Son üye
oguuz680

Yeni konular

Geri
Üst