CCS Menü yapısı hakkında

Başlatan eraygil, 13 Aralık 2011, 00:20:34

eraygil

bu programın yazarı benim elektrobilimde paylaşmıştım. amacım bu işte acemi arkadaşlara yardımcı olmaktı.  ve satır satır her komutun da anlamını yazmıştım.  program kesinlikle çalışıyor ve devresini de bordda kurup denemiştim.  ama bu  şekilde görmek gerçekten de insanı üzüyor. moderatör mesajımı yayınlarsan çok çok sevinirim. saygılar

smartcard

Alıntı yapılan: eraygil - 13 Aralık 2011, 00:20:34
bu programın yazarı benim elektrobilimde paylaşmıştım. amacım bu işte acemi arkadaşlara yardımcı olmaktı.  ve satır satır her komutun da anlamını yazmıştım.  program kesinlikle çalışıyor ve devresini de bordda kurup denemiştim.  ama bu  şekilde görmek gerçekten de insanı üzüyor. moderatör mesajımı yayınlarsan çok çok sevinirim. saygılar
Sayın Eraygil ben proteus üzerinde denedim fakat çalıştıramadım o yüzden buraya yazdım.

Murat Mert

Alıntı yapılan: eraygil - 13 Aralık 2011, 00:20:34
bu programın yazarı benim elektrobilimde paylaşmıştım. amacım bu işte acemi arkadaşlara yardımcı olmaktı.  ve satır satır her komutun da anlamını yazmıştım.  program kesinlikle çalışıyor ve devresini de bordda kurup denemiştim.  ama bu  şekilde görmek gerçekten de insanı üzüyor. moderatör mesajımı yayınlarsan çok çok sevinirim. saygılar

S.A.
Sn. eraygil siz paylaşım yapmışsınız iyilik yapmışsınız bırakın insanlar istediği gibi yararlansın. Sizin yaptığınız büyüklük, böyle düşünmeyin.  ;)
mert07

Pir-O

Ben menu oluştururken fonksiyon şeklinde oluşturuyorum fonsiyon eğer 1 kez donecekse şu şekilde oluşturuyorum

void menu1 (void){
                //Kod satırları

}


Yok eğer menu sürekli dönecek ve ben çıkmasını istediğimde çıkacaksa

void menu1 (void){
    int8 x=1;
    while(x){
         //kod satırları.
         // x'in değeri 0(sıfır) olunca menuden çıkacak
}
}


bu şekilde menuden ne zaman çıkmasını istiyorsam x değerini 0(sıfır) yapıyorum ve menuden çıkıyor.


Murat Mert

Tekrar S.A.

Sn. smartcard arkadaşımızın sorusunu basitten cevaplamak için:
Menü oluşturmalarında tavsiyem swich case kullanman takip etmesi daha kolay olur. Mesala haftanın gününü göstermen için en basitinden:

switch(haftanin_gunu)  // DS1302'den sayısal olarak alınan haftanın günü bilgisine metin olarak karşılık atanıyor
      {                     
         case 1: printf(lcd_putc,"PAZ"); break; // Eğer "1" ise LCD'ye PAZ yaz
         case 2: printf(lcd_putc,"PZT"); break; // Eğer "2" ise LCD'ye PZT yaz
         case 3: printf(lcd_putc,"SAL"); break; // Eğer "3" ise LCD'ye SAL yaz
         case 4: printf(lcd_putc,"CRS"); break; // Eğer "4" ise LCD'ye CRS yaz
         case 5: printf(lcd_putc,"PER"); break; // Eğer "5" ise LCD'ye PER yaz
         case 6: printf(lcd_putc,"CUM"); break; // Eğer "6" ise LCD'ye CUM yaz
         case 7: printf(lcd_putc,"CTS"); break; // Eğer "7" ise LCD'ye CTS yaz
      }


Yine menü ayar ve gösterge seçimlerinide bu yöntemle yaparak kolay ca halledebilirsin. Kolay gelsin
mert07

eraygil

program çalışmıyor değil programı çalıştırmayı beceremedim deyin program kesinlikle çalışıyor gerçekte çalıştırılmış vdeo ve resimleri de var. tabiki herkes yararlanmalı amacımda bu ama farklı yerlerde habersiz konu olarak açılmasını pek etik bulmuyorum       


menü oluşturacaksanız eğer  pic içerisinde bir sayaç oluşturun bu sayacı butonlarınızla isteğiniz doğrultusunda artırın yada azaltın ve    while  döngüleri oluşturun  sayacınızın içeriği hangi while şartını sağlıyorsa programın o kısmı çalışacaktır.  sayaç kısmını bütün while döngülerinin içine yazınız yoksa menüler arası geçiş yapamazsınız   

burada ki yazdığım programın mantığıda bu şekildedir.

smartcard

Ben kendi yapmaya çalıştığım kodu ekleyecektim fakat onu işyerimdeki bilgisayarımda olduğu için bu kodu eklemiştim. Yoksa kimseye karşı artbir niyetim yok. Kodu sildim zaten konu amacında uzaklaştı bence yardımcı olan arkadaşlara çok teşekkürler

Maxim

@eraygil
mahsuru yoksa kodunuzu burada da paylaşınız.

eraygil

#8
//yazar eray GÖKKAYA
//AÇIKLAMA :::::::::::
//akvaryum kontrol sistemi akvaryumun ışıklandırma sistemini ister manuel ister otomatik ortamın aydınlık 
//oranına göre devreye alır yada devreden çıkarabilir. aynı şekilde akvaryumun ısısına göre akvaryumumuzun ısısını
//istediğimiz değerler arasında tutabilir.akvaryumdaki havalandırma motorunu kullanıcının isediği doğrultusunda 
//değişik zaman dilimlerinde peryodik devreye alabilir ve devreden çıkarabilir.






#include <16f877.h>  //kullanılacak mikroişlemci tanıtılıyor
#device ADC=10// anolog birimin kullanılacağı belirtiliyor
#fuses XT //işlemci konfigüre ayarları
#use delay(clock=4000000) //kullanılacak kıristal değeri belirtiliyor
#define use_portb_lcd TRUE  //b portunda lcd nin bağlı olduğunu belirtiyoruz
#include <lcd.c> //lcd kütüphanesi programa dahil ediliyor
#include <DS1302.C> //gerçek zaman satimizin kütüphane dosyaları programa dahil ediliyor
#use fast_io(d)
#use fast_io(C)
unsigned long int bilgi,aydinlik; //değişkenler
float voltaj,sicaklik;   //değişkenler
byte saniye,dakika,saat,gun,ay,yil,haftanin_gunu; //değişkenler
unsigned int x=0,b=0,a=0,y=0,z=0,isi=0,on=0,isik,of=0,f=0; // değişkenler





SICAK_KONT()
{
if(isi>=sicaklik)
{
output_high(pin_c2);
lcd_gotoxy(38,1);
printf(lcd_putc,"on");
}
else
{
output_low(pin_c2);
lcd_gotoxy(38,1);
printf(lcd_putc,"of");
}
}


saat_ayar() //saat ayar alt menü
{


if(input(pin_d1)) // onay kod sayacı
{
delay_ms(10);
z=z+1;
while(input(pin_d1))
{}
}
while(input(pin_d2))//yukarı tuş basılma işlemi
{
delay_ms(20);
saat=saat+1;

while(input(pin_d2))
{
//saat değeri 0 11 değerleri arasında tutuluyor
if(saat==12)
saat=0;
printf(lcd_putc,"\nsaat=%2d          ",saat);
rtc_set_datetime(gun,ay,yil,haftanin_gunu,saat,dakika);     
}
}
while(input(pin_d3))//aşağı tuş basılma işlemi
{
delay_ms(20);
saat=saat-1;

while(input(pin_d3))
{
//saat değeri 0-11 değerleri arasında tutuluyor
if(saat==-1)
saat=11;
printf(lcd_putc,"\nsaat=%2d",saat);
rtc_set_datetime(gun,ay,yil,haftanin_gunu,saat,dakika); 
}
}
}


dakika_ayar()//dakika ayar alt menüsü
{
if(input(pin_d1)) //dakika ayar onay kodu
{
delay_ms(10);
z=z+1;
while(input(pin_d1))
{}
}


while(input(pin_d2))//yukarı tuş basılma işlemi
{
delay_ms(20);
dakika=dakika+1;

while(input(pin_d2))
{
//dakika değeri 0-59 değerleri arasında tutuluyor
if(dakika==60)
dakika=0;
printf(lcd_putc,"\ndakika=%2d          ",dakika);
rtc_set_datetime(gun,ay,yil,haftanin_gunu,saat,dakika);     
}
}
while(input(pin_d3))//aşağı tuş basılma işlemi
{
delay_ms(20);
dakika=dakika-1;

while(input(pin_d3))
{
//dakika değeri 0-59 değerleri arasında tutuluyor
if(dakika==-1)
dakika=59;
printf(lcd_putc,"\ndakika=%2d",dakika);
rtc_set_datetime(gun,ay,yil,haftanin_gunu,saat,dakika); 
}
}
}


gun_ayar() // gün ayar alt menüsü
{
if(input(pin_d1)) //onay kod sayacı
{
delay_ms(10);
z=z+1;
while(input(pin_d1))
{}
}

while(input(pin_d2))//yukarı tuş basılma işlemi
{
delay_ms(20);
gun=gun+1;

while(input(pin_d2))
{
//gün değeri  1-31 değerleri arasında tutuluyor
if(gun==32)
gun=1;
printf(lcd_putc,"\ngun=%2d          ",gun);
rtc_set_datetime(gun,ay,yil,haftanin_gunu,saat,dakika);     
}
}
while(input(pin_d3))//aşağı tuş basılma işlemi
{
delay_ms(20);
gun=gun-1;

while(input(pin_d3))
{
//gün değeri  1-31 değerleri arasında tutuluyor
if(gun==0)
gun=31;
printf(lcd_putc,"\ngun=%2d",gun);
rtc_set_datetime(gun,ay,yil,haftanin_gunu,saat,dakika); 
}
}
}


ay_ayar() //ay ayar alt menüsü
{
if(input(pin_d1)) //onay kod sayacı
{
delay_ms(10);
z=z+1;
while(input(pin_d1))
{}
}
while(input(pin_d2))//yukarı tuş basılma işlemi
{
delay_ms(20);
ay=ay+1;

while(input(pin_d2))
{
//ay değeri  1-12 değerleri arasında tutuluyor
if(ay==13)
ay=1;
printf(lcd_putc,"\nay=%2d          ",ay);
rtc_set_datetime(gun,ay,yil,haftanin_gunu,saat,dakika);     
}
}
while(input(pin_d3))//aşağı tuş basılma işlemi
{
delay_ms(20);
ay=ay-1;

while(input(pin_d3))
{
//ay değeri  1-12 değerleri arasında tutuluyor
if(ay==0)
ay=12;
printf(lcd_putc,"\nay=%2d",ay);
rtc_set_datetime(gun,ay,yil,haftanin_gunu,saat,dakika); 
}
}
}
 
 
yil_ayar() //yıl ayar alt menüsü
{
if(input(pin_d1)) //onay kod sayacı
{
delay_ms(10);
z=z+1;
while(input(pin_d1))
{}
}


//yıl değerini 1 ve 90 arasında tutmak için
if(yil>=90)
yil=1;
if(yil==0)
yil=89;


while(input(pin_d2))//yukarı tuş basılma işlemi
{
delay_ms(20);
yil=yil+1;

while(input(pin_d2))
{
printf(lcd_putc,"\nyil=%2d          ",yil);
rtc_set_datetime(gun,ay,yil,haftanin_gunu,saat,dakika);     
}
}
while(input(pin_d3))//aşağı tuş basılma işlemi
{
delay_ms(20);
yil=yil-1;

while(input(pin_d3))
{
printf(lcd_putc,"\nyil=%2d",yil);
rtc_set_datetime(gun,ay,yil,haftanin_gunu,saat,dakika); 
}
}
}


void main()
{

   
   
   set_tris_c(0x00);
   output_c(0x00);
   set_tris_d(0xff);
   isik=read_eeprom(1);
   isi=read_eeprom(2);
   on=read_eeprom(3);
   of=read_eeprom(4);
   output_high(pin_c1);
  
setup_adc(adc_clock_div_32); //anolog birim frekansı belirtiliyort
setup_adc_ports(AN0); //kullanılacak kanal belirtiliyor
lcd_init();  //lcd temizleniyor
rtc_init();  //zaman saati entegremiz kullanılır hale getiriliyor 
set_adc_channel(1);
delay_us(20);
printf(lcd_putc,"\f----HOS GELDINIZ----");  //lcd ye bilgi yazdırılıyor
printf(lcd_putc,"\n  AKVARYUM KONTROL  ");  //lcd ye bilgi yazdırılıyor
lcd_gotoxy(25,1);
printf(lcd_putc,"ERAY GOKKAYA");


delay_ms(3000);  //zaman gecikmesi veriliyor




while(TRUE) //program sonsuz döngüye alınıyor

{
setup_adc(adc_clock_div_32); //anolog birim frekansı belirtiliyort
setup_adc_ports(AN0_AN1_AN3); //kullanılacak kanal belirtiliyor
if(input(pin_d0))
{
x=x+1;
while(input(pin_d0))
{}}
if(x==3)
x=0;


rtc_get_time(saat,dakika,saniye);
rtc_get_date(gun,ay,yil,haftanin_gunu);
lcd_gotoxy(1,1);
printf(lcd_putc,"\ftarih:%02d/%02d/20%02d",gun,ay,yil);
lcd_gotoxy(1,2);
printf(lcd_putc,"\nsaat:%02d:%02d:%02d",saat,dakika,saniye);


b=on+of;
if(saniye==59)
{
a=a+1;

while(saniye==59)
{
rtc_get_time(saat,dakika,saniye);
}
}

if(on==a)
{
output_low(pin_c1);
f=0;
}

if(b==a)
{
output_high(pin_c1);
a=0;
f=1;

}
if(f==0)
{
lcd_gotoxy(18,2);
printf(lcd_putc,"mof",);
}
if(f==1)
{
lcd_gotoxy(18,2);
printf(lcd_putc,"mon",);
}


//ekranda sıcaklık bilgisi gösteriliyor

set_adc_channel(1);
delay_us(20);
lcd_gotoxy(21,1);
printf(lcd_putc,"Sicaklik=");
bilgi=read_adc();
voltaj=(0.0048875855*bilgi)*1000;
sicaklik=(voltaj/10)+2;
lcd_gotoxy(30,1);
printf(lcd_putc,"%5.1f'c",sicaklik);
SICAK_KONT();








//ekranda aydınlık oranı gösteriliyor

set_adc_channel(0);
delay_us(20);
lcd_gotoxy(21,2);
printf(lcd_putc,"aydinlik=");
bilgi=read_adc();
aydinlik=bilgi/4.5;
lcd_gotoxy(30,2);
printf(lcd_putc,"%ld lux",aydinlik);

if(aydinlik<=isik)
{
output_high(pin_c3);
lcd_gotoxy(38,2);
printf(lcd_putc,"on");
}
else
{
output_low(pin_c3);
lcd_gotoxy(38,2);
printf(lcd_putc,"of");
}
delay_ms(500);
lcd_init();

//normal çalışma menüsü bitiş parantezi


while(x==1)//ayarlar menüsü
{
printf(lcd_putc,"\f       AYARLAR      ",);
delay_ms(30);

if(y==-1)
y=5;
if(input(pin_d0))
{
delay_ms(20);
x=0;
while(input(pin_d0))
{}}
if(input(pin_d2))//yukarı tuş basılma işlemi
{
delay_ms(10);
y=y+1;
while(input(pin_d2))
{}}
if(input(pin_d3))//aşağı tuş basılma işlemi
{
delay_ms(10);
y=y-1;
while(input(pin_d3))
{}}




while(y==1)
{
z=0;
printf(lcd_putc,"\n     SAAT  AYAR     ",);
if(input(pin_d0))
{
delay_ms(10);
x=0;
y=0;
while(input(pin_d0))
{}}
if(input(pin_d2))//yukarı tuş basılma işlemi
{
y=y+1;
while(input(pin_d2))
{}
}
if(input(pin_d3))//aşağı tuş basılma işlemi
y=y-1;
while(input(pin_d3))
{}
if(input(pin_d1)) //onay kod sayacı
{
delay_ms(10);
z=z+1;
while(input(pin_d1))
{}
}

while(z==1)//saat ayar işlemi yetisi
{
printf(lcd_putc,"\nsaat=%2d               ",saat);
delay_ms(20);
saat_ayar();

}
while(z==2)//dakika ayar işlemi yetisi
{
printf(lcd_putc,"\ndakika=%2d               ",dakika);
delay_ms(20);
dakika_ayar();
}

delay_ms(100);
} //saat ayar menü sonu parantezi



//tarih ayarları
while(y==2)
{
z=0;
printf(lcd_putc,"\n    TARIH  AYARI    ");
//bir önceki menüye dönmek
if(input(pin_d0))
{
delay_ms(20);
x=0;
y=0;
while(input(pin_d0))
{}}


if(input(pin_d2))//yukarı tuş basılma işlemi
{
delay_ms(20);
y=y+1;
while(input(pin_d2))
{}
}


if(input(pin_d3))//aşağı tuş basılma işlemi
{
delay_ms(20);
y=y-1;
while(input(pin_d3))
{}
}


if(input(pin_d1)) //onay kod sayacı
{
delay_ms(10);
z=z+1;
while(input(pin_d1))
{}
}


while(z==1)//gün ayar işlemi yetisi
{
printf(lcd_putc,"\ngun=%2d               ",gun);
delay_ms(20);
gun_ayar();
}


while(z==2)//ay ayar işlemi yetisi
{
printf(lcd_putc,"\nay=%2d               ",ay);
delay_ms(20);
ay_ayar();
}

while(z==3)//yıl ayar işlemi yetisi
{
printf(lcd_putc,"\nyil=%2d               ",yil);
delay_ms(20);
yil_ayar();
}


delay_ms(100);
}//tarih bitiş parantezi




while(y==3) //HAVALANDIRMA AYARI
{
printf(lcd_putc,"\n HAVALANDIRMA AYARI ");
if(input(pin_d0))
{
x=0;
y=0;
while(input(pin_d0))
{}}
if(input(pin_d2))//yukarı tuş basılma işlemi
{
y=y+1;
while(input(pin_d2))
{}
}
if(input(pin_d3))//aşağı tuş basılma işlemi
{
y=y-1;
while(input(pin_d3))
{}
}
if(input(pin_d1)) //onay kod sayacı
{
delay_ms(10);
z=z+1;
while(input(pin_d1))
{}
}
while(z==1) //açık kalma süresi ayar yetisi
{

printf(lcd_putc,"\nmotor acik=%2d'dk               ",on);
delay_ms(20);
if(input(pin_d1)) //onay kod sayacı
{
delay_ms(10);
z=z+1;
while(input(pin_d1))
{}
}
while(input(pin_d2))//yukarı tuş basılma işlemi
{
delay_ms(20);
on=on+1;

while(input(pin_d2))
{
write_eeprom(3,on);
}
}
while(input(pin_d3))//aşağı tuş basılma işlemi
{
delay_ms(20);
on=on-1;

while(input(pin_d3))
{
write_eeprom(3,on);
}
}
}


while(z==2) //kapalı kalma süresi ayar yetisi
{

printf(lcd_putc,"\nmotor kapali=%2d'dk               ",of);
delay_ms(20);
if(input(pin_d1)) //onay kod sayacı
{
delay_ms(10);
z=0;
while(input(pin_d1))
{}
}
while(input(pin_d2))//yukarı tuş basılma işlemi
{
delay_ms(20);
of=of+1;

while(input(pin_d2))
{  
write_eeprom(4,of);
}
}
while(input(pin_d3))//aşağı tuş basılma işlemi
{
delay_ms(20);
of=of-1;

while(input(pin_d3))
{ 
write_eeprom(4,of);
}
}
}
delay_ms(100);
} //havalandırma bitiş parantezi




while(y==4) //AYDINLATMA AYARI
{
printf(lcd_putc,"\n  AYDINLATMA AYARI  ");
if(input(pin_d0))
{
x=0;
y=0;
while(input(pin_d0))
{}}
if(input(pin_d2))//yukarı tuş basılma işlemi
{
y=y+1;
while(input(pin_d2))
{}
}
if(input(pin_d3))//aşağı tuş basılma işlemi
{
y=y-1;
while(input(pin_d3))

{}
}
if(input(pin_d1)) //onay kod sayacı
{
delay_ms(10);
z=z+1;
while(input(pin_d1))
{}
}
while(z==1) //aydınlatma ayar yetisi
{
write_eeprom(1,isik);
printf(lcd_putc,"\naydinlatma=%2d               ",isik);
delay_ms(20);
if(input(pin_d1)) //onay kod sayacı
{
delay_ms(10);
z=0;
while(input(pin_d1))
{}
}
while(input(pin_d2))//yukarı tuş basılma işlemi
{
delay_ms(20);
isik=isik+1;

while(input(pin_d2))
{     
}
}
while(input(pin_d3))//aşağı tuş basılma işlemi
{
delay_ms(20);
isik=isik-1;

while(input(pin_d3))
{ 
}
}
}

delay_ms(100);
}//aydınlatma bitiş parantezi



while(y==5) //ISITICI AYARI
{
printf(lcd_putc,"\n   ISITICI  AYARI   ");
if(input(pin_d0))
{
x=0;
y=0;
while(input(pin_d0))
{}}
if(input(pin_d2))//yukarı tuş basılma işlemi
{
y=y+1;
while(input(pin_d2))
{}
}
if(input(pin_d3))//aşağı tuş basılma işlemi
{
y=y-1;
while(input(pin_d3))
{}
}
delay_ms(100);

if(y==6)
y=1;
if(y==-1)
y=5;
if(input(pin_d1)) //onay kod sayacı
{
delay_ms(10);
z=z+1;
while(input(pin_d1))
{}
}
while(z==1) //ısıtıcı ayar yetisi
{
write_eeprom(2,isi);
printf(lcd_putc,"\nsicaklik=%2d               ",isi);
delay_ms(20);
if(input(pin_d1)) //onay kod sayacı
{
delay_ms(10);
z=0;
while(input(pin_d1))
{}
}
while(input(pin_d2))//yukarı tuş basılma işlemi
{
delay_ms(20);
isi=isi+1;

while(input(pin_d2))
{     
}
}
while(input(pin_d3))//aşağı tuş basılma işlemi
{
delay_ms(20);
isi=isi-1;

while(input(pin_d3))
{ 
}
}
}
}
}//ayarlar menüsü bitiş parantezi


}
}

eraygil

mahsuru yok tabiii menü uygulamasında daha ayrıntılı bir program veriyorum

smartcard

@eraygil
Arkadaşım Teşekkürler.

Dijiyal

eray kardeşim mükemmel eline sağlık