Buton Gecikmesi CCS C

aapocan

Üye
Katılım
3 May 2011
Mesajlar
36
Puanları
1
Yaş
32
Programı gördükten sonra çok yeni olduğumu göreceksiniz :)
Programda butonlarla süre giriliyor daha sonra başlat tuşuna basıldığında süre geri saymaya başlıyor ve bir röleyi sürüyor.
Sadece şöyle bir sıkıntım var reel devrede ;
Süre girilip, kullanıcı başlat tuşuna uzun süre basılı tuttuğunda (yanlışlıkla); süre çok hızlı şekilde eriyor. Butonu algıladıktan sonra verdiğim pause işe yaramıyor açıkçası


Kod:
#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,saat,birler,onlar,sbirler,sonlar,i,saniye;
int dizi[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);


sayac=saat=birler=onlar=sbirler=sonlar=i=saniye=0;






 set_tris_a(0b11111111);
 set_tris_d(0xFF);
   set_tris_b(0x00);     
   output_b(0x00);
   set_tris_c(0x00);     
   output_c(0x00);
  set_tris_e(0xFF); 
   set_tris_d(0x00);     
   output_d(0x00);
   
   while(1)
   {
   lcd_init();
   lcd_gotoxy(3,1);
   printf(lcd_putc,"?");
    delay_ms (2000);
   output_low(pin_d0);
   
  bak: 
  if(input(pin_e0))
{delay_ms(150);
goto kapak;}


  if(input(pin_a0))
  {delay_ms(1250);
  goto calistir;}
  
   if(input(pin_a5))
  {delay_ms(150);
  sayac=sayac+1;
  if(sayac>59)
  {sayac=sayac-60;
  saat=saat+1;}
   goto goster;}
  if(input(pin_a4))
  {delay_ms(150); 
  sayac=sayac+20;
   if(sayac>59)
  {sayac=sayac-60;
  saat=saat+1;}
   goto goster;}
   if(input(pin_a3))
  {delay_ms(150);
   if(sayac<1)
  {if(saat>0)
  {saat=saat-1;
   sayac=sayac+59;}
  else
  sayac=0;}
  else 
  sayac=sayac-1;
  goto goster;}
   if(input(pin_a2))
  {delay_ms(150);
  if(sayac<20)
  {if(saat>0)
  {saat=saat-1;
   sayac=sayac+40 ;}
  else
  sayac=0;}
  else 
  sayac=sayac-20;}
  goto goster;
   
   
  goster:
  
if(sayac<10)
{if(saat<10)
{lcd_init();
lcd_gotoxy(3,1);
   printf(lcd_putc,"?");
   delay_ms(1);
lcd_gotoxy(5,2);
printf(lcd_putc,"0%d:0%d:00",saat,sayac);
delay_ms(150);}
else{
lcd_init();
lcd_gotoxy(3,1);
   printf(lcd_putc,"?");
   delay_ms(1);
lcd_gotoxy(5,2);
printf(lcd_putc,"%d:0%d:00",saat,sayac);
delay_ms(140);}}
else{
if(saat<10)
{lcd_init();
lcd_gotoxy(3,1);
   printf(lcd_putc,"?");
   delay_ms(1);
lcd_gotoxy(5,2);
printf(lcd_putc,"0%d:%d:00",saat,sayac);
delay_ms(140);}
else{
lcd_init();
lcd_gotoxy(3,1);
   printf(lcd_putc,"?");
   delay_ms(1);
lcd_gotoxy(5,2);
printf(lcd_putc,"%d:%d:00",saat,sayac);
delay_ms(140);}}


goto bak;






calistir:


i=1;


output_high(pin_d0);


if(input(pin_e0))
{goto kapak;
delay_ms(55);}
if(input(pin_a1))
{goto dur;
delay_ms(55);}


if(saniye<1)
{  if(sayac>0)
  {saniye=saniye+59,
  sayac=sayac-1;}
   else{
 if(saat>0){
 saat=saat-1;
 sayac=sayac+59;} 
 goto bitir;}}
 else 
 saniye=saniye-1;
 
 goto goster2;
  
goster2:  


 if(sayac<10)
{if(saat<10)
     if(saniye<10)
{lcd_init();
lcd_gotoxy(3,1);
   printf(lcd_putc,"?");
lcd_gotoxy(5,2);
printf(lcd_putc,"0%d:0%d:0%d",saat,sayac,saniye);
goto saniyegecikmesi;
}


     else{
lcd_init();
lcd_gotoxy(3,1);
   printf(lcd_putc,"?);
lcd_gotoxy(5,2);
printf(lcd_putc,"0%d:0%d:%d",saat,sayac,saniye);
goto saniyegecikmesi;}
else{
if(saniye<10)
{lcd_init();
lcd_gotoxy(3,1);
   printf(lcd_putc,"?");
lcd_gotoxy(5,2);
printf(lcd_putc,"%d:0%d:0%d",saat,sayac,saniye);
goto saniyegecikmesi;}


else{
lcd_init();
lcd_gotoxy(3,1);
   printf(lcd_putc,"?");
lcd_gotoxy(5,2);
printf(lcd_putc,"%d:0%d:%d",saat,sayac,saniye);
goto saniyegecikmesi;}}}


if(saat<10)
{if(saniye<10)
{lcd_init();
lcd_gotoxy(3,1);
   printf(lcd_putc,"?");
lcd_gotoxy(5,2);
printf(lcd_putc,"0%d:%d:0%d",saat,sayac,saniye);
goto saniyegecikmesi;}
else{
{lcd_init();
lcd_gotoxy(3,1);
   printf(lcd_putc,"?");
lcd_gotoxy(5,2);
printf(lcd_putc,"0%d:%d:%d",saat,sayac,saniye);


goto saniyegecikmesi;}}}


if(saniye<10)
{lcd_init();
lcd_gotoxy(3,1);
   printf(lcd_putc,"?");
lcd_gotoxy(5,2);
printf(lcd_putc,"%d:%d:0%d",saat,sayac,saniye);
goto saniyegecikmesi;}
else
{lcd_init();
lcd_gotoxy(3,1);
   printf(lcd_putc,"?");
lcd_gotoxy(5,2);
printf(lcd_putc,"%d:%d:%d",saat,sayac,saniye);
goto saniyegecikmesi;}






dur:


output_low(pin_d0);


 if(input(pin_a0))
  {goto calistir;
  delay_ms(55);}
   if(input(pin_e0))
  {goto kapak;
  delay_ms(80);}


if(sayac<10)
{if(saat<10)
     if(saniye<10)
{lcd_init();
lcd_gotoxy(3,1);
   printf(lcd_putc,"?");
lcd_gotoxy(5,2);
printf(lcd_putc,"0%d:0%d:0%d",saat,sayac,saniye);
delay_ms(150);
goto dur;
}
     else{
lcd_init();
lcd_gotoxy(3,1);
   printf(lcd_putc,"?");
lcd_gotoxy(5,2);
printf(lcd_putc,"0%d:0%d:%d",saat,sayac,saniye);
delay_ms(150);
goto dur;}


else{
if(saniye<10)
{lcd_init();
lcd_gotoxy(3,1);
   printf(lcd_putc,"?");
lcd_gotoxy(5,2);
printf(lcd_putc,"%d:0%d:0%d",saat,sayac,saniye);
delay_ms(150);
goto dur;}


else{
lcd_init();
lcd_gotoxy(3,1);
   printf(lcd_putc,"?");
lcd_gotoxy(5,2);
printf(lcd_putc,"%d:0%d:%d",saat,sayac,saniye);
delay_ms(150);
goto dur;}}}


if(saat<10)
{if(saniye<10)
{lcd_init();
lcd_gotoxy(3,1);
   printf(lcd_putc,"?");
lcd_gotoxy(5,2);
printf(lcd_putc,"0%d:%d:0%d",saat,sayac,saniye);
delay_ms(150);
goto dur;}
else{
{lcd_init();
lcd_gotoxy(3,1);
   printf(lcd_putc,"?");
lcd_gotoxy(5,2);
printf(lcd_putc,"0%d:%d:%d",saat,sayac,saniye);
delay_ms(150);
goto dur;}}}


if(saniye<10)
{lcd_init();
lcd_gotoxy(3,1);
   printf(lcd_putc,"?");
lcd_gotoxy(5,2);
printf(lcd_putc,"%d:%d:0%d",saat,sayac,saniye);
delay_ms(150);
goto dur;}
else
{lcd_init();
lcd_gotoxy(3,1);
   printf(lcd_putc,"?");
lcd_gotoxy(5,2);
printf(lcd_putc,"%d:%d:%d",saat,sayac,saniye);
delay_ms(150);
goto dur;}




bitir:


output_low(pin_d0);
goto bak;


kapak:


output_low(pin_d0);
sayac=saat=birler=onlar=sbirler=sonlar=i=0;
goto bak;


saniyegecikmesi:
i++;
delay_ms(87);


if(input(pin_e0))
{goto kapak;
delay_ms(150);}
  if(input(pin_a0))
  {goto calistir;
  delay_ms(150);}
   if(input(pin_a5))
  {delay_ms(150);
  sayac=sayac+1;
  if(sayac>59)
  {sayac=sayac-60;
  saat=saat+1;}
   goto goster;}
  if(input(pin_a4))
  {delay_ms(150); 
  sayac=sayac+20;
   if(sayac>59)
  {sayac=sayac-60;
  saat=saat+1;}
   goto goster;}
   if(input(pin_a3))
  {delay_ms(150);
   if(sayac<1)
  {if(saat>0)
  {saat=saat-1;
   sayac=sayac+59;}
  else
  sayac=0;}
  else 
  sayac=sayac-1;
  goto goster;}
   if(input(pin_a2))
  {delay_ms(150);
  if(sayac<20)
  {if(saat>0)
  {saat=saat-1;
   sayac=sayac+40 ;}
  else
  sayac=0;}
  else 
  sayac=sayac-20;}
  
  if(i==12)
goto calistir;
  else
  goto saniyegecikmesi;
  
   }}
 
Butona bastıktan sonra butonu algılamayacak bir algoritma olması lazım...Şöyle birşey yapabilirsin.

if (buton==0 && x==1) x=0;

if (buton==1 && x==0)
{
delay_ms(1000);
x=1;
}

Burada butona bastığınızda sadece 1 basma algılanır,bir daha buton fonksiyonuna girilmez.Buton işlmesi için elimizi butonadan çekip bir daha basmamız lazım.
 
Anladım deneyeceğim; teşekkür ederim ilginize
 

Forum istatistikleri

Konular
129,842
Mesajlar
930,702
Kullanıcılar
452,686
Son üye
heisener123

Yeni konular

Geri
Üst