diff --git a/Core/Example/gfx_oled_example.c b/Core/Example/gfx_oled_example.c index be678b3..9b73511 100644 --- a/Core/Example/gfx_oled_example.c +++ b/Core/Example/gfx_oled_example.c @@ -3,15 +3,15 @@ int menu_white_theme = 0; //#define SINE_EXAMPLE -//#define ECG_EXAMPLE -#define PLAYER_EXAMPLE +#define ECG_EXAMPLE +//#define PLAYER_EXAMPLE #define ECG_SIZE 550 // Примерный массив, симулирующий ЭКГ-сигнал (нормализованный от 0 до 1) -const float ecg_data[ECG_SIZE] = {1.05893, 0.999357, 0.933132, 0.744792, 0.664672, 0.328846, 0.136133, -0.00837916, -0.131494, +float ecg_data[ECG_SIZE] = {1.05893, 0.999357, 0.933132, 0.744792, 0.664672, 0.328846, 0.136133, -0.00837916, -0.131494, -0.1437, -0.182276, -0.215992, -0.128979, -0.131278, -0.0675223, 0.0027252, 0.0467067, -0.078859, -0.0658536, 0.0626352, -0.0462435, 0.0476623, 0.0535328, 0.122938, 0.0501136, 0.034033, 0.0919253, 0.108374, 0.0667457, 0.0351678, -0.00115748, 0.0896459, 0.0288452, -0.0102636, 0.136738, 0.0397245, 0.0856079, 0.141222, 0.0826385, 0.165799, 0.105852, 0.172638, @@ -63,94 +63,15 @@ const float ecg_data[ECG_SIZE] = {1.05893, 0.999357, 0.933132, 0.744792, 0.66467 void GFX_Draw_LoopIcon(uint8_t *Buffer_Frame, uint8_t x, uint8_t y, uint8_t width, uint8_t height, uint8_t pxColor); GFXIconsTypeDef icons; - -void Example_GFX_IconInit(void) -{ - // play - icons.StopPlay.stop.xPos1 = play_icon_x_left-1; - icons.StopPlay.stop.yPos1 = play_icon_y_up; - icons.StopPlay.stop.xPos2 = play_icon_x_left-1; - icons.StopPlay.stop.yPos2 = play_icon_y_down; - icons.StopPlay.stop.xPos3 = play_icon_x_rigth+1; - icons.StopPlay.stop.yPos3 = play_icon_y_mid; - icons.StopPlay.stop.pxColor = 1; - - // stop - icons.StopPlay.play_lines[0].xPos_Start = play_icon_x_left+1; - icons.StopPlay.play_lines[0].yPos_Start = play_icon_y_up; - icons.StopPlay.play_lines[0].xPos_End = play_icon_x_left+1; - icons.StopPlay.play_lines[0].yPos_End = play_icon_y_down; - icons.StopPlay.play_lines[0].pxColor = 1; - icons.StopPlay.play_lines[1].xPos_Start = play_icon_x_rigth; - icons.StopPlay.play_lines[1].yPos_Start = play_icon_y_up; - icons.StopPlay.play_lines[1].xPos_End = play_icon_x_rigth; - icons.StopPlay.play_lines[1].yPos_End = play_icon_y_down; - icons.StopPlay.play_lines[1].pxColor = 1; - - // stop/play pressed - icons.StopPlay.PressedArea.selected_Width = selected_width; - icons.StopPlay.PressedArea.xPos_Start = play_icon_x_left-1-selected_width; - icons.StopPlay.PressedArea.yPos_Start = play_icon_y_up-selected_width; - icons.StopPlay.PressedArea.area_Width = play_icon_x_rigth+2-(play_icon_x_left-1)+2*selected_width+1; - icons.StopPlay.PressedArea.area_Height = play_icon_y_down-play_icon_y_up+2*selected_width+1; - - // forward - icons.Forward.line.xPos_Start = forward_icon_x_rigth; - icons.Forward.line.yPos_Start = forward_icon_y_up; - icons.Forward.line.xPos_End = forward_icon_x_rigth; - icons.Forward.line.yPos_End = forward_icon_y_down; - icons.Forward.line.pxColor = 1; - icons.Forward.trig.xPos1 = forward_icon_x_left; - icons.Forward.trig.yPos1 = forward_icon_y_up; - icons.Forward.trig.xPos2 = forward_icon_x_left; - icons.Forward.trig.yPos2 = forward_icon_y_down; - icons.Forward.trig.xPos3 = forward_icon_x_rigth-1; - icons.Forward.trig.yPos3 = forward_icon_y_mid; - icons.Forward.trig.pxColor = 1; - - // forward pressed - icons.Forward.PressedArea.selected_Width = selected_width; - icons.Forward.PressedArea.xPos_Start = forward_icon_x_left-selected_width; - icons.Forward.PressedArea.yPos_Start = forward_icon_y_up-selected_width; - icons.Forward.PressedArea.area_Width = forward_icon_x_rigth-(forward_icon_x_left)+2*selected_width+1; - icons.Forward.PressedArea.area_Height = forward_icon_y_down-forward_icon_y_up+2*selected_width+1; - - // backward - icons.Backward.line.xPos_Start = backward_icon_x_left; - icons.Backward.line.yPos_Start = backward_icon_y_up; - icons.Backward.line.xPos_End = backward_icon_x_left; - icons.Backward.line.yPos_End = backward_icon_y_down; - icons.Backward.line.pxColor = 1; - icons.Backward.trig.xPos1 = backward_icon_x_rigth; - icons.Backward.trig.yPos1 = backward_icon_y_up; - icons.Backward.trig.xPos2 = backward_icon_x_rigth; - icons.Backward.trig.yPos2 = backward_icon_y_down; - icons.Backward.trig.xPos3 = backward_icon_x_left+1; - icons.Backward.trig.yPos3 = backward_icon_y_mid; - icons.Backward.trig.pxColor = 1; - - // backward pressed - icons.Backward.PressedArea.xPos_Start = backward_icon_x_left-selected_width; - icons.Backward.PressedArea.yPos_Start = backward_icon_y_up-selected_width; - icons.Backward.PressedArea.area_Width = backward_icon_x_rigth-(backward_icon_x_left)+2*selected_width+1; - icons.Backward.PressedArea.area_Height = backward_icon_y_down-backward_icon_y_up+2*selected_width+1; - - // loop - icons.Loop.xPos_Start = loop_icon_x_start; - icons.Loop.yPos_Start = loop_icon_y_start; - icons.Loop.icon_Width = loop_icon_width; - icons.Loop.icon_Height = loop_icon_height; - - // loop pressed - icons.Loop.PressedArea.xPos_Start = loop_icon_x_start+3; - icons.Loop.PressedArea.yPos_Start = loop_icon_y_start+3; - icons.Loop.PressedArea.area_Width = loop_icon_width-5; - icons.Loop.PressedArea.area_Height = loop_icon_height-5; -// иконка зацикливания - GFX_Draw_LoopIcon(oled_buf, loop_icon_x_start, loop_icon_y_start, loop_icon_width, loop_icon_height, 1); - -} +GFX_PlotterFloatHandleTypeDef plotter; +void Example_GFX_Init(void) +{ + Example_GFX_PlotterInit(); + Example_GFX_IconInit(); + oled_init(); +} + void Example_OLED_GFX_Update(PlayerTypeDef *player) { @@ -170,54 +91,11 @@ float ecg_cnt_step = 1; float ecg_scale = 16; void Example_GFX_CreateFrame(PlayerTypeDef *player) { -#if defined(SINE_EXAMPLE) || defined(ECG_EXAMPLE) - static float sine_cnt; - static int display_cnt; - static int pix_y_prev = 0; +#if defined(SINE_EXAMPLE) || defined(ECG_EXAMPLE) + GFX_Draw_Plotter(oled_buf, &plotter); -#if defined(SINE_EXAMPLE) - int pix_y = (int)((float)(sinf(sine_cnt)+shift)*((float)32/(1+shift))); -#elif defined(ECG_EXAMPLE) - int pix_y = (ecg_data[(int)ecg_cnt]*ecg_scale)+16; - ecg_cnt += ecg_cnt_step; - if(ecg_cnt > ECG_SIZE) - ecg_cnt = 0; -#endif - - if(pix_y - pix_y_prev > 0) - { - for(int y = pix_y_prev+1; y <= pix_y; y++) - { - if(y<=32) - GFX_Draw_Pixel(oled_buf, display_cnt, 32 - y, 1); - } - } - else if (pix_y - pix_y_prev < 0) - { - for(int y = pix_y_prev-1; y >= pix_y; y--) - { - if(y<=32) - GFX_Draw_Pixel(oled_buf, display_cnt, 32 - y, 1); - } - } - else - GFX_Draw_Pixel(oled_buf, display_cnt, 32 - pix_y, 1); - - display_cnt++; - - - - sine_cnt += sine_cnt_step; - pix_y_prev = pix_y; - - if(display_cnt>GFX_BufferWidth) - { - display_cnt = 0; - GFX_Clean_Buffer_Frame(oled_buf, sizeof(oled_buf)); - - } #elif defined(PLAYER_EXAMPLE) - GFX_Clean_Buffer_Frame(oled_buf, sizeof(oled_buf)); + GFX_Clean_Buffer_Frame(oled_buf); // название песни GFX_Output_String(oled_buf, 0, 0, "Harry Potter Theme", 0, 0); @@ -312,3 +190,115 @@ void GFX_Draw_LoopIcon(uint8_t *Buffer_Frame, uint8_t x, uint8_t y, uint8_t widt __GFX_Draw_Line(Buffer_Frame, x + r+spot_width, y + height, x + r + arr_size+spot_width, y + height - arr_size, pxColor); // Нижняя стрелка __GFX_Draw_Line(Buffer_Frame, x + r+spot_width, y + height, x + r + arr_size+spot_width, y + height + arr_size, pxColor); } + + + +void Example_GFX_PlotterInit(void) +{ + plotter.xPos = 2; + plotter.yPos = 0; + plotter.plotWidth = 120; + plotter.plotHeight = 32; + plotter.plotXAxis = 1; + plotter.plotYAxis = 1; + +#if defined(SINE_EXAMPLE) + + int pix_y = (int)((float)(sinf(sine_cnt)+shift)*((float)32/(1+shift))); +#elif defined(ECG_EXAMPLE) + + plotter.pDataPtr = ecg_data; + plotter.dataMax = 1.1; + plotter.dataSize = 550; + plotter.signedData = 1; + plotter.plotShift = 0; + plotter.plotSpeed = 2.5; +#endif + +} +void Example_GFX_IconInit(void) +{ + // play + icons.StopPlay.stop.xPos1 = play_icon_x_left-1; + icons.StopPlay.stop.yPos1 = play_icon_y_up; + icons.StopPlay.stop.xPos2 = play_icon_x_left-1; + icons.StopPlay.stop.yPos2 = play_icon_y_down; + icons.StopPlay.stop.xPos3 = play_icon_x_rigth+1; + icons.StopPlay.stop.yPos3 = play_icon_y_mid; + icons.StopPlay.stop.pxColor = 1; + + // stop + icons.StopPlay.play_lines[0].xPos_Start = play_icon_x_left+1; + icons.StopPlay.play_lines[0].yPos_Start = play_icon_y_up; + icons.StopPlay.play_lines[0].xPos_End = play_icon_x_left+1; + icons.StopPlay.play_lines[0].yPos_End = play_icon_y_down; + icons.StopPlay.play_lines[0].pxColor = 1; + icons.StopPlay.play_lines[1].xPos_Start = play_icon_x_rigth; + icons.StopPlay.play_lines[1].yPos_Start = play_icon_y_up; + icons.StopPlay.play_lines[1].xPos_End = play_icon_x_rigth; + icons.StopPlay.play_lines[1].yPos_End = play_icon_y_down; + icons.StopPlay.play_lines[1].pxColor = 1; + + // stop/play pressed + icons.StopPlay.PressedArea.selected_Width = selected_width; + icons.StopPlay.PressedArea.xPos_Start = play_icon_x_left-1-selected_width; + icons.StopPlay.PressedArea.yPos_Start = play_icon_y_up-selected_width; + icons.StopPlay.PressedArea.area_Width = play_icon_x_rigth+2-(play_icon_x_left-1)+2*selected_width+1; + icons.StopPlay.PressedArea.area_Height = play_icon_y_down-play_icon_y_up+2*selected_width+1; + + // forward + icons.Forward.line.xPos_Start = forward_icon_x_rigth; + icons.Forward.line.yPos_Start = forward_icon_y_up; + icons.Forward.line.xPos_End = forward_icon_x_rigth; + icons.Forward.line.yPos_End = forward_icon_y_down; + icons.Forward.line.pxColor = 1; + icons.Forward.trig.xPos1 = forward_icon_x_left; + icons.Forward.trig.yPos1 = forward_icon_y_up; + icons.Forward.trig.xPos2 = forward_icon_x_left; + icons.Forward.trig.yPos2 = forward_icon_y_down; + icons.Forward.trig.xPos3 = forward_icon_x_rigth-1; + icons.Forward.trig.yPos3 = forward_icon_y_mid; + icons.Forward.trig.pxColor = 1; + + // forward pressed + icons.Forward.PressedArea.selected_Width = selected_width; + icons.Forward.PressedArea.xPos_Start = forward_icon_x_left-selected_width; + icons.Forward.PressedArea.yPos_Start = forward_icon_y_up-selected_width; + icons.Forward.PressedArea.area_Width = forward_icon_x_rigth-(forward_icon_x_left)+2*selected_width+1; + icons.Forward.PressedArea.area_Height = forward_icon_y_down-forward_icon_y_up+2*selected_width+1; + + // backward + icons.Backward.line.xPos_Start = backward_icon_x_left; + icons.Backward.line.yPos_Start = backward_icon_y_up; + icons.Backward.line.xPos_End = backward_icon_x_left; + icons.Backward.line.yPos_End = backward_icon_y_down; + icons.Backward.line.pxColor = 1; + icons.Backward.trig.xPos1 = backward_icon_x_rigth; + icons.Backward.trig.yPos1 = backward_icon_y_up; + icons.Backward.trig.xPos2 = backward_icon_x_rigth; + icons.Backward.trig.yPos2 = backward_icon_y_down; + icons.Backward.trig.xPos3 = backward_icon_x_left+1; + icons.Backward.trig.yPos3 = backward_icon_y_mid; + icons.Backward.trig.pxColor = 1; + + // backward pressed + icons.Backward.PressedArea.xPos_Start = backward_icon_x_left-selected_width; + icons.Backward.PressedArea.yPos_Start = backward_icon_y_up-selected_width; + icons.Backward.PressedArea.area_Width = backward_icon_x_rigth-(backward_icon_x_left)+2*selected_width+1; + icons.Backward.PressedArea.area_Height = backward_icon_y_down-backward_icon_y_up+2*selected_width+1; + + // loop + icons.Loop.xPos_Start = loop_icon_x_start; + icons.Loop.yPos_Start = loop_icon_y_start; + icons.Loop.icon_Width = loop_icon_width; + icons.Loop.icon_Height = loop_icon_height; + + // loop pressed + icons.Loop.PressedArea.xPos_Start = loop_icon_x_start+3; + icons.Loop.PressedArea.yPos_Start = loop_icon_y_start+3; + icons.Loop.PressedArea.area_Width = loop_icon_width-5; + icons.Loop.PressedArea.area_Height = loop_icon_height-5; +// иконка зацикливания + GFX_Draw_LoopIcon(oled_buf, loop_icon_x_start, loop_icon_y_start, loop_icon_width, loop_icon_height, 1); + +} diff --git a/Core/Example/gfx_oled_example.h b/Core/Example/gfx_oled_example.h index e3a7b62..6be1697 100644 --- a/Core/Example/gfx_oled_example.h +++ b/Core/Example/gfx_oled_example.h @@ -105,6 +105,8 @@ typedef struct }GFXIconsTypeDef; +void Example_GFX_Init(void); +void Example_GFX_PlotterInit(void); void Example_GFX_IconInit(void); void Example_GFX_CreateFrame(PlayerTypeDef *player); void Example_OLED_GFX_Update(PlayerTypeDef *player); diff --git a/Core/GFX_Lib/gfx_lib.c b/Core/GFX_Lib/gfx_lib.c index 855b446..583bff9 100644 --- a/Core/GFX_Lib/gfx_lib.c +++ b/Core/GFX_Lib/gfx_lib.c @@ -17,13 +17,35 @@ uint8_t chSpacing = 0; //межсимвольный интервал в px /* функция очистки буфера кадра */ -void GFX_Clean_Buffer_Frame(uint8_t *Buffer_Frame, uint32_t Buffer_Frame_Size) +void GFX_Clean_Buffer_Frame(uint8_t *Buffer_Frame) { if(Buffer_Frame == NULL) return; - memset(Buffer_Frame, 0x00, Buffer_Frame_Size); + memset(Buffer_Frame, 0x00, GFX_BufferHeight*GFX_BufferWidth/8); } +/* Функция очистки прямоугольной области */ +void GFX_Clean_Area(uint8_t *Buffer_Frame, uint16_t xPos_Start, uint16_t yPos_Start, uint16_t width, uint16_t height) +{ + if(Buffer_Frame == NULL) + return; + + if ((xPos_Start+width > GFX_BufferWidth)||(xPos_Start < 0)||(yPos_Start+ height> GFX_BufferHeight)||(yPos_Start < 0)) + { + //если значения по x и y больше пределов то выходим из функции + return; + } + for (uint16_t xPos = xPos_Start; xPos < xPos_Start + width; xPos++) + { + for(uint16_t yPos = yPos_Start; yPos < yPos_Start + height; yPos++) + { + uint16_t arrayPos = xPos + ((yPos/8)*GFX_BufferWidth); + Buffer_Frame[arrayPos] &= ~(1 << (yPos % 8)); // Очищаем бит, отвечающий за пиксель + } + } +} + + /* функция прорисовки пикселя */ void GFX_Draw_Pixel(uint8_t *Buffer_Frame, uint8_t xPos, uint8_t yPos, uint8_t pxColor) { @@ -377,6 +399,17 @@ void GFX_Draw_Triangle(uint8_t *Buffer_Frame, GFX_TriangleHandleTypeDef *hTriang __GFX_Draw_Line(Buffer_Frame, xPos2, yPos2, xPos3, yPos3, pxColor); __GFX_Draw_Line(Buffer_Frame, xPos3, yPos3, xPos1, yPos1, pxColor); } +/* функция рисования стрелки */ +void GFX_Draw_Arrow(uint8_t *Buffer_Frame, GFX_ArrowHandleTypeDef *hArrow) +{ + uint8_t xPos = hArrow->xPos; + uint8_t yPos = hArrow->yPos; + uint8_t size = hArrow->size; + uint16_t angle = hArrow->angle; + uint8_t pxColor = hArrow->pxColor; + + __GFX_Draw_Arrow(Buffer_Frame, xPos, yPos, size, angle, pxColor); +} /* Функция рисования дуги (четверти окружности) */ void GFX_Draw_Arc(uint8_t *Buffer_Frame, GFX_ArcHandleTypeDef *hArc) @@ -401,6 +434,116 @@ void GFX_Draw_Arc(uint8_t *Buffer_Frame, GFX_ArcHandleTypeDef *hArc) } } + +/* Функция вывода графика */ +void GFX_Draw_Plotter(uint8_t *Buffer_Frame, GFX_PlotterFloatHandleTypeDef *hPlot) +{ + if((Buffer_Frame == NULL) || (hPlot == NULL)) + return; + if((hPlot->plotHeight == NULL) || (hPlot->plotWidth == NULL)) + return; + if((hPlot->yPos + hPlot->plotHeight == NULL) || (hPlot->xPos + hPlot->plotWidth == NULL)) + return; + + if(hPlot->__initialized == 0) + { + hPlot->__initialized = 1; + hPlot->plotInd = 0; + GFX_Clean_Buffer_Frame(Buffer_Frame); + if(hPlot->plotXAxis) + { + __GFX_Draw_Line(Buffer_Frame, hPlot->xPos, hPlot->yPos+hPlot->plotHeight/2, hPlot->xPos+hPlot->plotWidth-1, hPlot->yPos+hPlot->plotHeight/2, 1); + __GFX_Draw_Arrow(Buffer_Frame, hPlot->xPos+hPlot->plotWidth-1, hPlot->yPos+hPlot->plotHeight/2, 2, 0, 1); + + } + if(hPlot->plotYAxis) + { + __GFX_Draw_Line(Buffer_Frame, hPlot->xPos, hPlot->yPos, hPlot->xPos, hPlot->yPos+hPlot->plotHeight-1, 1); + __GFX_Draw_Arrow(Buffer_Frame, hPlot->xPos, hPlot->yPos, 2, 90, 1); + } + if(hPlot->plotFrame) + { + __GFX_Draw_Rectangle(Buffer_Frame, hPlot->xPos, hPlot->yPos, hPlot->plotWidth-1, hPlot->plotHeight-1, 1); + } + } + + + /* Подготовка к выводу графика */ + if((hPlot->pixX < hPlot->xPos) || (hPlot->pixX >= hPlot->plotWidth)) + { + hPlot->pixX = hPlot->xPos; + GFX_Clean_Area(Buffer_Frame, hPlot->xPos, hPlot->yPos, hPlot->plotWidth, hPlot->plotHeight); + + if(hPlot->plotXAxis) + { + __GFX_Draw_Line(Buffer_Frame, hPlot->xPos, hPlot->yPos+hPlot->plotHeight/2, hPlot->xPos+hPlot->plotWidth-1, hPlot->yPos+hPlot->plotHeight/2, 1); + __GFX_Draw_Arrow(Buffer_Frame, hPlot->xPos+hPlot->plotWidth-1, hPlot->yPos+hPlot->plotHeight/2, 2, 0, 1); + + } + if(hPlot->plotYAxis) + { + __GFX_Draw_Line(Buffer_Frame, hPlot->xPos, hPlot->yPos, hPlot->xPos, hPlot->yPos+hPlot->plotHeight-1, 1); + __GFX_Draw_Arrow(Buffer_Frame, hPlot->xPos, hPlot->yPos, 2, 90, 1); + } + if(hPlot->plotFrame) + { + __GFX_Draw_Rectangle(Buffer_Frame, hPlot->xPos, hPlot->yPos, hPlot->plotWidth-1, hPlot->plotHeight-1, 1); + } + } + + + /* Расчет позиции пикселя */ + float pix_y_float = (hPlot->pDataPtr[(int)hPlot->plotInd]); + // масштабирование под размеры графика + hPlot->pixY = (pix_y_float/hPlot->dataMax)*(hPlot->plotHeight); + // если график должен быть знаковым, то уменьшаем машстаб еще в два раза + if(hPlot->signedData) + hPlot->pixY = (hPlot->pixY + hPlot->plotHeight)/2; + // инвертирование y потому что он считается сверху вниз + uint8_t plot_y_down = hPlot->yPos + hPlot->plotHeight; + hPlot->pixY = plot_y_down - hPlot->pixY; + // Сдвиг графика + hPlot->pixY += hPlot->plotShift; + + + /* Вывод пикселя позиции пикселя */ + // Передний фронт + if(hPlot->pixY - hPlot->prevPixY > 0) + { + /* Цикл для заполнения пикселей по вертикали, когда фронт очень резкий */ + for(int y = hPlot->prevPixY+1; y <= hPlot->pixY; y++) + { + if((y<=hPlot->yPos+hPlot->plotHeight) && (y>=hPlot->yPos)) + GFX_Draw_Pixel(Buffer_Frame, hPlot->pixX, y, 1); + } + }// Задний фронт + else if (hPlot->pixY - hPlot->prevPixY < 0) + { + /* Цикл для заполнения пикселей по вертикали, когда фронт очень резкий */ + for(int y = hPlot->prevPixY-1; y >= hPlot->pixY; y--) + { + if((y<=hPlot->yPos+hPlot->plotHeight) && (y>=hPlot->yPos)) + GFX_Draw_Pixel(Buffer_Frame, hPlot->pixX, y, 1); + } + }// Плато + else + { + if((hPlot->pixY<=hPlot->yPos+hPlot->plotHeight) && (hPlot->pixY>=hPlot->yPos)) + GFX_Draw_Pixel(Buffer_Frame, hPlot->pixX, hPlot->pixY, 1); + } + + /* Смещение графика далее */ + hPlot->pixX++; + hPlot->plotInd += hPlot->plotSpeed; + if(hPlot->plotInd >= hPlot->dataSize) + hPlot->plotInd -= hPlot->dataSize; + + if(hPlot->plotInd < 0) + hPlot->plotInd += hPlot->dataSize; + + hPlot->prevPixY = hPlot->pixY; +} + /* Функция инвертирования прямоугольной области */ void GFX_Invertion_Display(uint8_t *Buffer_Frame) { @@ -547,6 +690,66 @@ void __GFX_Draw_Triangle(uint8_t *Buffer_Frame, __GFX_Draw_Line(Buffer_Frame, xPos3, yPos3, xPos1, yPos1, pxColor); } +/* функция рисования стрелки */ +void __GFX_Draw_Arrow(uint8_t *Buffer_Frame, uint8_t xPos, uint8_t yPos, uint8_t size, uint16_t angle, uint8_t pxColor) +{ + int16_t x1, y1, x2, y2, x3, y3; + + if(angle == 0) // > + { + x1 = xPos; + y1 = yPos; + x2 = xPos - size; + y2 = yPos - size; + x3 = xPos - size; + y3 = yPos + size; + } + else if(angle == 180) // < + { + x1 = xPos; + y1 = yPos; + x2 = xPos + size; + y2 = yPos - size; + x3 = xPos + size; + y3 = yPos + size; + } + else if(angle == 270) // ^ + { + x1 = xPos; + y1 = yPos; + x2 = xPos - size; + y2 = yPos - size; + x3 = xPos + size; + y3 = yPos - size; + + } + else if(angle == 90) // v + { + x1 = xPos; + y1 = yPos; + x2 = xPos - size; + y2 = yPos + size; + x3 = xPos + size; + y3 = yPos + size; + + } + + if(x1 < 0) + x1 = 0; + if(x2 < 0) + x2 = 0; + if(x3 < 0) + x3 = 0; + if(y1 < 0) + y1 = 0; + if(y2 < 0) + y2 = 0; + if(y3 < 0) + y3 = 0; + + __GFX_Draw_Line(Buffer_Frame, x1, y1, x2, y2, pxColor); + __GFX_Draw_Line(Buffer_Frame, x1, y1, x3, y3, pxColor); +} /* Функция рисования дуги (четверти окружности) */ void __GFX_Draw_Arc(uint8_t *Buffer_Frame, uint8_t xPos, uint8_t yPos, uint8_t radius, uint16_t startAngle, uint16_t endAngle, uint8_t pxColor) { diff --git a/Core/GFX_Lib/gfx_lib.h b/Core/GFX_Lib/gfx_lib.h index f1d6f87..0fb1a1f 100644 --- a/Core/GFX_Lib/gfx_lib.h +++ b/Core/GFX_Lib/gfx_lib.h @@ -31,8 +31,6 @@ typedef struct uint8_t yPos_End; uint8_t pxColor; }GFX_LineHandleTypeDef; - - typedef struct { uint8_t xPos_Start; @@ -51,7 +49,6 @@ typedef struct uint8_t pxColor; uint8_t Filled; }GFX_CircleHandleTypeDef; - typedef struct { uint8_t xPos1; @@ -63,6 +60,17 @@ typedef struct uint8_t pxColor; uint8_t Filled; }GFX_TriangleHandleTypeDef; + +typedef struct +{ + uint8_t xPos; + uint8_t yPos; + uint8_t size; + uint16_t angle; + uint8_t pxColor; + uint8_t Filled; +}GFX_ArrowHandleTypeDef; + typedef struct { uint8_t xPos; @@ -74,10 +82,36 @@ typedef struct uint8_t Filled; }GFX_ArcHandleTypeDef; +typedef struct +{ + uint8_t xPos; + uint8_t yPos; + uint8_t plotHeight; + uint8_t plotWidth; + + float *pDataPtr; + uint32_t dataSize; + float dataMax; + + float plotSpeed; + float plotInd; + uint8_t plotShift; + uint8_t pixX; + int32_t pixY; + uint8_t prevPixY; + + unsigned signedData:1; + unsigned plotFrame:1; + unsigned plotXAxis:1; + unsigned plotYAxis:1; + unsigned __initialized:1; +}GFX_PlotterFloatHandleTypeDef; + /* прототипы функций */ -void GFX_Clean_Buffer_Frame(uint8_t *Buffer_Frame, uint32_t Buffer_Frame_Size); +void GFX_Clean_Buffer_Frame(uint8_t *Buffer_Frame); +void GFX_Clean_Area(uint8_t *Buffer_Frame, uint16_t xPos_Start, uint16_t yPos_Start, uint16_t width, uint16_t height); void GFX_Draw_Pixel(uint8_t *Buffer_Frame, uint8_t xPos, uint8_t yPos, uint8_t pxColor); void GFX_Invertion_Area(uint8_t *Buffer_Frame, uint16_t xPos_Start, uint16_t yPos_Start, uint16_t width, uint16_t height); void GFX_Invertion_Display(uint8_t *Buffer_Frame); @@ -90,7 +124,9 @@ void GFX_Draw_Line(uint8_t *Buffer_Frame, GFX_LineHandleTypeDef *hLine); void GFX_Draw_Rectangle(uint8_t *Buffer_Frame, GFX_RectangleHandleTypeDef *hRectangle); void GFX_Draw_Circle(uint8_t *Buffer_Frame, GFX_CircleHandleTypeDef *hCircle); void GFX_Draw_Triangle(uint8_t *Buffer_Frame, GFX_TriangleHandleTypeDef *hTriangle); +void GFX_Draw_Arrow(uint8_t *Buffer_Frame, GFX_ArrowHandleTypeDef *hArrow); void GFX_Draw_Arc(uint8_t *Buffer_Frame, GFX_ArcHandleTypeDef *hArc); +void GFX_Draw_Plotter(uint8_t *Buffer_Frame, GFX_PlotterFloatHandleTypeDef *hPlot); @@ -104,5 +140,6 @@ void __GFX_Draw_Triangle(uint8_t *Buffer_Frame, uint8_t xPos2, uint8_t yPos2, uint8_t xPos3, uint8_t yPos3, uint8_t pxColor); +void __GFX_Draw_Arrow(uint8_t *Buffer_Frame, uint8_t xPos, uint8_t yPos, uint8_t size, uint16_t angle, uint8_t pxColor); void __GFX_Draw_Arc(uint8_t *Buffer_Frame, uint8_t xPos, uint8_t yPos, uint8_t radius, uint16_t startAngle, uint16_t endAngle, uint8_t pxColor); #endif /* INC_PIXEL_GRAPHICS_H_ */ diff --git a/Core/Src/main.c b/Core/Src/main.c index 014972d..922de07 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -90,7 +90,7 @@ int main(void) MX_I2C1_Init(); /* USER CODE BEGIN 2 */ Menu_Control_Init(&player); - Example_GFX_IconInit(); + Example_GFX_Init(); /* USER CODE END 2 */ /* Infinite loop */ diff --git a/MDK-ARM/gfx_lcd.uvguix.I b/MDK-ARM/gfx_lcd.uvguix.I index 3613562..2d91afe 100644 --- a/MDK-ARM/gfx_lcd.uvguix.I +++ b/MDK-ARM/gfx_lcd.uvguix.I @@ -15,7 +15,7 @@ 38003 Registers - 122 100 + 122 78 346 @@ -70,7 +70,7 @@ 466 Source Browser 500 - 166 + 300 @@ -93,25 +93,25 @@ 2 3 - -32000 - -32000 + -1 + -1 -1 -1 - 879 - 500 - 1760 - 1616 + 44 + -71 + 1189 + 737 0 - 1268 - 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000B000000020000000100000047463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4578616D706C655C6766785F6F6C65645F6578616D706C652E6800000000126766785F6F6C65645F6578616D706C652E6800000000C5D4F200FFFFFFFF45463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C4D444B2D41524D5C737461727475705F73746D33326631303378622E730000000015737461727475705F73746D33326631303378622E7300000000FFDC7800FFFFFFFF37463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000BECEA100FFFFFFFF45463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4578616D706C655C6D656E755F696E746572666163652E6300000000106D656E755F696E746572666163652E6300000000F0A0A100FFFFFFFF43463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4578616D706C655C67656E6572616C5F6770696F2E63000000000E67656E6572616C5F6770696F2E6300000000BCA8E100FFFFFFFF3F463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4F4C45445F4472697665725C6F6C65642E6300000000066F6C65642E6300000000F7B88600FFFFFFFF3F463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4F4C45445F4472697665725C6F6C65642E6800000000066F6C65642E6800000000D9ADC200FFFFFFFF5D463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C447269766572735C53544D3332463178785F48414C5F4472697665725C5372635C73746D3332663178785F68616C5F6770696F2E63000000001473746D3332663178785F68616C5F6770696F2E6300000000A5C2D700FFFFFFFF47463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4578616D706C655C6766785F6F6C65645F6578616D706C652E6300000000126766785F6F6C65645F6578616D706C652E6300000000B3A6BE00FFFFFFFF43463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4578616D706C655C67656E6572616C5F6770696F2E68000000000E67656E6572616C5F6770696F2E6800000000EAD6A300FFFFFFFF3E463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4746585F4C69625C6766785F6C69622E6300000000096766785F6C69622E6300000000EAD6A300FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000000F010000660000009006000095020000 + 1502 + 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000E000000080000000100000047463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4578616D706C655C6766785F6F6C65645F6578616D706C652E6800000000126766785F6F6C65645F6578616D706C652E6800000000C5D4F200FFFFFFFF45463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C4D444B2D41524D5C737461727475705F73746D33326631303378622E730000000015737461727475705F73746D33326631303378622E7300000000FFDC7800FFFFFFFF37463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000BECEA100FFFFFFFF45463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4578616D706C655C6D656E755F696E746572666163652E6300000000106D656E755F696E746572666163652E6300000000F0A0A100FFFFFFFF43463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4578616D706C655C67656E6572616C5F6770696F2E63000000000E67656E6572616C5F6770696F2E6300000000BCA8E100FFFFFFFF3F463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4F4C45445F4472697665725C6F6C65642E6300000000066F6C65642E63000000009CC1B600FFFFFFFF3F463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4F4C45445F4472697665725C6F6C65642E6800000000066F6C65642E6800000000F7B88600FFFFFFFF5D463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C447269766572735C53544D3332463178785F48414C5F4472697665725C5372635C73746D3332663178785F68616C5F6770696F2E63000000001473746D3332663178785F68616C5F6770696F2E6300000000D9ADC200FFFFFFFF47463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4578616D706C655C6766785F6F6C65645F6578616D706C652E6300000000126766785F6F6C65645F6578616D706C652E6300000000A5C2D700FFFFFFFF43463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4578616D706C655C67656E6572616C5F6770696F2E68000000000E67656E6572616C5F6770696F2E6800000000B3A6BE00FFFFFFFF3E463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4746585F4C69625C6766785F6C69622E6300000000096766785F6C69622E6300000000EAD6A300FFFFFFFF3E463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4746585F4C69625C6766785F6C69622E6800000000096766785F6C69622E6800000000F6FA7D00FFFFFFFF28433A5C4B65696C5F76355C41524D5C41524D434C414E475C696E636C7564655C737464696E742E680000000008737464696E742E6800000000B5E99D00FFFFFFFF37463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C5372635C6770696F2E6300000000066770696F2E63000000005FC3CF00FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000000F010000660000009006000095020000 @@ -1710,11 +1710,11 @@ 0 16 - 0400000000000000D50300001C000000 + 0000000000000000D10300001C000000 16 - 0A0000000A0000006E0000006E000000 + E7FFFFFF3D000000B503000075000000 @@ -1747,7 +1747,7 @@ 476 0 8192 - 1 + 2 16 000000001C000000E701000038000000 @@ -1767,10 +1767,10 @@ 612 0 8192 - 2 + 1 16 - 00000000380000006F02000054000000 + 000000001C0000006F02000038000000 16 @@ -1805,8 +1805,8 @@ 59392 File - 2629 - 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000A6766785F627566666572960000000000000006000A6766785F62756666657204706C61790973746F705F6C696E650647726170685F085F5F47726170685F0F5F5F4746585F447261775F4C696E65000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 + 2916 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000D5F5F696E697469616C697A6564960000000000000012000D5F5F696E697469616C697A6564164746585F436C65616E5F4275666665725F4672616D65184746585F506C6F7474657248616E646C6554797065446566064865696774680E70726573735F6261636B776172640D70726573735F666F727761726419464F4E545F5441484F4D415F385F434841525F48454947485417464F4E545F5441484F4D415F385F464F4E545F545950450753616D706C65540E6D6963726F737465705F636E74310C47726170685F4865696768740F4C43445F4372656174654672616D650643535F73657414535049446973705F53656E645F436F6D6D616E640D666F6E745F7461686F6D615F38096E6F745F666F756E641544616C6C61735F57726974655573657242797465731344414C4C41535F555345525F425954455F3132000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 1423 @@ -3448,14 +3448,14 @@ 966 0 8192 - 0 + 1 16 0000000000000000D10300001C000000 16 - 0A0000000A0000006E0000006E000000 + 0A0000000A000000D803000042000000 @@ -3488,10 +3488,10 @@ 476 0 8192 - 1 + 0 16 - 000000001C000000E701000038000000 + 0000000000000000E70100001C000000 16 @@ -3546,8 +3546,8 @@ 59392 File - 2629 - 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000A6766785F627566666572960000000000000006000A6766785F62756666657204706C61790973746F705F6C696E650647726170685F085F5F47726170685F0F5F5F4746585F447261775F4C696E65000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000100150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 + 2916 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000D5F5F696E697469616C697A6564960000000000000012000D5F5F696E697469616C697A6564164746585F436C65616E5F4275666665725F4672616D65184746585F506C6F7474657248616E646C6554797065446566064865696774680E70726573735F6261636B776172640D70726573735F666F727761726419464F4E545F5441484F4D415F385F434841525F48454947485417464F4E545F5441484F4D415F385F464F4E545F545950450753616D706C65540E6D6963726F737465705F636E74310C47726170685F4865696768740F4C43445F4372656174654672616D650643535F73657414535049446973705F53656E645F436F6D6D616E640D666F6E745F7461686F6D615F38096E6F745F666F756E641544616C6C61735F57726974655573657242797465731344414C4C41535F555345525F425954455F3132000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000100150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 1423 @@ -3563,7 +3563,7 @@ Build 955 - 00200000000000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000000002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050FFFFFFFF00960000000000000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000000240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 + 00200000000000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0000000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000000002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050FFFFFFFF00960000000000000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000000240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 583 @@ -3579,7 +3579,7 @@ Debug 2362 - 00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000004002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000004002800000000000000000000000000000000010000000100000001801B80000000000400290000000000000000000000000000000001000000010000000180E57F0000000004002A00000000000000000000000000000000010000000100000001801C800000000004002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000004002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020001002D0000000000000000000000000000000001000000010000000180F07F0000020001002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020001002F0000000000000000000000000000000001000000010000000180BB8A00000200010030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000100310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F0100000200010032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000002000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000002000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + 00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000004002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020001002D0000000000000000000000000000000001000000010000000180F07F0000020001002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020001002F0000000000000000000000000000000001000000010000000180BB8A00000200010030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000100310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F0100000200010032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000002000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000002000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 898 @@ -3603,12 +3603,12 @@ 0 100 - 2 + 8 ..\Core\Example\gfx_oled_example.h - 17 - 5 - 6 + 28 + 61 + 109 1 0 @@ -3626,16 +3626,16 @@ ../Core/Src/main.c 0 55 - 78 + 66 1 0 ..\Core\Example\menu_interface.c - 24 - 60 - 81 + 5 + 14 + 3 1 0 @@ -3651,9 +3651,9 @@ ..\Core\OLED_Driver\oled.c - 37 - 13 - 32 + 0 + 16 + 46 1 0 @@ -3678,9 +3678,9 @@ ..\Core\Example\gfx_oled_example.c - 12 - 119 - 148 + 1 + 140 + 197 1 13 0 @@ -3696,9 +3696,36 @@ ..\Core\GFX_Lib\gfx_lib.c - 34 + 19 1 - 19 + 445 + 1 + 77,100,270,312,349,367,415,647 + 0 + + + ..\Core\GFX_Lib\gfx_lib.h + 5 + 93 + 133 + 1 + + 0 + + + C:\Keil_v5\ARM\ARMCLANG\include\stdint.h + 39 + 39 + 59 + 1 + + 0 + + + ../Core/Src/gpio.c + 0 + 1 + 1 1 0 diff --git a/MDK-ARM/gfx_lcd.uvoptx b/MDK-ARM/gfx_lcd.uvoptx index f3163be..fe439f7 100644 --- a/MDK-ARM/gfx_lcd.uvoptx +++ b/MDK-ARM/gfx_lcd.uvoptx @@ -163,7 +163,7 @@ 2 1 - sine_cnt_step + plotter,0x0A 3 @@ -205,6 +205,21 @@ 1 ecg_scale + + 11 + 1 + (pix_y_float/hPlot->dataMax)*(hPlot->plotHeight),0x0A + + + 12 + 1 + -4,0x0A + + + 13 + 1 + y,0x0A + 0 diff --git a/MDK-ARM/startup_stm32f103xb.s b/MDK-ARM/startup_stm32f103xb.s index fd82d4f..18a5578 100644 --- a/MDK-ARM/startup_stm32f103xb.s +++ b/MDK-ARM/startup_stm32f103xb.s @@ -129,7 +129,7 @@ Reset_Handler PROC EXPORT Reset_Handler [WEAK] IMPORT __main IMPORT SystemInit - LDR R0, =SystemInit +1 LDR R0, =SystemInit BLX R0 LDR R0, =__main BX R0 diff --git a/README.md b/README.md index 868de33..f84952f 100644 --- a/README.md +++ b/README.md @@ -5,5 +5,5 @@ Включает в себя: - библиотеку для рисования (Core\GFX_Lib) - библиотеку для I2C OLED дисплея (Core\OLED_Driver) -- библиотеку для SPI OLED дисплея (Core\LCD_Driver) (не сделано пока) +- библиотеку для SPI LCD дисплея (Core\LCD_Driver) (не сделано пока) - примеры использования (Core\Example) (не сделано пока) \ No newline at end of file