LCD Kararsız Çalışıyor

Başlatan hazad, 10 Aralık 2011, 20:43:30

hazad

Merhaba,

Projemde LCD kullanıyorum.  Genel olarak doğru çalışıyor ancak bazen Lcd de 1 satır sıcaklık yazarken 2 inci satırda voltaj değeri yazıyor. bunun nedeni ne olabilir?

Bu 3 görünüm arasında timer kullanarak geçiş yapıyorum. ProcessID SICAKLIK oldugunda hala Voltaj değerini gösteriyor. yada GIDEN oldugunda hala sıcaklık değerini gösteriyor. 2 satır doğru ama 1. satır bazen yanlış çalışıyor. Dolasıyla ekranda "1. Sıcaklık" ve voltaj değerini gösteriyor. Bunun sebebi ne olabilir.


Mesela size proje de kodları göstereyim.

             
while(1){
 switch(ProcessID){
                                case SICAKLIK:
                                if( sicaklik_value>set_sicaklik_max ){
                                      Lcd_Cmd(_LCD_CLEAR);
                                      Lcd_Out(1,1,"Sicaklik Alarm");
                                      IntToStr(sicaklik_value,str);
                                      Lcd_Out(2,1,str);
                                      IntToStr(set_sicaklik_max,str);
                                      Lcd_Out(2,11,str);
                                }else{
                                      IntToStr(sicaklik_value,str);
                                      Lcd_Out(2,1,str);
                                      Lcd_Chr(2, 7, 223);
                                      if(MenuChanged){
                                         Lcd_Cmd(_LCD_CLEAR);
                                         Lcd_Out(1,1,"1.Sicaklik:");
                                         MenuChanged = 0;
                                      }
                                }
                                break;
                                
                                case GIDEN:
                                if( giden_value>set_giden_max ){
                                      Lcd_Cmd(_LCD_CLEAR);
                                      Lcd_Out(1,1,"Giden Alarm");
                                      IntToStr(giden_value,str);
                                      Lcd_Out(2,1,str);
                                      IntToStr(set_giden_max,str);
                                      Lcd_Out(2,11,str);

                                }else{
                                      IntToStr(giden_value,str);
                                      Lcd_Out(2,5,str);
                                      if(MenuChanged){
                                         Lcd_Cmd(_LCD_CLEAR);delay_ms(20);
                                         Lcd_Out(1,1,"2.Giden Guc:");
                                         MenuChanged = 0;
                                      }
                                }
                                break;
                                
                                case GELEN:
                                if( gelen_value>set_gelen_max ){
                                      Lcd_Cmd(_LCD_CLEAR);
                                      Lcd_Out(1,1,"Gelen Alarm");
                                      IntToStr(gelen_value,str);
                                      Lcd_Out(2,1,str);
                                      IntToStr(set_gelen_max,str);
                                      Lcd_Out(2,11,str);

                                }else{
                                      IntToStr(gelen_value,str);
                                      Lcd_Out(2,5,str);
                                      if(MenuChanged){
                                         Lcd_Cmd(_LCD_CLEAR);delay_ms(20);
                                         Lcd_Out(1,1,"3.Gelen Guc:");
                                         MenuChanged = 0;
                                      }
                                }
                                break;
                                default:
                                break;

}


         

haydarpasamikro

Lcd_Cmd(_LCD_CLEAR);
                                      Lcd_Out(1,1,"Sicaklik Alarm");


Lcd_Cmd(_LCD_CLEAR);
                                      Lcd_Out(1,1,"Giden Alarm");


Lcd_Cmd(_LCD_CLEAR);
                                      Lcd_Out(1,1,"Gelen Alarm");


satırlarını sadece if bloğunun doğru olmasında yürütüyorsunuz. Ya else lerin başında da yazmalısınız ya da

case SICAKLIK:
                                      Lcd_Cmd(_LCD_CLEAR);
                                      Lcd_Out(1,1,"Sicaklik Alarm");
                                      if( sicaklik_value>set_sicaklik_max ){

gibi başa çekmelisiniz ki if-else leri kapsasın.


Mikro Dünyası.Haydarpaşa Teknik ve Endüstri Meslek Lisesi Mikrodenetleyici Atl. Şefi