CCS ile zamanlayıcı

aapocan

Üye
Katılım
3 May 2011
Mesajlar
36
Puanları
1
Yaş
32
devrede zaman ayarı için 4 adet buton var,
1.buton=+1 dk
2.buton=+20dk
3.buton=-1dk
4.buton=-20dk
işlemini sağlayacak. aynı anda 4 digit display de girilen süre ss:dd olarak gözükecek. Sonradan başka özellikler de gelcekte ben burada takıldım çünkü yazdığım program ile azaltıcı butonlar işlemiyor ve arttırıcı butonlar 1 arttırıp, saat kısmına yazıyor :) yardımcı olabilecek olan varsa çok teşekkürler şimdiden,


#include <16f877a.h>
#fuses xt,noprotect,nowrt,nodebug,nolvp,nocpd,nobrownout,nowdt,noput
#use delay(clock=4M)

int sayac, saat, birler,onlar,sbirler,sonlar;
const int dijit[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,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(11111100);
set_tris_b(0x00);
output_b(0x00);
set_tris_c(0x00);
output_c(0x00);
set_tris_d(0x00);
output_d(0x00);
saat=0;
birler=0;
sbirler=0;
onlar=0;
sonlar=0;
sayac=0;
while(1)
{

bak:
{
if(input(pin_a0))
goto calistir;
else{
if(input(pin_a5))
{sayac=sayac+1;
delay_ms(150);
if(sayac=60)
{saat=saat+1 ;
sayac=0;
goto yak;};
goto yak;}
else{

if(input(pin_a4))
{sayac=sayac+20;
delay_ms(150);
if(sayac=60)
{
saat=saat+1;
sayac=0;
goto yak;};
goto yak;}
else;

if(input(pin_a3))
{sayac=sayac-1;
delay_ms(150);
if(sayac=0)
if(saat=0)
saat=0;
else{
saat=saat-1;
sayac=60;
goto yak;
};
goto yak;}

else{
if(input(pin_a2))
{sayac=sayac-20;
delay_ms(150);
if(sayac=0)
if(saat=0)
saat=0;
else{
saat=saat-1;
sayac=60;
goto yak;
};goto yak;}

}
}
}
}
;
yak:
{
if(sayac<10)
birler=sayac%10;
else
{birler=sayac%10;
onlar=(sayac/10)%10;};






if(saat<10)
sbirler=saat%10;
else{
sbirler=saat%10;
sonlar=(saat/10)%10;}

goster:
output_high(pin_c2);
output_low(pin_c5);
output_b(dijit[birler]);
delay_ms(5);
output_high(pin_c5);
output_low(pin_c4);
output_b(dijit[onlar]);
delay_ms(5);
output_high(pin_c4);
output_low(pin_c3);
output_b(dijit[sbirler]);
delay_ms(5);
output_high(pin_c3);
output_low(pin_c2);
output_b(dijit[sonlar]);
delay_ms(5);
}
calistir:
goto bak;
};
}
 
Son düzenleme:
slm aapocan ben pek anlamadım ne yapmaya çalıştığını birde yazılımda cok fazla aynı komutları kullanmışsın eger ne amaç için kullanacağını ve çalışma prensibini iyi anlatırsan çok daha az komula bu işi bitirebiliriz diye düşünüyorum.


- - - Updated - - -

birde bu çalışmada rtc olacakmı
 
set_tris_a(11111100); demişsin bu komut pinA0 ve A1 i çıkış , A2..A7 yi giriş yapar farkettin mi?
if(input(pin_a0)) bu durumda çalişmaz

 
İkinci bri uyarı if(sayac=0)
if(saat=0) şeklinde olmaaycak if(sayac==0) şeklinde olacak.
 
Evet teşekkür ederim. Aslında ödevim şu şekilde; 4 adet zaman ayarı için buton var;
1.si +1dk
2.si +20dk
3.sü -1dk
4.sü -20 dk
zaman ayarı yapıldıkça displayde girdiğimiz zaman ss:dd olarak gözükecek; bu arada da her an 'start' butonuna basıp sistemi çalıştırabilirim. sistemin çalışması da şu şekilde olacak, girilen zaman dk dk işleyecek ve displayde kalan süre yazacak aynı anda da bir led yanacak.... birde reset düğmesi var ki; buda kesme olacak ben programda tabi daha buralara gelemedim henüz :) ona basılıncada sistemin çalışması duracak başa dönecek. bilmiyorum anlatabildim mi, ilginiz için teşekkür ederim.
 
Sen hangi universitede okuyorsun aapocan ödev biraz zormuş :) Giriş çıkışları kendin belirlemek için set_tris_A vs gibi ccs c de #use fast_io(A) demek lazım onu da bir hatırlatayım.
 
#include <16f877a.h>
#fuses xt,noprotect,nowrt,nodebug,nolvp,nocpd,nobrownout,nowdt,noput
#use delay(clock=4M)
#define use_portb_lcd TRUE
#include <lcd.c>




int sayac=0,saat=0,birler=0,onlar=0,sbirler=0,sonlar=0;
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(0b111111);
set_tris_b(0x00);
output_b(0x00);
set_tris_c(0x00);
output_c(0x00);

while(1)

{
bak:
if(pin_a3==1);
goto calistir;
if(pin_a5==1);
goto arttir1;
if(pin_a4==1);
goto arttir2;
if(pin_a3==1);
goto azalt1;
if(pin_a2==1);
goto azalt2;
goto goster;


arttir1:
{
sayac=sayac+1;
if (sayac>=60)
{sayac=sayac-60;
saat=saat+1;
goto goster;}
goto goster;
};
arttir2:
{
sayac=sayac+20;
if (sayac>=60)
{sayac=sayac-60;
saat=saat+1;
goto goster;}
goto goster;
};
azalt1:{
sayac=sayac-1;
if(sayac<=0)
{sayac=sayac+60;
saat=saat-1;
goto goster;}
goto goster;
};
azalt2:
{
sayac=sayac-20;
if(sayac<=0)
{sayac=sayac+60;
saat=saat-1;
goto goster;}
goto goster;
};
goster:
{
if(sayac<=9)
birler=sayac;
else{
birler=sayac%10;
onlar=sayac/10;}


if(saat<=9)
sbirler=saat;
else{
sbirler=saat%10;
sonlar=saat/10;}




output_c(0b11011111);
switch(birler)
{
case 0:
output_b(0b00111111);
break;
case 1:
output_b(0b0110000);
break;
case 2:
output_b(0b11011010);
break;
case 3:
output_b(0b11110010);
break;
case 4:
output_b(0b01100110);
break;
case 5:
output_b(0b10110110);
break;
case 6:
output_b(0b10111110);
break;
case 7:
output_b(11100000);
break;
case 8:
output_b(11111110);
break;
case 9:
output_b(11100110);
break;}
delay_ms(10);


output_c(0b11101111);
switch(onlar)
{
case 0:
output_b(0b00111111);
break;
case 1:
output_b(0b0110000);
break;
case 2:
output_b(0b11011010);
break;
case 3:
output_b(0b11110010);
break;
case 4:
output_b(0b01100110);
break;
case 5:
output_b(0b10110110);
break;
case 6:
output_b(0b10111110);
break;
case 7:
output_b(0b11100000);
break;
case 8:
output_b(0b11111110);
break;
case 9:
output_b(0b11100110);
break;}
delay_ms(10);


output_c(0b11110111);
switch(sbirler)
{
case 0:
output_b(0b00111111);
break;
case 1:
output_b(0b0110000);
break;
case 2:
output_b(0b11011010);
break;
case 3:
output_b(0b11110010);
break;
case 4:
output_b(0b01100110);
break;
case 5:
output_b(0b10110110);
break;
case 6:
output_b(0b10111110);
break;
case 7:
output_b(0b11100000);
break;
case 8:
output_b(0b11111110);
break;
case 9:
output_b(0b11100110);
break;}
delay_ms(10);
output_c(0b11111011);
switch(sonlar)
{
case 0:
output_b(0b00111111);
break;
case 1:
output_b(0b0110000);
break;
case 2:
output_b(0b11011010);
break;
case 3:
output_b(0b11110010);
break;
case 4:
output_b(0b01100110);
break;
case 5:
output_b(0b10110110);
break;
case 6:
output_b(0b10111110);
break;
case 7:
output_b(0b11100000);
break;
case 8:
output_b(0b11111110);
break;
case 9:
output_b(0b11100110);
break;}


delay_ms(10) ; };


calistir :
{
goto goster;
delay_ms(900);
sayac=sayac-1;
if(sayac=0){
if(saat=0)
goto bitir;
else {
saat=saat-1;
sayac=60;
goto calistir;}}
else{
sayac=sayac-1;
goto calistir;}




};
bitir:
goto bak;


}
}




programı bu şekilde revize ettim ama bu seferde display de sürekli 0000 gözüküyor...
 
calistir :
{ //bunu sileceksin neden koydun ki :)

Al sana hemen bir tane hata :) Düzelt bakalım.
 
aynen öyle süslüyü :)
calistir : dan sonra öyle bir işarete neden gerek duyasın ki ?
if,while vs... sonrasında kullanılır o.
 

Yeni mesajlar

Forum istatistikleri

Konular
127,964
Mesajlar
913,940
Kullanıcılar
449,610
Son üye
cagriaytmz

Yeni konular

Geri
Üst