Показано с 1 по 10 из 118

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Новичок
    Регистрация
    11.06.2021
    Сообщений
    1
    Вес репутации
    0

    По умолчанию Re: Дисплей Epson LCD L2F50 от Siemens S65

    Цитата Сообщение от Chip Посмотреть сообщение
    Копать нужно в эту сторону http://compcar.ru/forum/showthread.p...l=1#post110401
    http://compcar.ru/forum/showthread.p...l=1#post110395
    http://compcar.ru/forum/showthread.p...ll=1#post91484


    Вытащил из либы функции, с которыми нужно разбираться
    PHP код:
    uint8_t S65Display::drawChar(uint8_t xuint8_t ychar cuint8_t sizeuint16_t coloruint16_t bg_color

      
    uint8_t rethw// h,w sind Laufvariablen für Höhe und Weite 
    #if FONT_WIDTH <= 8 
      
    uint8_t data
    #elif FONT_WIDTH <= 16 
      
    uint16_t data
    #elif FONT_WIDTH <= 32 
      
    uint32_t data
    #endif 
      
    uint8_t ijwidthheight
      const 
    prog_uint8_t *ptr, *ptr_tmp

      
    i      = (uint8_t)c
    #if FONT_WIDTH <= 8 
      
    ptr    = &font_PGM[(i-FONT_START)*(8*FONT_HEIGHT/8)]; 
    #elif FONT_WIDTH <= 16 
      
    ptr    = &font_PGM[(i-FONT_START)*(16*FONT_HEIGHT/8)]; 
    #elif FONT_WIDTH <= 32 
      
    ptr    = &font_PGM[(i-FONT_START)*(32*FONT_HEIGHT/8)]; 
    #endif 
      
    width  FONT_WIDTH
      
    height FONT_HEIGHT

      if(
    size <= 1
      { 
        
    ret x+width
        if(
    ret S65_WIDTH
        { 
          return 
    S65_WIDTH+1
        } 

        
    setArea(xy, (x+width-1), (y+height-1)); 

        
    s65_drawStart(); 
        
    ptr_tmp ptr
        for(
    w=widthw!=0w--) //  
        

        
    ptr    ptr_tmp
        
    //Serial.print("w="); Serial.println(w); delay(50); 
        
    for(hheighth!=0h--)  
        { 
        
    #if FONT_WIDTH <= 8 
            
    data pgm_read_byte(ptr); ptr+=1
        
    #elif FONT_WIDTH <= 16 
            
    data pgm_read_word(ptr); ptr+=2
        
    #elif FONT_WIDTH <= 32 
            
    data pgm_read_dword(ptr); ptr+=4
        
    #endif 
         
            
    if(CHECK_BIT(data,w)) // hier Sprung in die Funktion CHECK_BIT(var,pos)  
                                  // die ist in S6%Dislay.h angelegt 
                                  // und sieht so aus: 
                                  // #define CHECK_BIT(var,pos) ((var & (1 << pos)) == (1 << pos)) 

                

                
    s65_draw(color); 
                } 
                else 
                { 
                
    s65_draw(bg_color); 
                } 
            } 
        } 
        
    s65_drawStop(); 
      } 
      else 
      { 
        
    ret x+(width*size); 
        if(
    ret S65_WIDTH
        { 
          return 
    S65_WIDTH+1
        } 

        
    s65_setArea(xy, (x+(width*size)-1), (y+(height*size)-1)); 

        
    s65_drawStart(); 
          
    ptr_tmp ptr
        for(
    w=widthw!=0w--) //  
        

        
    ptr    ptr_tmp
        
    //Serial.print("w="); Serial.println(w); delay(50); 
        
    for(hheighth!=0h--) 
        { 
        
    #if FONT_WIDTH <= 8 
          
    data pgm_read_byte(ptr); ptr+=1
        
    #elif FONT_WIDTH <= 16 
          
    data pgm_read_word(ptr); ptr+=2
        
    #elif FONT_WIDTH <= 32 
          
    data pgm_read_dword(ptr); ptr+=4
        
    #endif 
         
         
              
    if(CHECK_BIT(data,w)) 
              { 
                for(
    j=sizej!=0j--) 
                { 
                  
    s65_draw(color); 
                } 
              } 
              else 
              { 
                for(
    j=sizej!=0j--) 
                { 
                  
    s65_draw(bg_color); 
                } 
                } 
                } 
              
        } 
        
    s65_drawStop(); 
      } 

      return 
    ret



    uint8_t S65Display::drawText(uint8_t xuint8_t ychar *suint8_t sizeuint16_t coloruint16_t bg_color

      while(*
    != 0
      { 
        
    drawChar(xy, *s++, sizecolorbg_color); 
        if(
    S65_WIDTH
        { 
          break; 
        } 
      } 

      return 
    x

    Я бы поправил, но без дисплея это просто не возможно
    Хоть тема старая, но напишу решение, в этом коде после
    i = (uint8_t)c;
    добавляем
    ret = x;
    if ((i!=208) && (i!=209)) {
    и закрываем скобку перед
    }
    return ret;
    Последний раз редактировалось Signal; 11.06.2021 в 12:33.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 2 (пользователей: 0 , гостей: 2)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •