Update lcd.c
Dieser Commit ist enthalten in:
		
							Ursprung
							
								
									82533902dd
								
							
						
					
					
						Commit
						9139b4830d
					
				
							
								
								
									
										51
									
								
								lcd.c
									
									
									
									
									
								
							
							
						
						
									
										51
									
								
								lcd.c
									
									
									
									
									
								
							@ -52,6 +52,7 @@ static struct {
 | 
				
			|||||||
    uint8_t x;
 | 
					    uint8_t x;
 | 
				
			||||||
    uint8_t y;
 | 
					    uint8_t y;
 | 
				
			||||||
} cursorPosition;
 | 
					} cursorPosition;
 | 
				
			||||||
 | 
					static uint8_t charMode = NORMALSIZE;
 | 
				
			||||||
#if defined GRAPHICMODE
 | 
					#if defined GRAPHICMODE
 | 
				
			||||||
#include <stdlib.h>
 | 
					#include <stdlib.h>
 | 
				
			||||||
static uint8_t displayBuffer[DISPLAY_HEIGHT/8][DISPLAY_WIDTH];
 | 
					static uint8_t displayBuffer[DISPLAY_HEIGHT/8][DISPLAY_WIDTH];
 | 
				
			||||||
@ -174,22 +175,17 @@ void lcd_set_contrast(uint8_t contrast){
 | 
				
			|||||||
    lcd_command(commandSequence, sizeof(commandSequence));
 | 
					    lcd_command(commandSequence, sizeof(commandSequence));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
void lcd_putc(char c){
 | 
					void lcd_putc(char c){
 | 
				
			||||||
    #ifdef BIGCHAR
 | 
					 | 
				
			||||||
    uint8_t control = 2;
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
    uint8_t control = 1;
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
    switch (c) {
 | 
					    switch (c) {
 | 
				
			||||||
        case '\b':
 | 
					        case '\b':
 | 
				
			||||||
            // backspace
 | 
					            // backspace
 | 
				
			||||||
            lcd_gotoxy(cursorPosition.x-control, cursorPosition.y);
 | 
					            lcd_gotoxy(cursorPosition.x-charMode, cursorPosition.y);
 | 
				
			||||||
            lcd_putc(' ');
 | 
					            lcd_putc(' ');
 | 
				
			||||||
            lcd_gotoxy(cursorPosition.x-control, cursorPosition.y);
 | 
					            lcd_gotoxy(cursorPosition.x-charMode, cursorPosition.y);
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
        case '\t':
 | 
					        case '\t':
 | 
				
			||||||
            // tab
 | 
					            // tab
 | 
				
			||||||
            if( (cursorPosition.x+control*4) < (DISPLAY_WIDTH/ sizeof(FONT[0])-control*4) ){
 | 
					            if( (cursorPosition.x+charMode*4) < (DISPLAY_WIDTH/ sizeof(FONT[0])-charMode*4) ){
 | 
				
			||||||
                lcd_gotoxy(cursorPosition.x+control*4, cursorPosition.y);
 | 
					                lcd_gotoxy(cursorPosition.x+charMode*4, cursorPosition.y);
 | 
				
			||||||
            }else{
 | 
					            }else{
 | 
				
			||||||
                lcd_gotoxy(DISPLAY_WIDTH/ sizeof(FONT[0]), cursorPosition.y);
 | 
					                lcd_gotoxy(DISPLAY_WIDTH/ sizeof(FONT[0]), cursorPosition.y);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@ -197,7 +193,7 @@ void lcd_putc(char c){
 | 
				
			|||||||
        case '\n':
 | 
					        case '\n':
 | 
				
			||||||
            // linefeed
 | 
					            // linefeed
 | 
				
			||||||
            if(cursorPosition.y < (DISPLAY_HEIGHT/8-1)){
 | 
					            if(cursorPosition.y < (DISPLAY_HEIGHT/8-1)){
 | 
				
			||||||
                lcd_gotoxy(cursorPosition.x, cursorPosition.y+control);
 | 
					                lcd_gotoxy(cursorPosition.x, cursorPosition.y+charMode);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
        case '\r':
 | 
					        case '\r':
 | 
				
			||||||
@ -222,7 +218,7 @@ void lcd_putc(char c){
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            // print char at display
 | 
					            // print char at display
 | 
				
			||||||
#ifdef GRAPHICMODE
 | 
					#ifdef GRAPHICMODE
 | 
				
			||||||
    #ifdef BIGCHAR
 | 
					            if (charMode == DOUBLESIZE) {
 | 
				
			||||||
                uint16_t doubleChar[sizeof(FONT[0])];
 | 
					                uint16_t doubleChar[sizeof(FONT[0])];
 | 
				
			||||||
                uint8_t dChar;
 | 
					                uint8_t dChar;
 | 
				
			||||||
                
 | 
					                
 | 
				
			||||||
@ -244,15 +240,17 @@ void lcd_putc(char c){
 | 
				
			|||||||
                    displayBuffer[cursorPosition.y][cursorPosition.x+(2*i)] = doubleChar[i] & 0xff;
 | 
					                    displayBuffer[cursorPosition.y][cursorPosition.x+(2*i)] = doubleChar[i] & 0xff;
 | 
				
			||||||
                    displayBuffer[cursorPosition.y][cursorPosition.x+(2*i)+1] = doubleChar[i] & 0xff;
 | 
					                    displayBuffer[cursorPosition.y][cursorPosition.x+(2*i)+1] = doubleChar[i] & 0xff;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
    #else
 | 
					                cursorPosition.x += sizeof(FONT[0])*2;
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
                for (uint8_t i = 0; i < sizeof(FONT[0]); i++)
 | 
					                for (uint8_t i = 0; i < sizeof(FONT[0]); i++)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    // load bit-pattern from flash
 | 
					                    // load bit-pattern from flash
 | 
				
			||||||
                    displayBuffer[cursorPosition.y][cursorPosition.x+i] =pgm_read_byte(&(FONT[(uint8_t)c][i]));
 | 
					                    displayBuffer[cursorPosition.y][cursorPosition.x+i] =pgm_read_byte(&(FONT[(uint8_t)c][i]));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
    #endif
 | 
					                cursorPosition.x += sizeof(FONT[0]);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
#elif defined TEXTMODE
 | 
					#elif defined TEXTMODE
 | 
				
			||||||
    #ifdef BIGCHAR
 | 
					            if (charMode == DOUBLESIZE) {
 | 
				
			||||||
                uint16_t doubleChar[sizeof(FONT[0])];
 | 
					                uint16_t doubleChar[sizeof(FONT[0])];
 | 
				
			||||||
                uint8_t dChar;
 | 
					                uint8_t dChar;
 | 
				
			||||||
                
 | 
					                
 | 
				
			||||||
@ -277,9 +275,16 @@ void lcd_putc(char c){
 | 
				
			|||||||
                i2c_stop();
 | 
					                i2c_stop();
 | 
				
			||||||
                
 | 
					                
 | 
				
			||||||
#if defined SSD1306
 | 
					#if defined SSD1306
 | 
				
			||||||
            uint8_t commandSequence[] = {0xb0+cursorPosition.y+1, 0x21, cursorPosition.x, 0x7f};
 | 
					                uint8_t commandSequence[] = {0xb0+cursorPosition.y+1,
 | 
				
			||||||
 | 
					                    0x21,
 | 
				
			||||||
 | 
					                    cursorPosition.x,
 | 
				
			||||||
 | 
					                    0x7f};
 | 
				
			||||||
#elif defined SH1106
 | 
					#elif defined SH1106
 | 
				
			||||||
            uint8_t commandSequence[] = {0xb0+cursorPosition.y+1, 0x21, 0x00+((2+cursorPosition.x) & (0x0f)), 0x10+( ((2+cursorPosition.x) & (0xf0)) >> 4 ), 0x7f};
 | 
					                uint8_t commandSequence[] = {0xb0+cursorPosition.y+1,
 | 
				
			||||||
 | 
					                    0x21,
 | 
				
			||||||
 | 
					                    0x00+((2+cursorPosition.x) & (0x0f)),
 | 
				
			||||||
 | 
					                    0x10+( ((2+cursorPosition.x) & (0xf0)) >> 4 ),
 | 
				
			||||||
 | 
					                    0x7f};
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
                lcd_command(commandSequence, sizeof(commandSequence));
 | 
					                lcd_command(commandSequence, sizeof(commandSequence));
 | 
				
			||||||
                
 | 
					                
 | 
				
			||||||
@ -301,9 +306,8 @@ void lcd_putc(char c){
 | 
				
			|||||||
                commandSequence[3] = 0x10+( ((2+cursorPosition.x+(2*sizeof(FONT[0]))) & (0xf0)) >> 4 );
 | 
					                commandSequence[3] = 0x10+( ((2+cursorPosition.x+(2*sizeof(FONT[0]))) & (0xf0)) >> 4 );
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
                lcd_command(commandSequence, sizeof(commandSequence));
 | 
					                lcd_command(commandSequence, sizeof(commandSequence));
 | 
				
			||||||
            
 | 
					                cursorPosition.x += sizeof(FONT[0])*2;
 | 
				
			||||||
            
 | 
					            } else {
 | 
				
			||||||
    #else
 | 
					 | 
				
			||||||
                i2c_start(LCD_I2C_ADR << 1);
 | 
					                i2c_start(LCD_I2C_ADR << 1);
 | 
				
			||||||
                i2c_byte(0x40);
 | 
					                i2c_byte(0x40);
 | 
				
			||||||
                for (uint8_t i = 0; i < sizeof(FONT[0]); i++)
 | 
					                for (uint8_t i = 0; i < sizeof(FONT[0]); i++)
 | 
				
			||||||
@ -312,17 +316,16 @@ void lcd_putc(char c){
 | 
				
			|||||||
                    i2c_byte(pgm_read_byte(&(FONT[(uint8_t)c][i])));
 | 
					                    i2c_byte(pgm_read_byte(&(FONT[(uint8_t)c][i])));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                i2c_stop();
 | 
					                i2c_stop();
 | 
				
			||||||
    #endif
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
#ifdef BIGCHAR
 | 
					 | 
				
			||||||
            cursorPosition.x += sizeof(FONT[0])*2;
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
                cursorPosition.x += sizeof(FONT[0]);
 | 
					                cursorPosition.x += sizeof(FONT[0]);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					void lcd_charMode(uint8_t mode){
 | 
				
			||||||
 | 
					    charMode = mode;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
void lcd_puts(const char* s){
 | 
					void lcd_puts(const char* s){
 | 
				
			||||||
    while (*s) {
 | 
					    while (*s) {
 | 
				
			||||||
        lcd_putc(*s++);
 | 
					        lcd_putc(*s++);
 | 
				
			||||||
 | 
				
			|||||||
		Laden…
	
	
			
			x
			
			
		
	
		In neuem Issue referenzieren
	
	Einen Benutzer sperren