اطلاعیه

Collapse
No announcement yet.

هنگ کردن میکرو - منو بر روی LCD کاراکتری

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    هنگ کردن میکرو - منو بر روی LCD کاراکتری

    با سلام خدمت اعضای محترم سایت

    من یه کدی نوشتم برای ساخت یک منو با مگا 8 و سه تا کلید قرار دادم برای دستگاه. لازم به ذکر هست که در این دستگاه از یک سنسور ds18b20 و یک آیسی ds1307 و یک ال سی دی کاراکتری 2X16 استفاده شده. این کد 71 درصد از حافظه فلش رو پر کرده.

    متأسفانه مشکل این هست که وقتی وارد یکی از منوها میشم ، وقتی کلید دوم رو فشار میدم میکرو هنگ میکنه و این هنگ کردن فقط با کلید دوم اتفاق میفته. توی بعضی از تاپیک های انجمن خوندم که مشکل هنگ کردن به خاطر سرریز پشته هست. توی کد نوشته شده از دستور switch استفاده شده. آیا این دستور میتونه باعث سرریز پشته بشه؟؟

    متأسفانه کد یک مقدار طولانی هست . مشکلات با کلیدی اتفاق می افته که مربوط به temp_key ==1 هست. البته هنگ کردن بعد از ورود به زیر منوها پیش میاد و وقتی که میخوایم زمان یا دما رو تنظیم کنیم.

    کد:
          temp_key = key;
        
    if ( temp_key != old_key )
          {  old_key = temp_key;
            if ( temp_key != no_key )
            {  if ( temp_key == 0 )
              {
                if ( mode < 7 ) 
                {
                  mode++;
                  if ( mode == 7 )  
                  {
                    lcd_clear();
                    mode = 0;  
                  }
                }
                
                switch(mode)
                {
                  case 0: 
                  {
                    lcd_gotoxy(0,0);
                    lcd_puts( time_buffer );
                    lcd_gotoxy(11,0);
                    lcd_puts( temp_buffer );
                    break;
                  }
    
                  case 1:
                  {
                    lcd_clear();
                    lcd_putsf("Set Time");
                    break;
                  }
                  
                  case 2:
                  {  
                    lcd_clear();
                    lcd_putsf("Set Temp");
                    break;
                  }
                  
                  case 3:
                  {  
                    lcd_clear();
                    lcd_putsf("Time Schedule");
                    break;
                  }
                  
                  case 4:
                  {
                    lcd_clear();
                    lcd_putsf("Set Control Mode");
                    break;
                  }
                  
                  case 5:
                  {
                    lcd_clear();
                    lcd_putsf("Set Motor");
                    break;
                  }
                  
                  case 6:
                  {
                    lcd_clear();
                    lcd_putsf("Set Pump");
                    break;
                  }
                  
                  case time_setting:
                  {
                    set_time_mode++;
                    
                    if ( set_time_mode == 4 )  
                    {
                      set_time_mode = 1;
                      rtc_set_time(h,m,s);
                      
                      mode = 2;
                      lcd_clear();
                      lcd_putsf("Set Temperature");
                      
                    }
                    
                    break;
                  }
                  
                  case temp_setting:
                  {
                    set_temp_mode++;
                    
                    if ( set_temp_mode == 3 )
                    {
                      set_temp_mode = 1;
                      
                      mode = 3;
                      lcd_clear();
                      lcd_putsf("Time Schedule");
                    }
                    break;
                  }
                  
                  case timer_setting:
                  {
                    set_timer_mode++;
                    
                    if ( set_timer_mode == 9 )
                    {
                      set_timer_mode = 1;
                      
                      mode = 4;
                      lcd_clear();
                      lcd_putsf("Set Control Mode");
                    }
                    
                    break;
                  }
                  
                }
    
              }
              else if( temp_key == 1 )
              {  
              
                if(mode==7 && set_time_mode==1)
                {
                  s=0;
                  rtc_set_time(12,12,0);
                }
                
                
                
                if ( 0 < mode < 7 ) 
                {
                  mode+=6;
                }      
                
                
              }
              
              else if( temp_key == 2)
              {
                switch ( mode )
                {
                  case time_setting:
                  {
                    switch ( set_time_mode )
                    {
                      case 1:
                      {
                        rtc_set_time(h,m,0);
                        break;
                      }
                        
                      case 2:
                      {
                        m--;
                        if ( m == 255 ) m = 59;
                        break;
                      }
                        
                      case 3:
                      {
                        h--;
                        if ( h == 255 ) h = 23;
                        break;
                      }
                    }
                    
                    break; 
    
                  }
                    
                  case temp_setting:
                  {
                    switch ( set_temp_mode )
                    {
                      case 1:
                      {
                        if(low_temp > 20 ) low_temp--;
                        break;
                      }
                      
                      case 2:
                      {
                        if(high_temp > 20 ) high_temp--;
                        break;
                      }
                    }
                    break;
                      
                  }
                  
                  case timer_setting:
                  {
                    if ( (set_timer_mode%2) == 1 )
                    {
                      if (--h_schedule[set_timer_mode - 1] == 255 )
                      {
                        h_schedule[set_timer_mode - 1] = 23;
                      }
                    }
                    
                    else
                    {
                      if (--m_schedule[set_timer_mode - 1] == 255 )
                      {
                        m_schedule[set_timer_mode - 1] = 59;
                      }
                    }
                    
                    break;
                  
                  }
                    
                  case motor_setting:
                  {  
                    break;
                    
                  }
                    
                  case pump_setting:
                  {
                    break;
                    
                  }
                    
                }

    #2
    پاسخ : هنگ کردن میکرو - منو بر روی LCD کاراکتری

    با سلام
    سر ریز کردن پشته زمانی اتفاق می افته که شما تایمر-کانتر میکرو را فعال کرده باشین.
    هنگ کردن فکر نمی کنم به خاطر سر ریز پشته باشه احتمالاً از DS1307 است. نمی دونم از چه دستوراتی برای فعال کردن آی سی ساعت استفاده شده ولی معمولا به خاطر استفاده از دستور GOSUB در این آی سی هنگ کردن میکرو زیاد می شه و یا فعال کردن تایمر میکرو.
    شما کلید تنظیمات ساعت را با کلید بخش های دیگر جدا کنید شاید مشکل حل شد.
    در ضمن منظور از هنگ کردن، میکرو قفل می کنه یا ال سی دی نمایش خوب نمی ده؟

    دیدگاه


      #3
      پاسخ : هنگ کردن میکرو - منو بر روی LCD کاراکتری

      تشکر از جوابتون

      وقفه تایمر صفر فعال هست. متأسفانه وقتی میخواستم کد رو به صورت کامل قرار بدم ، سایت خطا میداد و میگفت کاراکتر ها از حد مجاز بیش تر شده.

      همین کد رو با مگا 16 هم تست کردم و همین مشکلات بود. البته فضای SRAM در مگا 8 و مگا 16 برابر هست.

      وقتی موقع تنظیم ساعت ، کلید مورد نظر که خدمت شما عرض شد رو فشار میدم ، ال سی دی در همون حالت قفل میشه و دیگه هر کلیدی رو بزنم ، کاراکتر های روی ال سی دی هیچ تغییری نمیکنه تا اینکه میکرو رو ریست کنم

      دیدگاه


        #4
        پاسخ : هنگ کردن میکرو - منو بر روی LCD کاراکتری

        یه جوری باید شما برنامه کامل رو قرار بدین
        زمانی که تایمر را فعال می کنید هنگ کردن میکرو به دلیل سر ریز شدن ضریبش بالا می ره
        من تقریباً مشکل شما را داشتم که برای بخش تایمر یه لوپ جدا گانه در نظر گرفتم و با دستور GOSUB فرا خوانی می کردم و همچنین کلید های تنظیمات ساعت و تاریخ را با دیگر بخش ها جدا کردم.

        دیدگاه


          #5
          پاسخ : هنگ کردن میکرو - منو بر روی LCD کاراکتری

          منظور شما از لوپ جداگانه برای تایمر چی هست؟


          -----------------------------------------------------------------------

          اشکال کار پیدا شد. متأسفانه بنده در زیر برنامه ی یکی از کلیدها ، یک if رو به صورت اشتباه نوشته بودم که باعث میشد میکرو سر در گم بشه. اون if رو در زیر قرار دادم:(اصلاحش کردم درست شد) اما واقعاً چرا باید این کد اشتباه باشه!!

          کد:
           
                      if ( 0 < mode < 7 ) 
                      {
                        mode+=6;
                      }
          نمونه اصلاح شده کد:


          کد:
           
                      if (  mode>0 && mode<7 ) 
                      {
                        mode+=6;
                      }


          نیمه ی اول کد

          کد:
          #include <mega8.h>
          #include <delay.h>
          #include <lcd.h>
          #include <1wire.h>
          #include <ds18b20.h>
          #include <stdio.h>
          #include <i2c.h>
          #include <ds1307.h>
          
          #asm
            .equ __sda_bit=4
          	.equ __scl_bit=5
          	.equ __i2c_port=0x15
          #endasm
          
          
          #asm
            .equ __w1_port=0x18; 
            .equ __w1_bit=2;
          #endasm
          
          #asm
            .equ __lcd_port=0x12;
          #endasm
          
          
          #define no_key 3
          #define time_setting 7
          #define temp_setting 8
          #define timer_setting 9
          #define motor_setting 10
          #define pump_setting 11 
          
          flash unsigned char keyboard[]={0x30,0x28,0x18};
          
          unsigned char rom_code[1][9],h_schedule[8],m_schedule[8],mode=0,first_on=0,set_temp_mode=1;
          unsigned char device,counter=0,temp_buffer[20],time_buffer[20],i , h=0,m=0,s=0,half_counter=0;
          bit temp_read_allow = 0,time_refresh = 0,operation_done=0;
          float temp = 0;
          unsigned int temp_int=0;
          volatile unsigned char key = 3;
          
          unsigned char set_timer_mode=1,set_time_mode=1,low_temp=28,high_temp=30;
          
          interrupt [TIM0_OVF] void timer0_ovf_isr(void)  // Vaghfe TIMER0
          {  
            static unsigned char x=0;
            
            counter++;
            
            if( (mode == time_setting) || (mode == temp_setting) || (mode == timer_setting) )
            {  
              half_counter++;
              operation_done = 0;
              
              if ( half_counter == 62 )  half_counter = 0;
            }
            
            if(counter == 1) temp_read_allow = 1;  
            else if ( counter == 244 ) counter = 0;
            
            if(++x==2) // scan keyboard each 32ms and get time
            {  
              x = 0;
              temp = ( PINB & 0x38 );
              
              for(i=0;i<3;i++)
              {  
                if ( temp == keyboard[i] )  
                {  
                  key = i;
                  break;
                }
                else  key = no_key;
              }
              
              time_refresh = 1;
            }
            
            
          
          }
          
          
          void main(void)
          {
            unsigned char temp_key = 3,old_key=3;
            
            i2c_start();
            first_on=rtc_read(0x00);
            
            if((first_on & 0x80)==0x80)
            {
              rtc_write(0x00,0);
              rtc_set_time(0,0,0);
            }
          
            if(s>59 || h>23 || m>59)  rtc_set_time(12,0,0);
            
            i2c_stop();
            
            PORTB=0x38;
            DDRB=0x00;
          
            PORTC=0x00;
            DDRC=0x00;
          
            PORTD=0x00;
            DDRD=0xFF;
          
            TCCR0=0x04;
            TCNT0=0x00;
          
            TIMSK=0x01;
          
            ACSR=0x80;
          
            lcd_init(16);
            lcd_gotoxy(1,0);
            lcd_putsf("Cooler Control");
            lcd_gotoxy(4,1);
            lcd_putsf("By Edris");
            
            delay_ms(3000);
            lcd_clear();
          
            device = w1_search(0xf0,rom_code);  
            
            if(ds18b20_init(&rom_code[0][0],0,80,1))  
            {
              lcd_putsf("Sensor OK");
              delay_ms(2000);
              lcd_clear();
            }
            else
            {
              lcd_putsf("Sensor ERROR");
              delay_ms(2000);
              lcd_clear();
            }
            
            i2c_init();
            rtc_init(0,0,0);
            
             
            #asm("sei")
            
            
          while (1)
             {
                if(temp_read_allow == 1)
                {  
                  temp = ds18b20_temperature(&rom_code[0][0]);
                  
                  if((int)temp+0.5>temp) temp_int=(int)temp;
                  else  temp_int=(int)temp+1;
                  
                  /*
                  if ( mode == 0)
                  {  
                    lcd_clear();
                    sprintf(time_buffer,"%02u:%02u:%02u", h,m,s);
                    lcd_puts(time_buffer);
                    lcd_gotoxy(11,0);
                    sprintf(temp_buffer,"%02u `C" , temp_int);
                    lcd_puts(temp_buffer);
                  }
                  
                  */
                  
                  temp_read_allow = 0;
                }
                
                
                temp_key = key;
              
                
          
          
          
          if ( temp_key != old_key )
                {  old_key = temp_key;
                  if ( temp_key != no_key )
                  {  if ( temp_key == 0 )
                    {
                      if ( mode < 7 ) 
                      {
                        mode++;
                        if ( mode == 7 )  
                        {
                          lcd_clear();
                          mode = 0;  
                        }
                      }
                      
                      switch(mode)
                      {
                        case 0: 
                        {
                          lcd_gotoxy(0,0);
                          lcd_puts( time_buffer );
                          lcd_gotoxy(11,0);
                          lcd_puts( temp_buffer );
                          break;
                        }
          
                        case 1:
                        {
                          lcd_clear();
                          lcd_putsf("Set Time");
                          break;
                        }
                        
                        case 2:
                        {  
                          lcd_clear();
                          lcd_putsf("Set Temp");
                          break;
                        }
                        
                        case 3:
                        {  
                          lcd_clear();
                          lcd_putsf("Time Schedule");
                          break;
                        }
                        
                        case 4:
                        {
                          lcd_clear();
                          lcd_putsf("Set Control Mode");
                          break;
                        }
                        
                        case 5:
                        {
                          lcd_clear();
                          lcd_putsf("Set Motor");
                          break;
                        }
                        
                        case 6:
                        {
                          lcd_clear();
                          lcd_putsf("Set Pump");
                          break;
                        }
                        
                        case time_setting:
                        {
                          set_time_mode++;
                          
                          if ( set_time_mode == 4 )  
                          {
                            set_time_mode = 1;
                            rtc_set_time(h,m,s);
                            
                            mode = 2;
                            lcd_clear();
                            lcd_putsf("Set Temperature");
                            
                          }
                          
                          break;
                        }
                        
                        case temp_setting:
                        {
                          set_temp_mode++;
                          
                          if ( set_temp_mode == 3 )
                          {
                            set_temp_mode = 1;
                            
                            mode = 3;
                            lcd_clear();
                            lcd_putsf("Time Schedule");
                          }
                          break;
                        }
                        
                        case timer_setting:
                        {
                          set_timer_mode++;
                          
                          if ( set_timer_mode == 9 )
                          {
                            set_timer_mode = 1;
                            
                            mode = 4;
                            lcd_clear();
                            lcd_putsf("Set Control Mode");
                          }
                          
                          break;
                        }
                        
                      }
          
                    }
                    else if( temp_key == 1 )
                    {  
                    
                      if(mode==7 && set_time_mode==1)
                      {
                        s=0;
                        rtc_set_time(12,12,0);
                      }
                      
                      
                      
                      if ( 0 < mode < 7 ) 
                      {
                        mode+=6;
                      }      
                      
                      
                    }
                    
                    else if( temp_key == 2)
                    {
                      switch ( mode )
                      {
                        case time_setting:
                        {
                          switch ( set_time_mode )
                          {
                            case 1:
                            {
                              rtc_set_time(h,m,0);
                              break;
                            }
                              
                            case 2:
                            {
                              m--;
                              if ( m == 255 ) m = 59;
                              break;
                            }
                              
                            case 3:
                            {
                              h--;
                              if ( h == 255 ) h = 23;
                              break;
                            }
                          }
                          
                          break; 
          
                        }
                          
                        case temp_setting:
                        {
                          switch ( set_temp_mode )
                          {
                            case 1:
                            {
                              if(low_temp > 20 ) low_temp--;
                              break;
                            }
                            
                            case 2:
                            {
                              if(high_temp > 20 ) high_temp--;
                              break;
                            }
                          }
                          break;
                            
                        }
                        
                        case timer_setting:
                        {
                          if ( (set_timer_mode%2) == 1 )
                          {
                            if (--h_schedule[set_timer_mode - 1] == 255 )
                            {
                              h_schedule[set_timer_mode - 1] = 23;
                            }
                          }
                          
                          else
                          {
                            if (--m_schedule[set_timer_mode - 1] == 255 )
                            {
                              m_schedule[set_timer_mode - 1] = 59;
                            }
                          }
                          
                          break;
                        
                        }
                          
                        case motor_setting:
                        {  
                          break;
                          
                        }
                          
                        case pump_setting:
                        {
                          break;
                          
                        }
                          
                      }

          دیدگاه


            #6
            پاسخ : هنگ کردن میکرو - منو بر روی LCD کاراکتری

            این هم نیمه ی باقی کد


            کد:
            if ( time_refresh == 1 )
                  {  
                    rtc_get_time(&h,&m,&s);
                    
                    if ( mode == 0 )
                    {
                      lcd_gotoxy(0,0);
                      sprintf(time_buffer,"%02u:%02u:%02u",h,m,s);
                      lcd_puts(time_buffer);
                      lcd_gotoxy(11,0);
                      sprintf(temp_buffer,"%02u `C" , temp_int);
                      lcd_puts(temp_buffer);
                      time_refresh = 0;
                    }
                  }
                  
                  if ( (half_counter == 1) && (operation_done == 0) )
                  {  
                    switch ( mode )
                    {
                      case time_setting:
                      {
                        lcd_clear();
                        sprintf(time_buffer,"%02u:%02u:%02u",h,m,s);
                        lcd_puts(time_buffer);
                        
                        break;
                      }
                        
                      case temp_setting:
                      {
                        switch ( set_temp_mode )
                        {
                          case 1:
                          {
                            lcd_clear();
                            sprintf(temp_buffer,"Low Temp: %02u",low_temp);
                            lcd_puts(temp_buffer);
                            
                            break;
                          }
                            
                          case 2:
                          {
                            lcd_clear();
                            sprintf(temp_buffer,"High Temp: %02u",high_temp);
                            lcd_puts(temp_buffer);
                            
                            break;
                          }
                        }
                        
                        break;
                        
                      }
                      
                      case timer_setting:
                      {
                        if ( set_timer_mode < 9)
                        {
                          lcd_clear();
                          sprintf(time_buffer,"1=%02u:%02u 2=%02u:%02u",h_schedule[0],m_schedule[0],h_schedule[1],m_schedule[1]);
                          lcd_puts(time_buffer);
                          sprintf(time_buffer,"3=%02u:%02u 4=%02u:%02u",h_schedule[2],m_schedule[2],h_schedule[3],m_schedule[3]);
                          lcd_puts(time_buffer);
                        }
                          
                        else
                        {
                          lcd_clear();
                          sprintf(time_buffer,"5=%02u:%02u 6=%02u:%02u",h_schedule[4],m_schedule[4],h_schedule[5],m_schedule[5]);
                          lcd_puts(time_buffer);
                          sprintf(time_buffer,"7=%02u:%02u 8=%02u:%02u",h_schedule[6],m_schedule[6],h_schedule[7],m_schedule[7]);
                          lcd_puts(time_buffer);  
                        }
                        
                        break;
                      }    
                    }
                      
                    
                    operation_done = 1;
                  }
            
                  else if ( (half_counter == 31) && (operation_done == 0) )  // after 0.5 second
                  {
                    switch ( mode )
                    {
                      case time_setting:
                      {
                        switch(set_time_mode)
                        {
                          case 1:
                          {
                            lcd_clear();
                            sprintf(time_buffer,"%02u:%02u: ",h,m);
                            lcd_puts(time_buffer);
                            
                            break;
                          }
                          case 2:
                          {
                            lcd_clear();
                            sprintf(time_buffer,"%02u: :%02u",h,s);
                            lcd_puts(time_buffer);
                            
                            break;
                          }
                          case 3:
                          {
                            lcd_clear();
                            sprintf(time_buffer," :%02u:%02u",m,s);
                            lcd_puts(time_buffer);
                            
                            break;
                          }
                        }
                        
                        break;
                      } 
               
                        
                      case temp_setting:
                      {
                        switch ( set_temp_mode )
                        {
                          case 1:
                          {
                            lcd_clear();
                            lcd_putsf("Low Temp: ");
                            break;
                          }
                            
                          case 2:
                          {
                            lcd_clear();
                            lcd_putsf("High Temp: ");
                            break;
                          }
                        }
                        
                        break;
                      }
                      
                      
                      case timer_setting:
                      {
                        switch ( set_timer_mode )
                        {
                          case 1:
                          {
                            lcd_gotoxy(2,0);
                            lcd_putsf(" ");
                            break;            
                          }
                          
                          case 2:
                          {
                            lcd_gotoxy(5,0);
                            lcd_putsf(" ");
                            break;            
                          } 
                        
                          case 3:
                          {
                            lcd_gotoxy(9,0);
                            lcd_putsf(" ");
                            break;            
                          }
                        
                          case 4:
                          {
                            lcd_gotoxy(12,0);
                            lcd_putsf(" ");
                            break;            
                          }
                        
                          case 5:
                          {
                            lcd_gotoxy(2,1);
                            lcd_putsf(" ");
                            break;            
                          } 
                          
                          case 6:
                          {
                            lcd_gotoxy(5,1);
                            lcd_putsf(" "); 
                            break;           
                          }
                          
                          case 7:
                          {
                            lcd_gotoxy(9,1);
                            lcd_putsf(" ");
                            break;            
                          }
                          
                          case 8:
                          {
                            lcd_gotoxy(12,1);
                            lcd_putsf(" ");
                            break;            
                          }
                        }
                        
                        break;
                        
                      } 
                      
                      
                    }
                    
                    operation_done = 1;
                  }
                  
                  
               }
                  
            } 
                                  
                      }
                    }  
                  }

            دیدگاه


              #7
              پاسخ : هنگ کردن میکرو - منو بر روی LCD کاراکتری

              اشکال کار پیدا شد. متأسفانه بنده در زیر برنامه ی یکی از کلیدها ، یک if رو به صورت اشتباه نوشته بودم که باعث میشد میکرو سر در گم بشه. اون if رو در زیر قرار دادم:(اصلاحش کردم درست شد) اما واقعاً چرا باید این کد اشتباه باشه!!

              کد:
               
                          if ( 0 < mode < 7 ) 
                          {
                            mode+=6;
                          }
              نمونه اصلاح شده کد:


              کد:
               
                          if (  mode>0 && mode<7 ) 
                          {
                            mode+=6;
                          }

              این رو تو ویدئو استاد بازرگان توضیح داده.( منبع دانلود : سایت مکتب خونه )
              زبان c اول میاد بخش اول شرط if رو بررسی میکنه .
              آیا mode بزرگتر از صفره ؟
              اینجا اگر صحیح باشه مقدار true و اگه غلط باشه false رو به خودش میگیره که true=1 , false=0
              حالا این صفر یا یک رو با 7 مقایسه میکنه که همیشه کوچکتره . بنابراین شرط شما همیشه درسته !
              -------------------------------------------------------------------------------------------------------------------
              اساتید اگه اشتباه گفتم لطفا اصلاح کنید .
              إِنَّ الَّذِینَ یُحِبُّونَ أَنْ تَشِیعَ الْفاحِشَهُ فِی الَّذِینَ آمَنُوا لَهُمْ عَذابٌ أَلِیمٌ فِی الدُّنْیا وَ الْآخِرَهِ وَ اللَّهُ یَعْلَمُ وَ أَنْتُمْ لا تَعْلَمُونَ.
              کسانى که دوست دارند زشتی ها در میان مردم با ایمان شیوع یابد عذاب دردناکى براى آنها در دنیا و آخرت است، و خداوند میداند و شما نمی‏دانید. (نور19)

              دیدگاه


                #8
                پاسخ : هنگ کردن میکرو - منو بر روی LCD کاراکتری

                سلام من هم سوالی دارم اطلاعات رو از rs232 دریافت می کنم و نمایش می دم ال سی دی هم 2*16 هست ولی وقتی 16 کاراکتر رو ال سی دی تموم شد اطلاعات ورودی رو نمایش نمی ده و بعد از سطر اول شروع میشه من می خواستم اطلاعات فقط در سطر دوم باشه و بعد 16 کاراکتر در همون سطر به ابتدا بگرده ممنون اگر راهنمایی بفرمایید میکرو هم مگا 32 هست

                دیدگاه


                  #9
                  پاسخ : هنگ کردن میکرو - منو بر روی LCD کاراکتری

                  نوشته اصلی توسط flightsazan نمایش پست ها
                  سلام من هم سوالی دارم اطلاعات رو از rs232 دریافت می کنم و نمایش می دم ال سی دی هم 2*16 هست ولی وقتی 16 کاراکتر رو ال سی دی تموم شد اطلاعات ورودی رو نمایش نمی ده و بعد از سطر اول شروع میشه من می خواستم اطلاعات فقط در سطر دوم باشه و بعد 16 کاراکتر در همون سطر به ابتدا بگرده ممنون اگر راهنمایی بفرمایید میکرو هم مگا 32 هست
                  اگه میخواید دیتا فقط روی سطر دوم نمایش داده بشه بعد از دریافت دیتا ادرس اولین کاراکتر از سطر دوم رو بدید و دیتا رو بنویسید.
                  البته سوالتونو تو تاپیک جدید مطرح میکردید بهتر بود.
                  سپاس
                  جدیدترین ویرایش توسط saeiddiod; ۰۳:۳۴ ۱۴۰۰/۰۳/۱۴.

                  دیدگاه

                  لطفا صبر کنید...
                  X