اطلاعیه

Collapse
No announcement yet.

کد بهینه برای دریافت اطلاعات عکس از میکرو sd ونمایش در lcdn96

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

    کد بهینه برای دریافت اطلاعات عکس از میکرو sd ونمایش در lcdn96

    سلام به همه

    من یه کدی نوشتم که کدهای مربوط به پیکسل های lcdn96 رو در میاده و داخل lcdn96 نمایش میده
    اما مسئله اینه که سرعتش خیلی پایینه
    تقریبا تو هر 16 ثانیه یه عکس رو نمایش میده

    آقای پولاستار ( اسدی ) یه کدی نوشته بودن که خیلی سریع بود اگه کسی کدشو بتونه پیدا کنه ممنون میشم
    یا اگه کدی که سریع باشه سراغ دارید لطفا بزارید
    کدی که خودم نوشتم اینه

    کد:
    void picture_display(char buff[])
     {     
       
        while ( res=f_mount(0,&drive) != FR_OK );
        lcd_background_color(BLACK,4); 
        while ( res=f_open(&file,buff,FA_READ) != FR_OK );
        
        offset=0;
        while(1)
         {  
           
           next_240_byte:
    
           while ( res=f_lseek (&file,offset) != FR_OK );
           offset+=byte_read;
           while ( res=f_read(&file,buffer,byte_read,&nbytes) != FR_OK );
           count_total_byte=0;
          
          
          
          
           if ( data_fully == 0 )
             {
              while ( buffer[count_total_byte] =='\n' || buffer[count_total_byte] =='\r' )
               count_total_byte++;    
              if ( buffer[count_total_byte] =='x' )
               count_total_byte++;
              else if ( buffer[count_total_byte] =='0' && buffer[count_total_byte+1] =='x' ) 
               count_total_byte+=2;
              else if ( buffer[count_total_byte] ==',' )
               {
                count_total_byte++;
                goto find_16_bit;
               } 
              while( buffer[count_total_byte] !=',' ) 
               buffer_data[count++] = buffer[count_total_byte++]; 
              goto find_16_bit;
             }
          
         while(1)
          {       
           
           count=0;     
           data_fully=0;
           while ( 1 )
            {  
             
             if ( buffer[count_total_byte] =='\n' || buffer[count_total_byte] =='\r' )
              {
               count_total_byte++; 
               if ( count_total_byte > byte_read-1 )
                goto next_240_byte;
              }
             else if ( buffer[count_total_byte] =='x' )
              {
               count_total_byte++;  
               if ( count_total_byte > byte_read-1 )
                goto next_240_byte; 
               break;
              }
             else 
              {
               count_total_byte++;
               if ( count_total_byte > byte_read-1 )
                goto next_240_byte;
              }  
              
            }  
           
            
             while( buffer[count_total_byte] !=',' ) 
              {
               buffer_data[count++] = buffer[count_total_byte++]; 
               if ( count_total_byte > byte_read-1 )
                goto next_240_byte; 
              } 
                   
              
            find_16_bit:  
            data_fully=1;  
            i0=count-1;
            while(i0>=0 && i0<4)
             {  
              if ( buffer_data[i0] == 'f' )
              c=15; 
              else if ( buffer_data[i0] == 'e' )
              c=14; 
              else if ( buffer_data[i0] == 'd' )
              c=13; 
              else if ( buffer_data[i0] == 'c' )
              c=12;                  
              else if ( buffer_data[i0] == 'b' )
              c=11; 
              else if ( buffer_data[i0] == 'a' )
              c=10; 
              else if ( buffer_data[i0] == '0' )
              c=0;
              else if ( buffer_data[i0] == '1' )
              c=1;
              else if ( buffer_data[i0] == '2' )
              c=2;
              else if ( buffer_data[i0] == '3' )
              c=3;
              else if ( buffer_data[i0] == '4' )
              c=4;
              else if ( buffer_data[i0] == '5' )
              c=5;
              else if ( buffer_data[i0] == '6' )
              c=6;
              else if ( buffer_data[i0] == '7' )
              c=7;
              else if ( buffer_data[i0] == '8' )
              c=8;
              else if ( buffer_data[i0] == '9' )
              c=9; 
              
              i0--;
              
              i1=0;
              while(i1<4)
               {     
                if ( c & (0b0001<<i1) )
                 {
                  data_lcd = data_lcd | (0b0000000000000001<<i2); 
                 } 
                i2++;
                i1++; 
               }
              
             }
             i2=0;
           
            
            CS_LOW;
            LCD_DATAPORT_MSB_PORT=(data_lcd>>8); 
            LCD_DATAPORT_LSB_PORT=data_lcd; 
            WR_LOW;
            WR_HIGH;
            CS_HIGH; 
            
            x++; 
             if(x==240)
              {
              x=0;
              y++;
              }
             if(y==320 && x==0)
             {
              while ( res=f_close(&file) != FR_OK );  
              while ( res=f_mount(0,NULL) != FR_OK );
              x=0;
              y=0; 
              break;
             }      
            
             data_lcd=0; 
    
             
          }  
         break;
         }
     
     }
لطفا صبر کنید...
X