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.
 

tyildizak

Paylaşımcı üye
Katılım
17 Ağu 2007
Mesajlar
1,637
Puanları
119
Konum
İstanbul
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);    
   }
}
 
Konu Sah
the_night

the_night

Üye
Katılım
18 Kas 2007
Mesajlar
51
Puanları
1
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
 

ULAGA

Üye
Katılım
9 Ocak 2012
Mesajlar
589
Puanları
1
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
124,798
Mesajlar
884,879
Kullanıcılar
444,095
Son üye
ugur22222

Yeni konular

Üst