16F877 ADC veri işleme hakkında

the_night

Üye
Katılım
18 Kas 2007
Mesajlar
51
Puanları
1
selam arkadaşlar başlıktada belirttiğim gibi elimde analog bi veri var 0-100 arası diyelim bu veri 50 ve 25 düştüğünde ekrana uyarı yazdırmak istiyorum 2x16 lık lcd ekranın aynı satır ve sütununa olcak yani şöyle toparlayım

analog değer 100 ise ekrana X yazdır
analog değer 50 ise ekrana y yazdır
analog değer 25 ise ekrana z yazdır

denemediğim döngü kalmadı yani öyle bişey olcakki her durumda analog bilgimi kontrol edip hangi seviyede olduğunu tespit edecem ve ona göre ekrana yazdırcam en azından kabaca bi fikir alsam yine ordan bi yol açarım kendime
ccs c dilini kullanıyorum
yardımlarınız ilginize şimdiden teşekkür ediyorum saygılar.
 
Kod:
#include <16F877.h>
#device adc=8
#FUSES NOWDT,XT,PUT,NOLVP
#use delay(clock=4000000)
#include <lcd.c>

void main()
{
   setup_adc_ports(AN0);
   int sonuc;
   lcd_init();

   while(1)
   {
      set_adc_channel(0);
      delay_us(20);
      sonuc = read_adc();

      switch (sonuc)
      {  case 25:
            printf(lcd_putc," z ");     
         case 50:
            printf(lcd_putc," y");      
         case 100:
            printf(lcd_putc," x");      
      }   
      delay_ms(500);    
   }
}
 
hocam bunuda denedim benim yapmak istediğim tam olarak mesala 100 le 50 arasındaysa bi değer 50 25 arasındaysa bi değer yazdırmak if komutuyla yaptım ama değer değiştiğinde eski bili artıkları ekranda kalıyor yeni bilgiyi eskisinin üzerine yazcağına yanına yazıyor

bilgi = read_adc();

if(bilgi<100)
lcd_gotoxy(1,2);
lcd_putc ("x");

if(bilgi<50)
lcd_gotoxy(1,2);
lcd_putc ("y");

if(bilgi<20)
lcd_gotoxy(1,2);
lcd_putc ("z");

delay_ms(250);

bu şekil yaptığımda önceki bilgiyi temizlesin ekrandan yeni bilgiliyi yazdırsın istiyorum yani bana aslında her işlem sonunda lcd nin sadece ikinci satırını temizleyen komut olsada olur send_byte komutunu denedım ama ekranın hepsini siliyor
 
Genel algoritma aşağıdaki gibi.
Ancak derleme yapmadım.


Kod:
[FONT=Courier New][COLOR=DarkOrchid]#include <16F877.h>
#device adc=8
#FUSES NOWDT,XT,PUT,NOLVP
#use delay(clock=4000000)
#include <lcd.c>

void main()
{
  setup_adc_ports(AN0);
  int sonuc;
  lcd_init();

  while(1)
  {
    set_adc_channel(0);
    delay_us(20);
    sonuc = read_adc();

    if(sonuc < 100)                    // Sonuç 100'den küçükse
    {
      if(sonuc < 51)                   // Sonuç 51'den küçükse
      {
        if(sonuc < 26)                 // Sonuç 26'dan küçükse
        {
          lcd_putc("\f");              // LCD'yi temizle			
          lcd_putc("Value = 0..25");   // LCD'ye "Value = 0..25" yaz
        }
        else                           // Sonuç 25'den büyükse
        {
          lcd_putc("\f");              // LCD'yi temizle			
          lcd_putc("Value = 26..50");  // LCD'ye "Value = 26..50" yaz
        }
      }
      else                             // Sonuç 50'den büyükse
      {
        lcd_putc("\f");                // LCD'yi temizle			
        lcd_putc("Value = 51..100");   // LCD'ye "Value = 51..100" yaz
      }
    }

    delay_ms(500);                     // 500ms bekle    
  }
}[/COLOR][/FONT]
 
Son düzenleme:

Forum istatistikleri

Konular
128,155
Mesajlar
915,502
Kullanıcılar
449,900
Son üye
adidas2131

Yeni konular

Geri
Üst