added some functions
Added functions to move to goto a specific x pixel, clear display buffer, read from display buffer, and transfer only a portion of the buffer to the display.
Dieser Commit ist enthalten in:
		
							Ursprung
							
								
									fa446f6111
								
							
						
					
					
						Commit
						834f7875a3
					
				
							
								
								
									
										25
									
								
								lcd.c
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								lcd.c
									
									
									
									
									
								
							| @ -130,6 +130,17 @@ void lcd_gotoxy(uint8_t x, uint8_t y){ | ||||
| #endif | ||||
|     lcd_command(commandSequence, sizeof(commandSequence)); | ||||
| } | ||||
| void lcd_goto_xpix_y(uint8_t x, uint8_t y){ | ||||
|     if( x > (DISPLAY_WIDTH) || y > (DISPLAY_HEIGHT/8-1)) return;// out of display
 | ||||
|     cursorPosition.x=x; | ||||
|     cursorPosition.y=y; | ||||
| #if defined SSD1306 | ||||
|     uint8_t commandSequence[] = {0xb0+y, 0x21, x, 0x7f}; | ||||
| #elif defined SH1106 | ||||
|     uint8_t commandSequence[] = {0xb0+y, 0x21, 0x00+((2+x) & (0x0f)), 0x10+( ((2+x) & (0xf0)) >> 4 ), 0x7f}; | ||||
| #endif | ||||
|     lcd_command(commandSequence, sizeof(commandSequence)); | ||||
| } | ||||
| void lcd_clrscr(void){ | ||||
| #ifdef GRAPHICMODE | ||||
|     for (uint8_t i = 0; i < DISPLAY_HEIGHT/8; i++){ | ||||
| @ -452,4 +463,18 @@ void lcd_display() { | ||||
|     } | ||||
| #endif | ||||
| } | ||||
| void lcd_clear_buffer() { | ||||
|     for (uint8_t i = 0; i < DISPLAY_HEIGHT/8; i++){ | ||||
|         memset(displayBuffer[i], 0x00, sizeof(displayBuffer[i])); | ||||
|     } | ||||
| } | ||||
| uint8_t lcd_check_buffer(uint8_t x, uint8_t y) { | ||||
|     if( x > DISPLAY_WIDTH-1 || y > (DISPLAY_HEIGHT-1)) return 0; // out of Display
 | ||||
|     return displayBuffer[(y / (DISPLAY_HEIGHT/8))][x] & (1 << (y % (DISPLAY_HEIGHT/8))); | ||||
| } | ||||
| void lcd_display_block(uint8_t x, uint8_t line, uint8_t width) { | ||||
|     if ( x+width > (DISPLAY_WIDTH) || line > (DISPLAY_HEIGHT/8-1)) return; | ||||
|     lcd_goto_xpix_y(x,line); | ||||
|     lcd_data(&displayBuffer[line][x], width); | ||||
| } | ||||
| #endif | ||||
|  | ||||
							
								
								
									
										5
									
								
								lcd.h
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								lcd.h
									
									
									
									
									
								
							| @ -109,6 +109,8 @@ extern "C" { | ||||
|      | ||||
|     void lcd_clrscr(void);                // clear screen (and buffer at GRFAICMODE)
 | ||||
|     void lcd_gotoxy(uint8_t x, uint8_t y);        // set curser at pos x, y. x means character,
 | ||||
|     // y means line (page, refer lcd manual)
 | ||||
| 	void lcd_goto_xpix_y(uint8_t x, uint8_t y); // set curser at pos x, y. x means pixel,
 | ||||
|     // y means line (page, refer lcd manual)
 | ||||
|     void lcd_putc(char c);                // print character on screen at TEXTMODE
 | ||||
|     // at GRAPHICMODE print character to buffer
 | ||||
| @ -122,6 +124,9 @@ extern "C" { | ||||
|     void lcd_fillCircle(uint8_t center_x, uint8_t center_y, uint8_t radius, uint8_t color); | ||||
|     void lcd_drawBitmap(uint8_t x, uint8_t y, const uint8_t picture[], uint8_t width, uint8_t height, uint8_t color); | ||||
|     void lcd_display(void);                // copy buffer to display RAM
 | ||||
| 	void lcd_clear_buffer(void); // clear display buffer
 | ||||
|     uint8_t lcd_check_buffer(uint8_t x, uint8_t y); | ||||
|     void lcd_display_block(uint8_t x, uint8_t line, uint8_t width); // display (part of) a display line
 | ||||
| #endif | ||||
|      | ||||
| #ifdef __cplusplus | ||||
|  | ||||
		Laden…
	
	
			
			x
			
			
		
	
		In neuem Issue referenzieren
	
	Einen Benutzer sperren
	 Paul Klinger
						Paul Klinger