//flushes the buffers to the lcd and resets everything //so call this only once per loop, since this draws the frame void flush_to_lcd() { for (int32_t i = 0; i < buffered_amount; i++) { start_drawing[i] = drawable_buffer[i].get_start(); end_drawing[i] = drawable_buffer[i].get_end(); } command_lcd(0x4e, 0); command_lcd(0x4f, 0); lcd_com(0x22); //lets iterate thru all y-lines for (int32_t y = 0; y < SCREENY; y++) { //empty the line buffer with black draw_line_to_buf(0,SCREENX,0x0); //iterate thru all drawable objects for (int32_t i = 0; i < buffered_amount; i++) { if (start_drawing[i] > y) continue; if (end_drawing[i] < y) continue; //draw 1 pixel height y-slice of the drawable object to the linebuffer drawable_buffer[i].draw(y); } //pulse the current linebuffer to the lcd draw_linebuffer(); } //reset drawable objects buffered_amount = 0; text_buffer_pointer = 0; }
//------------Функция инициализации ЖКИ----------------- =34 void lcd_init(void) //Режим 4 бит, мигающий курсор =35 { DDR_lcd |= 0x0F;//для младших разрядов //DDR_lcd |= 0xF0;//для старших разрядов DDR_RS |= _BV(RS); DDR_EN |= _BV(EN); lcd_com(0x33); _delay_ms(100); //Подготовка =36 lcd_com(0x32); lcd_com(0x28); lcd_com(0x28); lcd_com(0x28); //4 бит, 2 строки =37 lcd_com(0x08); //Полное выключение дисплея =38 lcd_com(0x01); _delay_ms(200); //Очистка дисплея =39 lcd_com(0x06); //Сдвиг курсора вправо =40 lcd_com(0x0C); //Включение дисплея, мигающий курсор =41 } //Окончание функции "lcd_init" =42