Şimdi Ara

LCD de step motor adım saydırma (xc8)

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
2
Cevap
0
Favori
588
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
1 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  •  
    #include <xc.h>
    #define RS RB0
    #define RW RB1
    #define E RB2
    #define _XTAL_FREQ 4000000

    void lcdKomut (unsigned char);
    void lcdVeri (char);
    void intlcdVeri (int);
    void bekle (unsigned int);

    void main(void)
    {
    int birler;
    int onlar; // basamak değişkenleri tanımlandı
    int yuzler;

    char b;
    char o; // lcd ye yazdırılacak basamak değişkenler tanımlandı
    char y;

    TRISB=0b00110000;
    TRISD=0; // 4 ve 5 giriş, diğer pinler çıkış olarak tanımlandı
    E=0;

    int i;
    int g; // step motoru ileri geri saydırmak için değişkenler tanımlandı

    TRISC=0;
    PORTC=0;// step motorun bulunduğu c portu sıfırlandı ve çıkış olarak tanımlandı

    char adim[]={0b0001,0b0011,0b0010,0b0110,0b0100,0b1100,0b1000,0b0001}; // step motor adım saydırmak için adım verileri yazıldı

    lcdKomut(0x0C);// ekran açık, kursor kapalı, yanıp sonme yok
    lcdKomut(0x38);
    // ekran satır ayarları yapıldı
    lcdKomut(0x83);


    while(RB4==0) // Eğer RB4 == 0 ise aşağıdakı işlemlere izin verilecek
    {

    PORTC=adim[i];
    i=i+1; // step adım saydırma işlemi
    if(i>=8)
    i=0;
    bekle(100);

    if(birler==9&&onlar==9&&yuzler==9){// döngü oluşturuldu. 000

    birler=-1;
    onlar=0; // bir dahaki sayma işlemi için basamaklar sıfırlandı.
    yuzler=0;
    y=yuzler+'0'; // sayı değişkeni character değişkenine çevrildi...
    o=onlar+'0';

    birler=birler+1;
    b=birler+'0'; // sayı değişkeni character değişkenine çevrildi...
    lcdVeri('A');
    lcdVeri('D');
    lcdVeri('I');
    lcdVeri('M');
    lcdKomut (0xC2); //2. satır 3. sıra // Yazdırma işlemi yapıldı.
    lcdVeri('S');
    lcdVeri('A');
    lcdVeri('Y');
    lcdVeri('I');
    lcdVeri('S');
    lcdVeri('I');
    lcdVeri('=');
    lcdVeri(y);
    lcdVeri(o);
    lcdVeri(b);

    bekle(100);
    }
    else{
    if(onlar==9&&birler==9){
    onlar=-1;
    yuzler=yuzler+1; // Eğer onlar ve birler basamağı 9 ise yüzler basamağı 1 sayı arttırıldı.
    y=yuzler+'0';
    }

    if(birler==9){
    birler=-1;
    onlar=onlar+1; // birler basamağı 9 ise onlar basamağı 1 sayı arttırıldı.
    o=onlar+'0';
    }

    birler=birler+1;
    b=birler+'0'; // sayı değişkeni character değişkenine çevrildi...
    lcdVeri('A');
    lcdVeri('D');
    lcdVeri('I');
    lcdVeri('M');
    lcdKomut (0xC2); //2. satır 3. sıra // sürekli sayı sayıldığı bölge.
    lcdVeri('S');
    lcdVeri('A');
    lcdVeri('Y');
    lcdVeri('I');
    lcdVeri('S');
    lcdVeri('I');
    lcdVeri('=');
    lcdVeri(y);
    lcdVeri(o);
    lcdVeri(b);
    bekle (100);
    }
    }
    while(RB5==0) // geri sayı sayma bölgesi
    {
    if(birler==0&&onlar==0&&yuzler==0){// Eğer basamaklar 000 ise geri sayılmasına izin verilmedi.
    break;
    }
    else{// değilse geri saymaya devam edecek.
    PORTC=adim[g];
    g=g-1;
    bekle(100); // Step motoru geri adım attırma bölgesi.
    if(g<=0)
    g=8;
    }

    if(onlar==0&&birler==0){// Eğer birler basamağı 0 ve onlar basamağı 0 ise yuzler basamağı 1 sayı azaltıldı.
    onlar=10;
    yuzler=yuzler-1;
    y=yuzler+'0';
    }

    if(birler==0){// Eğer birler basamağı 0 ise onlar basamağı 1 sayı azaltıldı
    birler=10;
    onlar=onlar-1;
    o=onlar+'0';
    }


    birler=birler-1;
    b=birler+'0'; // sayı değişkeni character değişkenine çevrildi...
    lcdVeri('A');
    lcdVeri('D');
    lcdVeri('I');
    lcdVeri('M');
    lcdKomut (0xC2); //2. satır 3. sıra // sürekli geri sayma bölgesi
    lcdVeri('S');
    lcdVeri('A');
    lcdVeri('Y');
    lcdVeri('I');
    lcdVeri('S');
    lcdVeri('I');
    lcdVeri('=');
    lcdVeri(y);
    lcdVeri(o);
    lcdVeri(b);
    bekle(100);
    }
    }


    void lcdKomut (unsigned char k){// lcd özelliklerin ayarlamak için fonksiyon oluşturuldu.
    PORTD=k;
    RS=0;
    RW=0;
    E=1; // düşen kenarda yazacak
    bekle(1);
    E=0;
    }

    void lcdVeri(char veri){// lcd ye veri yazmak için fonksiyon oluşturuldu.
    PORTD=veri;
    RS=1;
    RW=0;
    E=1;
    bekle(1);
    E=0;
    }
    void bekle(unsigned int sn){// Bekleme fonksiyonu oluşturuldu.
    unsigned int i,j;
    for (i=0;i<sn;i++)
    for (j=0;j<135;j++);
    }



    aşağıdaki linkte proteus similasyonu bulunmaktadır
    http://s6.dosya.tc/server5/6dagb8/asil_kod.rar.html
     LCD de step motor adım saydırma (xc8)







  • Gerçekten başarılı bir uygulamaya benziyor, paylaştığınız için teşekkürler, ileride işime yarayabilir :)
  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
    
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.