CCS C ile display uygulama lütfen yardım

Katılım
25 Kas 2009
Mesajlar
34
Puanları
1
ORTAK KATOT DİSPLAY İLE 0-99 SAYICI YAPIP ARTTIR AZALT BUTONLARI İLE SEÇİLEN RAKKAMDAN GERİYE SAYMASINI İSTEDİM ancak çalıştıramadım ustalardan yardım istiyorum şimdiden teşekkür ederim aşağıda yazdığım kodlarda nerede hata yaptığımı yazarmısınız

#include "C:\Documents and Settings\skyvision\Belgelerim\CCS S DENEME\displayuygulama\16f877ikilidisplay\Yeni Klasör\main.h"
#use fast_io(a)
#use fast_io(b)
#define display_1 pin_a0
#define display_2 pin_a1
#define arttir pin_a4
#define azalt pin_a5
char birler=0,onlar=0,sayi=0;
int i;
const int digit[10]={0x00,0x06,0x5b,0x4f,0x66,0x6d,0x7c,0x07,0x7f,0x6f};

void main()
{

setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
set_tris_a(0xfc);
set_tris_b(0x00);
output_low(display_1);
output_low(display_2);

// TODO: USER CODE!!

while(true)

{

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(arttir));

{
delay_ms(10);// buton arkını önlemek için gecikme
sayi++;
if(sayi==100);
sayi=0;
birler=sayi%10;
onlar=sayi/10;

while(input(arttir))

{

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(azalt));

{
delay_ms(10);
sayi--;
if(sayi==100);
sayi=0;// sayi sıfır olmadığı sürece döngüyü işle
birler=sayi%10;
onlar=sayi/10;


while(input(azalt));

{

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);

}
}

while(true)
{

for(i=sayi;i<=100;i--)

{

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);

}
}
}

}
 
Sayın ustalar bazı yerlerdeki hatalarımı buldum ancak geri saydırma işini bir türlü halledemedim yeni kodlar aşağıda ki kodlarda azalt ve arttır butonları ile displaye gönderiyorum sorun yok gönderdiğim rakkamı geri saydıramadım ancak ne yapmam lazım ccs c bilen arkadaşların yardımlarını bekliyorum
#include "C:\Documents and Settings\skyvision\Belgelerim\CCS S DENEME\displayuygulama\16f877ikilidisplay\Yeni Klasör\main.h"
#use fast_io(a)
#use fast_io(b)
#define display_1 pin_a0
#define display_2 pin_a1
#define arttir pin_a2// arttır ma işlemi için a4 pini
#define azalt pin_a3
char birler=0,onlar=0,sayi=0;





const int digit[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7c,0x07,0x7f,0x6f};

void main()
{

setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);

setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
set_tris_a(0xFC);
set_tris_b(0x00);
output_low(display_1);
output_low(display_2);

// TODO: USER CODE!!

while(true)

{

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(arttir))

{
delay_ms(10);// buton arkını önlemek için gecikme
sayi++;
if(sayi==100)
sayi=0;

birler=sayi%10;
onlar=sayi/10;
while (input(arttir))

{

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(azalt)&&(sayi!=0))

{
delay_ms(10);// buton arkını önlemek için gecikme
sayi--;
if(sayi==100)
sayi=0;

birler=sayi%10;
onlar=sayi/10;
while (input(azalt))

{

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);


}
}
}
}
 
programın azaltma bölümünde

if(sayi==100)
sayi==0; hata burada azaltma yapıyorsun artırma değil...
 
hocam tşkler. evet buton ile arttırma ve azaltma tamam ancak arttırma butonu ile seçtiğim rakkamdan geriye saydıramadım son hali aşağıda yardımınızı bekliyorum


#include "C:\Documents and Settings\skyvision\Belgelerim\CCS S DENEME\displayuygulama\16f877ikilidisplay\Yeni Klasör (2)\main.h"
#use fast_io(a)
#use fast_io(b)
#define display_1 pin_a0
#define display_2 pin_a1
#define arttir pin_a2
#define azalt pin_a3

char birler=0,onlar=0,sayi=0;
const int digit[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7c,0x07,0x7f,0x6f};


void main()
{

setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
set_tris_a(0xfc);
set_tris_b(0x00);
output_low(display_1);
output_low(display_2);




while(true)

{

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(arttir))

{
delay_ms(10);// buton arkını önlemek için gecikme
sayi++;
if(sayi==100)
sayi=0;
birler=sayi%10;
onlar=sayi/10;

while(input(arttir))

{

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(azalt)&&(sayi!=0))

{
delay_ms(10);
sayi--;
if(sayi==100)
sayi=0;// sayi sıfır olmadığı sürece döngüyü işle
birler=sayi%10;
onlar=sayi/10;
while(input(azalt))

{

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);

}
}//BURAYA KADAR KOD ÇALIŞIYOR ANCAK BURADAN SONRASI YOK:(
while(sayi>0)

{
for(sayi=99;sayi<=99;sayi--)//YUKARIDAN SAYİ ALDIĞI DEĞERİ GERİ SAYACAK GERİ SAYARKENDE BİRER DAKİA GECİKMELİ OLMALI
{

birler=sayi%10;
onlar=sayi/10;

output_high(display_2);
output_b(digit[birler]);
delay_ms(10);
output_low(display_2);
output_high(display_1);
output_b(digit[onlar]);
delay_ms(10);
output_low(display_1);

}
}
 
if(input(azalt))

{
delay_ms(10);
sayi--;
if(sayi==255)
sayi=99;
birler=sayi%10;
onlar=sayi/10;
....
 
Sayın Ze tr hocam ilginize tşkler ancak öneriniz çalışmadı.yapmak istediğim arttır butonu ile diyelimki 20 rakkamını seçtim (arttir,azalt butonları var yukarıdaki ikinci kodda buralar çalışıyor sorun yok) displayde 20 görüntülendi ve 10 saniye sonra display geri saymaya başlayacak 1er dakika ara ile herşey tamam ancak geri sayma işlemi bir türlü başlamıyor burada if döngüsümü for döngüsümü kullanılmalı yardımlarınızı bekliyorum

--------------------------------------------------------------------------

aşağıdaki kodda çalışıyor ancak iki kodu birleştirince geri sayma işlemi başlamıyor yardımlarınızı bekliyorum

while(true)

{
for(sayi=99;sayi<=99;sayi--)
{

birler=sayi%10;
onlar=sayi/10;

output_high(display_2);
output_b(digit[birler]);
delay_ms(10);
output_low(display_2);
output_high(display_1);
output_b(digit[onlar]);
delay_ms(10);
output_low(display_1);


}
}
}
 
Moderatör tarafında düzenlendi:
bir i değişkeni tanımla
while(sayi<0) bunu sil direk for döngüsüyle başla.for dan önce delay_ms(1000); yaz
orada for döngüsünde
for(i=sayi;i<=sayi;i--) {
birler=i%10;
onlar=i/10;

output_high(display_2);
output_b(digit[birler]);
delay_ms(10);
output_low(display_2);
output_high(display_1);
output_b(digit[onlar]);
delay_ms(10);
output_low(display_1);
delay_ms(60000);

} bi dene bakalım.
 
hemen deniyorum tşkler
-----------------------------------------------
hocam malesef ama birşeyler yapıyor saçmalıyor buda ilerleme başka tavsiyeniz olabilirmi for döngüsü ile sanır çözeceğiz başka öneriniz varmı teşekkürler
 
Moderatör tarafında düzenlendi:
sayi değişkenine bi değer vererek sadece benim verdiğim kodu bi dene bakalım çalışacak mı.eğer çalışıyorsa senin çalışıyo dedğin kodlarında değişiklik yapmak gerekebilir.zamanım olsa daha ayrıntılı bakardım ama sınavlarım var...
 
Kod:
#include <18f877.h>
#device ADC=10
//#fuses HS,NOPROTECT, NOWDT,NOLVP
#FUSES HS //INTRC_IO                 //Internal RC Osc, no CLKOUT

#use delay(clock=4000000)
#use rs232(baud=19200, xmit=PIN_c6, rcv=PIN_c7)

#use fast_io(a)
#use fast_io(b)
#define display_1    pin_a0
#define display_2    pin_a1
#define arttir       pin_a2// arttır ma işlemi için a4 pini
#define azalt        pin_a3

char birler=0,onlar=0,sayi=0;
const int digit[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7c,0x07,0x7f,0x6f};

void goster()
{
  onlar=sayi/10;
  birler=sayi-10*onlar;
 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);
}


void main()
{
 int1 ststp = 0;
 int  sayac = 0;
 
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);

setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
set_tris_a(0xFC);
set_tris_b(0x00);
output_low(display_1);
output_low(display_2);

// TODO: USER CODE!!

while(true)
{
 if(input(arttir))
 {ststp=0;
  sayi++;
  if(sayi==100) sayi=0;
 }
 if(input(azalt))
 {ststp=0;
  sayi--;
  if(sayi==255) sayi=100;
 }
 
 if(ststp==0)
 {sayac ++;
  if(sayac==25)
   {sayac=0;
    ststp=1;   
   }
 }
 
 if(ststp) sayı--;
 goster();
}

}

Mantık buna benzer bir şey olacak. Yalnız geri çok hızlı saydığı için sizin olayları görmeniz zor. Onun için butona basınca saymayı durduracak bir mantık ekledim.

Saniye bazında sayac bir azalacak ise o zaman butonlarınızın etkisini görürsünüz. Bir saniyelik zaman aralığını timer1 ve ccp compare mod ve bir sayaç kullanarak elde edebilirsiniz.
 

Forum istatistikleri

Konular
129,847
Mesajlar
930,726
Kullanıcılar
452,702
Son üye
hsyn35

Yeni konular

Geri
Üst