From bd5b1e0c9d238208f8b4b05aec260268826310e5 Mon Sep 17 00:00:00 2001 From: "Julianno F. C. Silva" Date: Mon, 27 Mar 2023 22:54:55 -0300 Subject: [PATCH 1/6] Including driver for GC9A01 based 1.28 LCD --- c/examples/EPD_Test.h | 3 +- c/examples/LCD_1in28_test.c | 242 ++++++++++++++++++ c/lib/LCD/LCD_1in28.c | 495 ++++++++++++++++++++++++++++++++++++ c/lib/LCD/LCD_1in28.h | 49 ++++ c/main.c | 8 +- 5 files changed, 792 insertions(+), 5 deletions(-) create mode 100644 c/examples/LCD_1in28_test.c create mode 100644 c/lib/LCD/LCD_1in28.c create mode 100644 c/lib/LCD/LCD_1in28.h diff --git a/c/examples/EPD_Test.h b/c/examples/EPD_Test.h index 67a188e..1b244c6 100644 --- a/c/examples/EPD_Test.h +++ b/c/examples/EPD_Test.h @@ -4,7 +4,7 @@ * | Function : test Demo * | Info : *---------------- -* | This version: V1.0 +* | This version: V1.0 * | Date : 2021-03-16 * | Info : # @@ -43,6 +43,7 @@ int OLED_2in23_test(void); int LCD_0in96_test(void); int LCD_1in14_test(void); +int LCD_1in28_test(void); int LCD_1in44_test(void); void LCD_1IN54_test(void); int LCD_1in8_test(void); diff --git a/c/examples/LCD_1in28_test.c b/c/examples/LCD_1in28_test.c new file mode 100644 index 0000000..4a942ed --- /dev/null +++ b/c/examples/LCD_1in28_test.c @@ -0,0 +1,242 @@ +/***************************************************************************** +* | File : LCD_1in28_test.c +* | Author : Waveshare team, Julianno F. C. Silva (@juliannojungle) +* | Function : 1.28inch LCD test demo +* | Info : +*---------------- +* | This version: V1.0 +* | Date : 2023-03-26 +* | Info : +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documnetation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +******************************************************************************/ +#include "EPD_Test.h" +#include "LCD_1in28.h" + +bool reserved_addr(uint8_t addr) { +return (addr & 0x78) == 0 || (addr & 0x78) == 0x78; +} + +int LCD_1in28_test(void) +{ + + DEV_Delay_ms(100); + printf("LCD_1in28_test Demo\r\n"); + if(DEV_Module_Init()!=0){ + return -1; + } + DEV_SET_PWM(50); + /* LCD Init */ + printf("1.28inch LCD demo...\r\n"); + LCD_1IN28_Init(HORIZONTAL); + LCD_1IN28_Clear(WHITE); + + //LCD_SetBacklight(1023); + UDOUBLE Imagesize = LCD_1IN28_HEIGHT*LCD_1IN28_WIDTH*2; + UWORD *BlackImage; + if((BlackImage = (UWORD *)malloc(Imagesize)) == NULL) { + printf("Failed to apply for black memory...\r\n"); + exit(0); + } + // /*1.Create a new image cache named IMAGE_RGB and fill it with white*/ + Paint_NewImage((UBYTE *)BlackImage,LCD_1IN28.WIDTH,LCD_1IN28.HEIGHT, 0, WHITE); + Paint_SetScale(65); + Paint_Clear(WHITE); + Paint_SetRotate(ROTATE_0); + Paint_Clear(WHITE); + + // /* GUI */ + printf("drawing...\r\n"); + // /*2.Drawing on the image*/ +#if 1 + Paint_DrawPoint(2,1, BLACK, DOT_PIXEL_1X1, DOT_FILL_RIGHTUP);//240 240 + Paint_DrawPoint(2,6, BLACK, DOT_PIXEL_2X2, DOT_FILL_RIGHTUP); + Paint_DrawPoint(2,11, BLACK, DOT_PIXEL_3X3, DOT_FILL_RIGHTUP); + Paint_DrawPoint(2,16, BLACK, DOT_PIXEL_4X4, DOT_FILL_RIGHTUP); + Paint_DrawPoint(2,21, BLACK, DOT_PIXEL_5X5, DOT_FILL_RIGHTUP); + Paint_DrawLine( 10, 5, 40, 35, MAGENTA, DOT_PIXEL_2X2, LINE_STYLE_SOLID); + Paint_DrawLine( 10, 35, 40, 5, MAGENTA, DOT_PIXEL_2X2, LINE_STYLE_SOLID); + + Paint_DrawLine( 80, 20, 110, 20, CYAN, DOT_PIXEL_1X1, LINE_STYLE_DOTTED); + Paint_DrawLine( 95, 5, 95, 35, CYAN, DOT_PIXEL_1X1, LINE_STYLE_DOTTED); + + Paint_DrawRectangle(10, 5, 40, 35, RED, DOT_PIXEL_2X2,DRAW_FILL_EMPTY); + Paint_DrawRectangle(45, 5, 75, 35, BLUE, DOT_PIXEL_2X2,DRAW_FILL_FULL); + + Paint_DrawCircle(95, 20, 15, GREEN, DOT_PIXEL_1X1, DRAW_FILL_EMPTY); + Paint_DrawCircle(130, 20, 15, GREEN, DOT_PIXEL_1X1, DRAW_FILL_FULL); + + Paint_DrawNum (50, 40 ,9.87654321, &Font20,3, WHITE, BLACK); + Paint_DrawString_EN(1, 40, "ABC", &Font20, 0x000f, 0xfff0); + Paint_DrawString_CN(1,60, "��ӭʹ��", &Font24CN, WHITE, BLUE); + Paint_DrawString_EN(1, 100, "WaveShare", &Font16, RED, WHITE); + + // /*3.Refresh the picture in RAM to LCD*/ + LCD_1IN28_Display(BlackImage); + DEV_Delay_ms(2000); + +#endif +#if 1 + Paint_DrawImage(gImage_1inch3_1,0,0,240,240); + LCD_1IN28_Display(BlackImage); + DEV_Delay_ms(2000); + +#endif +#if 1 + + uint8_t keyA = 15; + uint8_t keyB = 17; + uint8_t keyX = 19; + uint8_t keyY = 21; + + uint8_t up = 2; + uint8_t dowm = 18; + uint8_t left = 16; + uint8_t right = 20; + uint8_t ctrl = 3; + + + SET_Infrared_PIN(keyA); + SET_Infrared_PIN(keyB); + SET_Infrared_PIN(keyX); + SET_Infrared_PIN(keyY); + + SET_Infrared_PIN(up); + SET_Infrared_PIN(dowm); + SET_Infrared_PIN(left); + SET_Infrared_PIN(right); + SET_Infrared_PIN(ctrl); + + + Paint_Clear(WHITE); + Paint_DrawRectangle(208, 15, 237, 45, 0xF800, DOT_PIXEL_2X2,DRAW_FILL_EMPTY); + Paint_DrawRectangle(208, 75, 237, 105, 0xF800, DOT_PIXEL_2X2,DRAW_FILL_EMPTY); + Paint_DrawRectangle(208, 135, 237, 165, 0xF800, DOT_PIXEL_2X2,DRAW_FILL_EMPTY); + Paint_DrawRectangle(208, 195, 237, 225, 0xF800, DOT_PIXEL_2X2,DRAW_FILL_EMPTY); + Paint_DrawRectangle(60, 60, 91, 90, 0xF800, DOT_PIXEL_2X2,DRAW_FILL_EMPTY); + Paint_DrawRectangle(60, 150, 91, 180, 0xF800, DOT_PIXEL_2X2,DRAW_FILL_EMPTY); + Paint_DrawRectangle(15, 105, 46, 135, 0xF800, DOT_PIXEL_2X2,DRAW_FILL_EMPTY); + Paint_DrawRectangle(105, 105, 136, 135, 0xF800, DOT_PIXEL_2X2,DRAW_FILL_EMPTY); + Paint_DrawRectangle(60, 105, 91, 135, 0xF800, DOT_PIXEL_2X2,DRAW_FILL_EMPTY); + LCD_1IN28_Display(BlackImage); + + + while(1){ + if(DEV_Digital_Read(keyA ) == 0){ + Paint_DrawRectangle(208, 15, 236, 45, 0xF800, DOT_PIXEL_2X2,DRAW_FILL_FULL); + LCD_1IN28_DisplayWindows(208, 15, 236, 45,BlackImage); + printf("gpio =%d\r\n",keyA); + } + else{ + Paint_DrawRectangle(208, 15, 236, 45, WHITE, DOT_PIXEL_2X2,DRAW_FILL_FULL); + LCD_1IN28_DisplayWindows(208, 15, 236, 45,BlackImage); + } + + if(DEV_Digital_Read(keyB ) == 0){ + Paint_DrawRectangle(208, 75, 236, 105, 0xF800, DOT_PIXEL_2X2,DRAW_FILL_FULL); + LCD_1IN28_DisplayWindows(208, 75, 236, 105,BlackImage); + printf("gpio =%d\r\n",keyB); + } + else{ + Paint_DrawRectangle(208, 75, 236, 105, WHITE, DOT_PIXEL_2X2,DRAW_FILL_FULL); + LCD_1IN28_DisplayWindows(208, 75, 236, 105,BlackImage); + } + + if(DEV_Digital_Read(keyX ) == 0){ + Paint_DrawRectangle(208, 135, 236, 165, 0xF800, DOT_PIXEL_2X2,DRAW_FILL_FULL); + LCD_1IN28_DisplayWindows(208, 135, 236, 165,BlackImage); + printf("gpio =%d\r\n",keyX); + } + else{ + Paint_DrawRectangle(208, 135, 236, 165, WHITE, DOT_PIXEL_2X2,DRAW_FILL_FULL); + LCD_1IN28_DisplayWindows(208, 135, 236, 165,BlackImage); + } + + if(DEV_Digital_Read(keyY ) == 0){ + Paint_DrawRectangle(208, 195, 236, 225, 0xF800, DOT_PIXEL_2X2,DRAW_FILL_FULL); + LCD_1IN28_DisplayWindows(208, 195, 236, 225,BlackImage); + printf("gpio =%d\r\n",keyY); + } + else{ + Paint_DrawRectangle(208, 195, 236, 225, WHITE, DOT_PIXEL_2X2,DRAW_FILL_FULL); + LCD_1IN28_DisplayWindows(208, 195, 236, 225,BlackImage); + } + + + if(DEV_Digital_Read(up ) == 0){ + Paint_DrawRectangle(60, 60, 90, 90, 0xF800, DOT_PIXEL_2X2,DRAW_FILL_FULL); + LCD_1IN28_DisplayWindows(60, 60, 90, 90,BlackImage); + printf("gpio =%d\r\n",up); + } + else{ + Paint_DrawRectangle(60, 60, 90, 90, WHITE, DOT_PIXEL_2X2,DRAW_FILL_FULL); + LCD_1IN28_DisplayWindows(60, 60, 90, 90,BlackImage); + } + + if(DEV_Digital_Read(dowm ) == 0){ + Paint_DrawRectangle(60, 150, 90, 180, 0xF800, DOT_PIXEL_2X2,DRAW_FILL_FULL); + LCD_1IN28_DisplayWindows(60, 150, 90, 180,BlackImage); + printf("gpio =%d\r\n",dowm); + } + else{ + Paint_DrawRectangle(60, 150, 90, 180, WHITE, DOT_PIXEL_2X2,DRAW_FILL_FULL); + LCD_1IN28_DisplayWindows(60, 150, 90, 180,BlackImage); + } + + if(DEV_Digital_Read(left ) == 0){ + Paint_DrawRectangle(15, 105, 45, 135, 0xF800, DOT_PIXEL_2X2,DRAW_FILL_FULL); + LCD_1IN28_DisplayWindows(15, 105, 45, 135,BlackImage); + printf("gpio =%d\r\n",left); + } + else{ + Paint_DrawRectangle(15, 105, 45, 135, WHITE, DOT_PIXEL_2X2,DRAW_FILL_FULL); + LCD_1IN28_DisplayWindows(15, 105, 45, 135,BlackImage); + } + + if(DEV_Digital_Read(right ) == 0){ + Paint_DrawRectangle(105, 105, 135, 135, 0xF800, DOT_PIXEL_2X2,DRAW_FILL_FULL); + LCD_1IN28_DisplayWindows(105, 105, 135, 135,BlackImage); + printf("gpio =%d\r\n",right); + } + else{ + Paint_DrawRectangle(105, 105, 135, 135, WHITE, DOT_PIXEL_2X2,DRAW_FILL_FULL); + LCD_1IN28_DisplayWindows(105, 105, 135, 135,BlackImage); + } + + if(DEV_Digital_Read(ctrl ) == 0){ + Paint_DrawRectangle(60, 105, 90, 135, 0xF800, DOT_PIXEL_2X2,DRAW_FILL_FULL); + LCD_1IN28_DisplayWindows(60, 105, 90, 135,BlackImage); + printf("gpio =%d\r\n",ctrl); + } + else{ + Paint_DrawRectangle(60, 105, 90, 135, WHITE, DOT_PIXEL_2X2,DRAW_FILL_FULL); + LCD_1IN28_DisplayWindows(60, 105, 90, 135,BlackImage); + } + } + +#endif + + /* Module Exit */ + free(BlackImage); + BlackImage = NULL; + + DEV_Module_Exit(); + return 0; +} diff --git a/c/lib/LCD/LCD_1in28.c b/c/lib/LCD/LCD_1in28.c new file mode 100644 index 0000000..13f6889 --- /dev/null +++ b/c/lib/LCD/LCD_1in28.c @@ -0,0 +1,495 @@ +/***************************************************************************** +* | File : LCD_1in28.c +* | Author : Waveshare team, Julianno F. C. Silva (@juliannojungle) +* | Function : Hardware underlying interface +* | Info : +* Used to shield the underlying layers of each master +* and enhance portability +*---------------- +* | This version: V1.0 +* | Date : 2023-03-26 +* | Info : Basic version +* +******************************************************************************/ +#include "LCD_1in28.h" +#include "DEV_Config.h" + +#include //itoa() +#include + +LCD_1IN28_ATTRIBUTES LCD_1IN28; + +/****************************************************************************** +function : Hardware reset +parameter: +******************************************************************************/ +static void LCD_1IN28_Reset(void) +{ + DEV_Digital_Write(EPD_RST_PIN, 1); + DEV_Delay_ms(100); + DEV_Digital_Write(EPD_RST_PIN, 0); + DEV_Delay_ms(100); + DEV_Digital_Write(EPD_RST_PIN, 1); + DEV_Delay_ms(100); +} + +/****************************************************************************** +function : send command +parameter: + Reg : Command register +******************************************************************************/ +static void LCD_1IN28_SendCommand(UBYTE Reg) +{ + DEV_Digital_Write(EPD_DC_PIN, 0); + DEV_Digital_Write(EPD_CS_PIN, 0); + DEV_SPI_WriteByte(Reg); + DEV_Digital_Write(EPD_CS_PIN, 1); +} + +/****************************************************************************** +function : send data +parameter: + Data : Write data +******************************************************************************/ +static void LCD_1IN28_SendData_8Bit(UBYTE Data) +{ + DEV_Digital_Write(EPD_DC_PIN, 1); + DEV_Digital_Write(EPD_CS_PIN, 0); + DEV_SPI_WriteByte(Data); + DEV_Digital_Write(EPD_CS_PIN, 1); +} + +/****************************************************************************** +function : send data +parameter: + Data : Write data +******************************************************************************/ +static void LCD_1IN28_SendData_16Bit(UWORD Data) +{ + DEV_Digital_Write(EPD_DC_PIN, 1); + DEV_Digital_Write(EPD_CS_PIN, 0); + DEV_SPI_WriteByte((Data >> 8) & 0xFF); + DEV_SPI_WriteByte(Data & 0xFF); + DEV_Digital_Write(EPD_CS_PIN, 1); +} + +/****************************************************************************** +function : Initialize the lcd register +parameter: +******************************************************************************/ +static void LCD_1IN28_InitReg(void) +{ + LCD_1IN28_SendCommand(0x11); /* Sleep mode OFF */ + + DEV_Delay_ms(120); /* Delay 120ms */ + + LCD_1IN28_SendCommand(0xEF); /* Inter register enable 2 */ + + LCD_1IN28_SendCommand(0xEB); + LCD_1IN28_SendData_8Bit(0x14); + + /* BEGIN set inter_command HIGH */ + LCD_1IN28_SendCommand(0xFE); /* Inter register enable 1 */ + LCD_1IN28_SendCommand(0xEF); /* Inter register enable 2 */ + /* END set inter_command HIGH */ + + LCD_1IN28_SendCommand(0xEB); + LCD_1IN28_SendData_8Bit(0x14); + + LCD_1IN28_SendCommand(0x84); + LCD_1IN28_SendData_8Bit(0x40); + + LCD_1IN28_SendCommand(0x85); + LCD_1IN28_SendData_8Bit(0xFF); + + LCD_1IN28_SendCommand(0x86); + LCD_1IN28_SendData_8Bit(0xFF); + + LCD_1IN28_SendCommand(0x87); + LCD_1IN28_SendData_8Bit(0xFF); + + LCD_1IN28_SendCommand(0x88); + LCD_1IN28_SendData_8Bit(0x0A); + + LCD_1IN28_SendCommand(0x89); + LCD_1IN28_SendData_8Bit(0x21); + + LCD_1IN28_SendCommand(0x8A); + LCD_1IN28_SendData_8Bit(0x00); + + LCD_1IN28_SendCommand(0x8B); + LCD_1IN28_SendData_8Bit(0x80); + + LCD_1IN28_SendCommand(0x8C); + LCD_1IN28_SendData_8Bit(0x01); + + LCD_1IN28_SendCommand(0x8D); + LCD_1IN28_SendData_8Bit(0x01); + + LCD_1IN28_SendCommand(0x8E); + LCD_1IN28_SendData_8Bit(0xFF); + + LCD_1IN28_SendCommand(0x8F); + LCD_1IN28_SendData_8Bit(0xFF); + + /* Display function control */ + LCD_1IN28_SendCommand(0xB6); + LCD_1IN28_SendData_8Bit(0x00); + LCD_1IN28_SendData_8Bit(0x00); + /* END Display function control */ + + /* Memory access control - defined on LCD_1IN28_SetAttributes */ + // LCD_1IN28_SendCommand(0x36); + // LCD_1IN28_SendData_8Bit(0x48); + /* END Memory access control */ + + /* Pixel format */ + LCD_1IN28_SendCommand(0x3A); + LCD_1IN28_SendData_8Bit(0x05); + /* END Pixel format */ + + LCD_1IN28_SendCommand(0x90); + LCD_1IN28_SendData_8Bit(0x08); + LCD_1IN28_SendData_8Bit(0x08); + LCD_1IN28_SendData_8Bit(0x08); + LCD_1IN28_SendData_8Bit(0x08); + + LCD_1IN28_SendCommand(0xBD); + LCD_1IN28_SendData_8Bit(0x06); + + LCD_1IN28_SendCommand(0xBC); + LCD_1IN28_SendData_8Bit(0x00); + + LCD_1IN28_SendCommand(0xFF); + LCD_1IN28_SendData_8Bit(0x60); + LCD_1IN28_SendData_8Bit(0x01); + LCD_1IN28_SendData_8Bit(0x04); + + /* Voltage regulator 1a */ + LCD_1IN28_SendCommand(0xC3); + LCD_1IN28_SendData_8Bit(0x13); + /* END Voltage regulator 1a */ + + /* Voltage regulator 1b */ + LCD_1IN28_SendCommand(0xC4); + LCD_1IN28_SendData_8Bit(0x13); + /* END Voltage regulator 1b */ + + /* Voltage regulator 2a */ + LCD_1IN28_SendCommand(0xC9); + LCD_1IN28_SendData_8Bit(0x22); + /* END Voltage regulator 2a */ + + LCD_1IN28_SendCommand(0xBE); + LCD_1IN28_SendData_8Bit(0x11); + + LCD_1IN28_SendCommand(0xE1); + LCD_1IN28_SendData_8Bit(0x10); + LCD_1IN28_SendData_8Bit(0x0E); + + LCD_1IN28_SendCommand(0xDF); + LCD_1IN28_SendData_8Bit(0x21); + LCD_1IN28_SendData_8Bit(0x0c); + LCD_1IN28_SendData_8Bit(0x02); + + /* Set gamma1 */ + LCD_1IN28_SendCommand(0xF0); + LCD_1IN28_SendData_8Bit(0x45); + LCD_1IN28_SendData_8Bit(0x09); + LCD_1IN28_SendData_8Bit(0x08); + LCD_1IN28_SendData_8Bit(0x08); + LCD_1IN28_SendData_8Bit(0x26); + LCD_1IN28_SendData_8Bit(0x2A); + /* END Set gamma1 */ + + /* Set gamma2 */ + LCD_1IN28_SendCommand(0xF1); + LCD_1IN28_SendData_8Bit(0x43); + LCD_1IN28_SendData_8Bit(0x70); + LCD_1IN28_SendData_8Bit(0x72); + LCD_1IN28_SendData_8Bit(0x36); + LCD_1IN28_SendData_8Bit(0x37); + LCD_1IN28_SendData_8Bit(0x6F); + /* END Set gamma2 */ + + /* Set gamma3 */ + LCD_1IN28_SendCommand(0xF2); + LCD_1IN28_SendData_8Bit(0x45); + LCD_1IN28_SendData_8Bit(0x09); + LCD_1IN28_SendData_8Bit(0x08); + LCD_1IN28_SendData_8Bit(0x08); + LCD_1IN28_SendData_8Bit(0x26); + LCD_1IN28_SendData_8Bit(0x2A); + /* END Set gamma3 */ + + /* Set gamma4 */ + LCD_1IN28_SendCommand(0xF3); + LCD_1IN28_SendData_8Bit(0x43); + LCD_1IN28_SendData_8Bit(0x70); + LCD_1IN28_SendData_8Bit(0x72); + LCD_1IN28_SendData_8Bit(0x36); + LCD_1IN28_SendData_8Bit(0x37); + LCD_1IN28_SendData_8Bit(0x6F); + /* END Set gamma4 */ + + LCD_1IN28_SendCommand(0xED); + LCD_1IN28_SendData_8Bit(0x1B); + LCD_1IN28_SendData_8Bit(0x0B); + + LCD_1IN28_SendCommand(0xAE); + LCD_1IN28_SendData_8Bit(0x77); + + LCD_1IN28_SendCommand(0xCD); + LCD_1IN28_SendData_8Bit(0x63); + + LCD_1IN28_SendCommand(0x70); + LCD_1IN28_SendData_8Bit(0x07); + LCD_1IN28_SendData_8Bit(0x07); + LCD_1IN28_SendData_8Bit(0x04); + LCD_1IN28_SendData_8Bit(0x0E); + LCD_1IN28_SendData_8Bit(0x0F); + LCD_1IN28_SendData_8Bit(0x09); + LCD_1IN28_SendData_8Bit(0x07); + LCD_1IN28_SendData_8Bit(0x08); + LCD_1IN28_SendData_8Bit(0x03); + + /* Frame rate */ + LCD_1IN28_SendCommand(0xE8); + LCD_1IN28_SendData_8Bit(0x34); + /* END Frame rate */ + + LCD_1IN28_SendCommand(0x62); + LCD_1IN28_SendData_8Bit(0x18); + LCD_1IN28_SendData_8Bit(0x0D); + LCD_1IN28_SendData_8Bit(0x71); + LCD_1IN28_SendData_8Bit(0xED); + LCD_1IN28_SendData_8Bit(0x70); + LCD_1IN28_SendData_8Bit(0x70); + LCD_1IN28_SendData_8Bit(0x18); + LCD_1IN28_SendData_8Bit(0x0F); + LCD_1IN28_SendData_8Bit(0x71); + LCD_1IN28_SendData_8Bit(0xEF); + LCD_1IN28_SendData_8Bit(0x70); + LCD_1IN28_SendData_8Bit(0x70); + + LCD_1IN28_SendCommand(0x63); + LCD_1IN28_SendData_8Bit(0x18); + LCD_1IN28_SendData_8Bit(0x11); + LCD_1IN28_SendData_8Bit(0x71); + LCD_1IN28_SendData_8Bit(0xF1); + LCD_1IN28_SendData_8Bit(0x70); + LCD_1IN28_SendData_8Bit(0x70); + LCD_1IN28_SendData_8Bit(0x18); + LCD_1IN28_SendData_8Bit(0x13); + LCD_1IN28_SendData_8Bit(0x71); + LCD_1IN28_SendData_8Bit(0xF3); + LCD_1IN28_SendData_8Bit(0x70); + LCD_1IN28_SendData_8Bit(0x70); + + LCD_1IN28_SendCommand(0x64); + LCD_1IN28_SendData_8Bit(0x28); + LCD_1IN28_SendData_8Bit(0x29); + LCD_1IN28_SendData_8Bit(0xF1); + LCD_1IN28_SendData_8Bit(0x01); + LCD_1IN28_SendData_8Bit(0xF1); + LCD_1IN28_SendData_8Bit(0x00); + LCD_1IN28_SendData_8Bit(0x07); + + LCD_1IN28_SendCommand(0x66); + LCD_1IN28_SendData_8Bit(0x3C); + LCD_1IN28_SendData_8Bit(0x00); + LCD_1IN28_SendData_8Bit(0xCD); + LCD_1IN28_SendData_8Bit(0x67); + LCD_1IN28_SendData_8Bit(0x45); + LCD_1IN28_SendData_8Bit(0x45); + LCD_1IN28_SendData_8Bit(0x10); + LCD_1IN28_SendData_8Bit(0x00); + LCD_1IN28_SendData_8Bit(0x00); + LCD_1IN28_SendData_8Bit(0x00); + + LCD_1IN28_SendCommand(0x67); + LCD_1IN28_SendData_8Bit(0x00); + LCD_1IN28_SendData_8Bit(0x3C); + LCD_1IN28_SendData_8Bit(0x00); + LCD_1IN28_SendData_8Bit(0x00); + LCD_1IN28_SendData_8Bit(0x00); + LCD_1IN28_SendData_8Bit(0x01); + LCD_1IN28_SendData_8Bit(0x54); + LCD_1IN28_SendData_8Bit(0x10); + LCD_1IN28_SendData_8Bit(0x32); + LCD_1IN28_SendData_8Bit(0x98); + + LCD_1IN28_SendCommand(0x74); + LCD_1IN28_SendData_8Bit(0x10); + LCD_1IN28_SendData_8Bit(0x85); + LCD_1IN28_SendData_8Bit(0x80); + LCD_1IN28_SendData_8Bit(0x00); + LCD_1IN28_SendData_8Bit(0x00); + LCD_1IN28_SendData_8Bit(0x4E); + LCD_1IN28_SendData_8Bit(0x00); + + LCD_1IN28_SendCommand(0x98); + LCD_1IN28_SendData_8Bit(0x3e); + LCD_1IN28_SendData_8Bit(0x07); + + LCD_1IN28_SendCommand(0x35); /* Tearing effect ON */ + + LCD_1IN28_SendCommand(0x21); /* Display color inversion ON */ + + LCD_1IN28_SendCommand(0x11); /* Sleep mode OFF */ + + DEV_Delay_ms(12); /* Delay 12ms */ + + LCD_1IN28_SendCommand(0x29); /* Display ON */ + + DEV_Delay_ms(20); /* Delay 20ms */ +} + +/******************************************************************************** +function: Set the resolution and scanning method of the screen +parameter: + Scan_dir: Scan direction +********************************************************************************/ +static void LCD_1IN28_SetAttributes(UBYTE Scan_dir) +{ + //Get the screen scan direction + LCD_1IN28.SCAN_DIR = Scan_dir; + UBYTE MemoryAccessReg = 0x00; + + //Get GRAM and LCD width and height + if(Scan_dir == HORIZONTAL) { + LCD_1IN28.HEIGHT = LCD_1IN28_WIDTH; + LCD_1IN28.WIDTH = LCD_1IN28_HEIGHT; + MemoryAccessReg = 0x48; + } else { + LCD_1IN28.HEIGHT = LCD_1IN28_HEIGHT; + LCD_1IN28.WIDTH = LCD_1IN28_WIDTH; + MemoryAccessReg = 0x24; + } + + // Set the read / write scan direction of the frame memory + LCD_1IN28_SendCommand(0x36); //MX, MY, RGB mode + LCD_1IN28_SendData_8Bit(MemoryAccessReg); //0x08 set RGB +} + +/******************************************************************************** +function : Initialize the lcd +parameter: +********************************************************************************/ +void LCD_1IN28_Init(UBYTE Scan_dir) +{ + DEV_SET_PWM(90); + //Hardware reset + LCD_1IN28_Reset(); + + //Set the resolution and scanning method of the screen + LCD_1IN28_SetAttributes(Scan_dir); + + //Set the initialization register + LCD_1IN28_InitReg(); +} + +/******************************************************************************** +function: Sets the start position and size of the display area +parameter: + Xstart: X direction Start coordinates + Ystart: Y direction Start coordinates + Xend : X direction end coordinates + Yend : Y direction end coordinates +********************************************************************************/ +void LCD_1IN28_SetWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend) +{ + //set the X coordinates + LCD_1IN28_SendCommand(0x2A); + LCD_1IN28_SendData_8Bit(0x00); + LCD_1IN28_SendData_8Bit(Xstart); + LCD_1IN28_SendData_8Bit(0x00); + LCD_1IN28_SendData_8Bit(Xend-1); + + //set the Y coordinates + LCD_1IN28_SendCommand(0x2B); + LCD_1IN28_SendData_8Bit(0x00); + LCD_1IN28_SendData_8Bit(Ystart); + LCD_1IN28_SendData_8Bit(0x00); + LCD_1IN28_SendData_8Bit(Yend-1); + + LCD_1IN28_SendCommand(0X2C); + // printf("%d %d\r\n",x,y); +} + +/****************************************************************************** +function : Clear screen +parameter: +******************************************************************************/ +void LCD_1IN28_Clear(UWORD Color) +{ + UWORD j,i; + UWORD Image[LCD_1IN28.WIDTH*LCD_1IN28.HEIGHT]; + + Color = ((Color<<8)&0xff00)|(Color>>8); + + for (j = 0; j < LCD_1IN28.HEIGHT*LCD_1IN28.WIDTH; j++) { + Image[j] = Color; + } + + LCD_1IN28_SetWindows(0, 0, LCD_1IN28.WIDTH, LCD_1IN28.HEIGHT); + DEV_Digital_Write(EPD_DC_PIN, 1); + DEV_Digital_Write(EPD_CS_PIN, 0); + // printf("HEIGHT %d, WIDTH %d\r\n",LCD_1IN28.HEIGHT,LCD_1IN28.WIDTH); + + for (j = 0; j < LCD_1IN28.HEIGHT; j++) { + DEV_SPI_Write_nByte((uint8_t *)&Image[j*LCD_1IN28.WIDTH], LCD_1IN28.WIDTH*2); + } + + DEV_Digital_Write(EPD_CS_PIN, 1); +} + +/****************************************************************************** +function : Sends the image buffer in RAM to displays +parameter: +******************************************************************************/ +void LCD_1IN28_Display(UWORD *Image) +{ + UWORD j; + LCD_1IN28_SetWindows(0, 0, LCD_1IN28.WIDTH, LCD_1IN28.HEIGHT); + DEV_Digital_Write(EPD_DC_PIN, 1); + DEV_Digital_Write(EPD_CS_PIN, 0); + + for (j = 0; j < LCD_1IN28.HEIGHT; j++) { + DEV_SPI_Write_nByte((uint8_t *)&Image[j*LCD_1IN28.WIDTH], LCD_1IN28.WIDTH*2); + } + + DEV_Digital_Write(EPD_CS_PIN, 1); + LCD_1IN28_SendCommand(0x29); +} + +void LCD_1IN28_DisplayWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD *Image) +{ + // display + UDOUBLE Addr = 0; + UWORD j; + LCD_1IN28_SetWindows(Xstart, Ystart, Xend , Yend); + DEV_Digital_Write(EPD_DC_PIN, 1); + DEV_Digital_Write(EPD_CS_PIN, 0); + + for (j = Ystart; j < Yend - 1; j++) { + Addr = Xstart + j * LCD_1IN28.WIDTH ; + DEV_SPI_Write_nByte((uint8_t *)&Image[Addr], (Xend-Xstart)*2); + } + + DEV_Digital_Write(EPD_CS_PIN, 1); +} + +void LCD_1IN28_DisplayPoint(UWORD X, UWORD Y, UWORD Color) +{ + LCD_1IN28_SetWindows(X,Y,X,Y); + LCD_1IN28_SendData_16Bit(Color); +} + +void Handler_1IN28_LCD(int signo) +{ + //System Exit + printf("\r\nHandler:Program stop\r\n"); + DEV_Module_Exit(); + exit(0); +} diff --git a/c/lib/LCD/LCD_1in28.h b/c/lib/LCD/LCD_1in28.h new file mode 100644 index 0000000..027b76b --- /dev/null +++ b/c/lib/LCD/LCD_1in28.h @@ -0,0 +1,49 @@ +/***************************************************************************** +* | File : LCD_1in54.c +* | Author : Waveshare team, Julianno F. C. Silva (@juliannojungle) +* | Function : Hardware underlying interface +* | Info : +* Used to shield the underlying layers of each master +* and enhance portability +*---------------- +* | This version: V1.0 +* | Date : 2023-03-26 +* | Info : Basic version +* +******************************************************************************/ +#ifndef __LCD_1IN28_H +#define __LCD_1IN28_H + +#include "DEV_Config.h" +#include + +#include //itoa() +#include + +#define LCD_1IN28_HEIGHT 240 +#define LCD_1IN28_WIDTH 240 + +#define HORIZONTAL 0 +#define VERTICAL 1 + +#define LCD_1IN28_SetBacklight(Value); + +typedef struct{ + UWORD WIDTH; + UWORD HEIGHT; + UBYTE SCAN_DIR; +}LCD_1IN28_ATTRIBUTES; +extern LCD_1IN28_ATTRIBUTES LCD_1IN28; + +/******************************************************************************** +function: + Macro definition variable name +********************************************************************************/ +void LCD_1IN28_Init(UBYTE Scan_dir); +void LCD_1IN28_Clear(UWORD Color); +void LCD_1IN28_Display(UWORD *Image); +void LCD_1IN28_DisplayWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD *Image); +void LCD_1IN28_DisplayPoint(UWORD X, UWORD Y, UWORD Color); + +void Handler_1IN28_LCD(int signo); +#endif diff --git a/c/main.c b/c/main.c index a68644d..21af2e7 100644 --- a/c/main.c +++ b/c/main.c @@ -5,12 +5,12 @@ int main(void) //OLED //OLED_1in3_C_test(); //OLED_2in23_test(); - - + //LCD - //LCD_0in96_test(); + //LCD_0in96_test(); //LCD_1in14_test(); - //LCD_1in3_test(); + //LCD_1in28_test(); + //LCD_1in3_test(); //LCD_1in44_test(); //LCD_1in8_test(); LCD_2in_test(); From d371034242eb92b6b0b2c8da28392fb782d0d3a5 Mon Sep 17 00:00:00 2001 From: "Julianno F. C. Silva" Date: Tue, 28 Mar 2023 00:23:32 -0300 Subject: [PATCH 2/6] Fixing build --- c/examples/LCD_2in_test.c | 4 ++-- c/lib/LCD/LCD_2in.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/c/examples/LCD_2in_test.c b/c/examples/LCD_2in_test.c index 76a89ab..e76f8b6 100644 --- a/c/examples/LCD_2in_test.c +++ b/c/examples/LCD_2in_test.c @@ -28,7 +28,7 @@ # ******************************************************************************/ #include "EPD_Test.h" -#include "LCD_2IN.h" +#include "LCD_2in.h" bool reserved_addr(uint8_t addr) { return (addr & 0x78) == 0 || (addr & 0x78) == 0x78; @@ -88,7 +88,7 @@ int LCD_2in_test(void) Paint_DrawNum (50, 40 ,9.87654321, &Font20,5, WHITE, BLACK); Paint_DrawString_EN(1, 40, "ABC", &Font20, 0x000f, 0xfff0); - Paint_DrawString_CN(1,60, "»¶Ó­Ê¹ÓÃ", &Font24CN, WHITE, BLUE); + Paint_DrawString_CN(1,60, "��ӭʹ��", &Font24CN, WHITE, BLUE); Paint_DrawString_EN(1, 100, "WaveShare", &Font16, RED, WHITE); // /*3.Refresh the picture in RAM to LCD*/ diff --git a/c/lib/LCD/LCD_2in.c b/c/lib/LCD/LCD_2in.c index 99c0567..667c1ea 100644 --- a/c/lib/LCD/LCD_2in.c +++ b/c/lib/LCD/LCD_2in.c @@ -11,7 +11,7 @@ * | Info : Basic version * ******************************************************************************/ -#include "LCD_2IN.h" +#include "LCD_2in.h" #include "DEV_Config.h" #include //itoa() From b44769064e5036c8045c18dabf6965a1fa7ed872 Mon Sep 17 00:00:00 2001 From: "Julianno F. C. Silva" Date: Tue, 28 Mar 2023 00:25:04 -0300 Subject: [PATCH 3/6] Fixing test --- c/examples/LCD_1in28_test.c | 11 +++++++++-- c/uf2/LCD_1in28_test.uf2 | Bin 0 -> 367104 bytes 2 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 c/uf2/LCD_1in28_test.uf2 diff --git a/c/examples/LCD_1in28_test.c b/c/examples/LCD_1in28_test.c index 4a942ed..d11cf47 100644 --- a/c/examples/LCD_1in28_test.c +++ b/c/examples/LCD_1in28_test.c @@ -36,18 +36,25 @@ return (addr & 0x78) == 0 || (addr & 0x78) == 0x78; int LCD_1in28_test(void) { - DEV_Delay_ms(100); printf("LCD_1in28_test Demo\r\n"); - if(DEV_Module_Init()!=0){ + + if (DEV_Module_Init() != 0) { return -1; } + DEV_SET_PWM(50); /* LCD Init */ printf("1.28inch LCD demo...\r\n"); LCD_1IN28_Init(HORIZONTAL); LCD_1IN28_Clear(WHITE); + /* Turn backlight on */ + EPD_BL_PIN = 25; + DEV_GPIO_Mode(EPD_BL_PIN, GPIO_OUT); + DEV_Digital_Write(EPD_CS_PIN, 1); + DEV_Digital_Write(EPD_DC_PIN, 0); + DEV_Digital_Write(EPD_BL_PIN, 1); //LCD_SetBacklight(1023); UDOUBLE Imagesize = LCD_1IN28_HEIGHT*LCD_1IN28_WIDTH*2; UWORD *BlackImage; diff --git a/c/uf2/LCD_1in28_test.uf2 b/c/uf2/LCD_1in28_test.uf2 new file mode 100644 index 0000000000000000000000000000000000000000..debdd531ae326cc3aec3bead7d971660710c0bbe GIT binary patch literal 367104 zcmd?Sd2|$2+CTnO?`zUoAiac8-5nqs5J*5ED3z{INxBijrjUSk5`+d98X28NMs0x^ zS)3V?MorSV0pp-JuQ3wenO8H$WgHR5sZL-f5SI=}+GW%pQL~c%KDR3g?Zof$$M2lq zIiYeYRekH$t*ZNZw)@%P5z{qb7n7PR@nLiq%0Gb0Oqw$W2vcxik9^y-t}~}jKp4&V`6FY@D=Jc z$N(OS6HAgx6;AQH-ph);iehnd{T2yL*#>wD|Mv#OEuv=qM*YS}&$ki%UHZF3EdU}0 zzfKPz2N2&1W(&Y~_}fCm)A-#w#a9r->!aJxnwH)-`ePiP2Klw7u?_YKkR>vxpoTAPvic#|DSjG^VPp^E=#?-dGP0Nzudd6q*A5YUs6mSpcfgtVk9o>T%Z$e0<>9vg?SkABh^{IM>$`Wz-NFNjf4D%jO?kSoI^q(eyZnYS6U1^}Z`6d7vtSCG2vUBAhTR}(8f0Zg0 zy*qrq%5vlh9?zwi{_$Ex87vKHqIY46w!_8*8#u8qE>uc|W3SY2`@$xDqYdon-Xq7R&&EH(sJ$&~oaZB@DkUhx1e)-nl zo>siAmrpsyy}gdIYMB!ZvKC{tDFRiTl}&P!9J$ViFYEU9wjgPRmt4uAfbVVofGg%6 z;k=~0y?4K2zA?uIIYN02ww#VL3b|RjUS^=u6PQPs9NT1GZr;bq<|~6|6eN8K7Z1tI z@0o=#)0V(fvwgO2+bEi`k*9$r&S7-!#d0AdzEktsL9U+bZOLJEknjFF6wP7Hj$S8s zRCAF1FJ4hcg(HKl9CS5mdRFeNu=jD5pg555MEDD1Ddk#W*}3-i|t8H zvb&4P|ACPA0?Lps2zqfRd8p_$q%}-eICQywmlxhz1KDz3hI+?uoM~yWF@>#7?qZ+^ zLzoZkwHNUDqT#%)Yw!xDxtq0sl=Z8-Ux~LTjZ&&Mnrjc3)~fA3)Co`6D4q)Y2jvdG zYtnLpxIjN5q@Q0Q{kU7w2|bMCZ4CZ00e@Kx{-i#M4Hs^{nOn*&=04_v&HK3BjZ#P< zb-e%XSJubWG0^1>{Y`!jGVbUs=Zav>(scbX$TQS&{vEnGN$%B-=fUryYW-^tbAHpz z?2Hb|Qpwe@r+2(+Q*>+zt^~i{50~{H?P#$rKW6}$W&cf(b@{w{lAkMH%5v*CNrA~^ zk}h6Sp|!FHynDA5a{IU0Ih*4*UbXY@+x9z6LB?@-u`OWZ7CA)uN!}YAa}AP$Crxvu z^BnhT)7S#XOn?L3R3Jx}FV0Ry%+NJUhZjEoin(j zW1EboZ>rn&^o|EJ(mRgr4I4K|(kE^4(pL9zYgnsqW=jGkMJnr z;cmju;Yb8}BatxLhth|rbO|eHb8`&0PIgFPvi&RLorPQQ&C+h%2QRu-G(EWH_qJ5@ zJgvQ{29Jr+qlHh49%()ckK*(in~qO%7(7PzL)!$6uSS|88b91}!lhlZuI!r-q*sE{ zun+0?n!;Zt;IE3oKVq)mrYx=ZUJ6m^--Sf!-wxwRa3pe-$XZnHc!k%2g9CNGP z4{Wz_4ld(<2tPR>Nt5v_vA)HDS&-p^@Wm@}sQu6JsqTM9>E^0k2G(HnfkuUIqhlAG zSp!x-r#uMZNdr|b8N`#e#xL)FN?C-?5xL^OC1MRS*_d$)&{ORN}J`J(fLcHP4b3{0A#!qQ2)r%Rrs$d z{Ivr9+8F!`Ilaii=~=$`r*VLp%R2L*fEDr9&5-R3SY79LLYACg4*T^6*CSjhS5+il zu-x5%sZ;>lTifm2`Rxv_%S9Euw~m_q-l_`DTKQu%c87k97SIjcvmx~NAwrL1Z;_LO z@Dqaq(gaVI^Sc_5>pNX_+(nn8h$=976h4zk%vvjf-WMWo*2K#ir)K zsiDl`no>?wQ^*lpmIkPa^qd^}?+}Em`)5M|Bsfh3yjR z{SQ%Y6IqY@gSzJACDrI#k?<;WB5Lr=Azh0V66`uNja=>;5Tg~B*H8Y(;kl+1!YleC zJ+};~P~VEJ)_ZuXNoI06i>mLDqes{2{Lpzm^c~t1L^phoc1R`4A_ny{c_x&&i^(0 zclijs0yWQwMTTr?lcioPfGYd86tWnMR7;4VOQO&s>b%Dlx`}TEF96=aGobH2oHO`FNR0Z%%A?kyTu0+#`La3#Dkge(z`y03l zlmJzI>G~TB;SlxcHHE)Uz#lv8M(sbC{@r=XDp^ut10Qwh>k!aQQN2xMfVBW`A1+C`6%B6 z$87XsCzljp`{Lap$oQo5n!-Opz#r@TD*o0w?lmsKp0I4^mcxrB9e>*L8{3(4hZna6 z5{B)4^{9tEDazS}oFQuO)309&LDrx7KqwR26(h187%Ag!Mh|nivA5qsumo!^fVmdL z;jUgVY(|?+)EVhH5OKHQIF3@r)=TIOX$^e=yQQFkJ&lkZ&+8mOuif&9P2Az%Lgk*Y zQSFjOcgqH2W!fW!!KU7jaw)-6>A=2hUoNN-Pv;PocJU+n^;|r+L_S7+M&57cb)HxD%l_Dx+=_$LbZC&u7!USb`^m$Dk*Atvp{$*{Tld2Z5;na)W! z&hWgz&4Ir#Gns7L1hn)GH{QBsH>_X#qD|kPV*d^6UsJ_RjP?V9#Uk{}Wy`Q9UJ@j2 z!)ei!)M4LpxJ85BxWi~MCb^QLZFI0&qdC3`WstrY#A~5j%FIIFfQ0OmfaVuT8C^34 zB0K4K`mf$-U-O?qmxI^EjkB?QmC8d#`IsFj5 z|C`=RQG7o~`7_TcWeBbW<8bpb?jOjHt<7@CT~fJ43(sz;-0~b^c>sHhq&!7mrJN>P z&pE;Nn^r=h|3L6SP*c)NTbM^UrH5V;2Q%2c+`pUlV^2>Rr*O}olvc72ZmU);{}ZUo z%v(?n*bIE-7Def@ry_NKUAQ}HnHQ)#gkCtPNpYSt*@r6 za^_V=XHT1#%yEGH+(m1{v zOoqEbTu^H`trstN(!E!|e;s5c2PE!Xhzo89zo81RCPuFw9==L^7&12v?iK|MhRWUJ z7JU4$G5Ajq@ShNaKdGx;#4fjaw-c=IH?iBPJjr&ObNBYQx1;WMQ8}`6wp1#wvnk0f zo_!ccb4JXWj04u{!OG~x^H_Ioi!k0phPvC^44HENMi9I1)Qhh#H{9%jnUVkvBjYr7 zz$t@x{$7qPTI<=z;doH@a`$%E0x*LYTN`)l6pA_jrq zZNIdgjFtrJO81X@ith&E{n@9tdk%77vAb)yayJFDu}M#CFqXsC8jkL$0JDq5_Q7d= zxd*Z)V&6US$3%J(B4!umM?A9MM91NeS$2omRk|caqG}- z?ypzx=azX01qt-Gd}uz_#Q5FD$bY?nKOy=N{r^z3mYy6!Pid5ciidV_L6o6xY==W; z4$tm9V4J~9T_r%IeTIG)ah>1aljr_2L|F`&<5)EPJA8I8K3hhk_6fh&2N{d` zY)4M%MSZz#Wue#7CO*Vf*piqGdv#HgGXrf>J?wWKWCsEkhu19Rvf3-46icXI0paKR zGNBbmCN>Yfr8EbaX_RFuc&AiV9jyXu&fGsx;}`v((EkPje?tuZbJ%RBjE3-|ee=PK z_4Le;(|TdcO6IQNv9@`v(W!G-t93Z4Qd@9zLvKqQ8C`b{tlDK-dq?O&i;kgk8O2kS z5fFiXSuV%dERNPEU#>+JYQ+7I%qGi5;x|y{C3IHo6x7zM_GP@R%i7cRQ6y%YXih|Ls} z;FOpfTnV;8-fQuiYw?xyJTN4ZmMxuc}oL79zC5%^pNydyXz z$u%iDep}2=awfX$SYiTWz*$C>b|Ht?>NWc*F_wuQCi8knDJ*wZSFVd92OVqiIpvNn z#O&sncRqDx_?;~)u!SLv56?!L#j-4ZDw|ED@Z55PV+Giq7b_j3@8`9YI?P+HG5k#e z{-zlGxtO{7|NFYcdaVG5GtV%-2%(n35kYq!f+;c*q#lM|0l zJl=uFJMdV7#}YhJ*rP|rVw3tMx>`f0z$9#?Q(@7SLJDWxP-~5+K&jtH&BL_bL0Ln# zBvG8iT5#luxzk`jqF-*a7kbU5)Fa#qn~IrGT2-WSPADaN3jEsjB5Lzivt`mgDuFdy zraGT?s+{EB!SffL3iK27wk)!kT`H!@))6@3N|YvQciGwlUz;zuPKi`ZgY9pDuR_3F zd3{9x5MAW8itK(6v+Y&r2lNu3VlsFwrfX~b?<4{LNiq1hNm2f17P@^su;K182-n( zc7PU78h-Hz|1%bg!?MJBW5cHMO~y^eBMpBlf{A7*)4r?5}Y*!=zKn$fvB|O_-*tNNqI%-Tlxbwc?X$m zA}f*LFP-xMdWb3PSN=ZqHj(={ACb&6)HO$Xx+1My{7Gn5l2rFZ zYVaB3b{m8LWC8!l_{AgmQ{mYI;u2AK^&mx)xqRu^w~~)L_PJnx%cqffcushajOQbx z`4*#3WiqJzQt)$He;m|swVYqB52*c`2A?gtEeX^Of8_i|M-iFDB}2Vn0hXik=OdJj z$b~(D=dnNO1}Ns#h{8O+p(qu2ZY5_lRdCco{rXurGUs?PLc(G@rrT+5%dsoN&! zRCQdIf|WpmEnCtZIAa&8X9`*rA3{6#R{FT&%mgSl2s1C^fScAy_;8qWF9 zG$gI2@-_Y{4t(OrSx)pAbtuxaC?aXR+8gw$tojU{^DkcGHyWsX56)Gib1w0@7LDIz zFuJLHI_G1al=siTPWhZO1@eEMrH9LHLvOC&l$n(O&vDav<=_P<(?fi{?dHQ}|Rk5qedoJ>wZh{aA>`91n-q zjABawU%31RAn)`9}MBFha&uh(S=maAZSDVpbv{3<>b*gU(r}SG{;Lim!{A7fVNeXBFs|)=|zNvl#X#Mpz z_^`3-T_c+|b>w~)$B9nKsMY$W`62y;4bH7IiLhj$+$5aidAsfQ!U|g|qm63x5>8o9 z#{5uW_25ICvgYdBZNRsa@?IKbdoWLBk+LSE!R}B!nZ#gKjN5ID{I?4DTk(rW^uL{x zVEwD>MLwlpe29#b%LN?Q*RU7I;6BrbKH%wh^BH~%)X64WTT|-TLau_lEw`~)>)(`m zKIO2!Gro?yJq^ccPg%vFR+yf|tDZl^O}5fdU8FKob8azE;h*>A&YFc@VEi54);ASL z=qYD>-XXQhd=5^EqdO%&Rh}3}`7Qv}lj^5LzQhyYn~!gi3)G{Lo~)rbKfXuy43s(3 z8vbH@-j;c8Aw0y@aVcn7n4#Q2(`Y-)X)J!x_Cv=Kv<0TsRU4^191o7NN!3N=CmVD~ zb2j|aY51jL{9aX^$cJMS$*90_yp6#>UBEv*27iJz@sCQ-WH$Y1L}n`&iG1@Q?vY4O zByz7q`NUz)1&r2NM1{W?*lz!sg9_g>e6$Z_i?`cNY9mX=@^5n_KndDn%15bi{=ioI zR?O)f5aB4TT$qpCnKwX%y9Tresqi}ko9$a1WJC@XUN!(07v@aIt8D`t?K0TtAfx-J zux&tscWNR2F)I9rfhv0y=9(8RPq;3Mo|7k2;hcfl(Gj2p!_T_X4;J0QgqoX%%NoMp ztMLAR_mlUb$1(apVgF4L@ShTcKdImEuujUbPC~Nzs2F{(H>T zw&=O8E}@jTSd zyz7-{u6L$r>+_&`)~{`UD9ot8(A35e2=?<#XH&ntFxR-q zyJtor>5C^bvq`)0@y2?Ne$xDu#lIV+w;U~x0vszK$b|oj;`l}vWg)-ci&`1`qG>_2 zJV@F*(X>aSX|JH=LDJqt3V0-%Qa7CPXH2;>n)2JIbt06$A)3+{B-Tc{zd}l#k>R*k z#fih$mi<3Xz<*i{{wWqn&$Slfm`q8K%Ey-1d^(5Xm6^RAdr|)qY5hn)%bkbka6YbI zPv%}JYLz}Jyg4cXgdA`7DH@c1D*Sby>Y%!Y3P0Yz3oXJ`(HyEeHS+#TeK@1fAzaNT zSOi)zBFJIxLQxs!Tolczs3THh0$#-#h&Y3bn!{oXZZoeqkuvo#r+9Q@(P}Ok@2aq| zXjx>Sy$WG_gv!sIb)8|pI|Ho?2-_mc>CkaD$a5&Nay|=)t?3O(426;by5dgMq18_v z68o%v5n3B*!F2zcYYYDj0so8`{3Tc$@EG+tvA;A8BA>k8!9{vL8%+6;Er2{Dk2@o_ zY;mO5Q?=q6YrUujd~0wPpr%1yAL(%qbcZCCYR5Mr!qKQ!(bBsPM~xBdrTc|i zmslxZg`+E!fpqn5-&Kpi+_wVfcM2N(H+=*t)D;1N$Cn^SH{dt`QQ%8CoTcW_IkR~M z+L$TU48g|CPcz_rv7y{q88FLDsNnG-Y1)@D*w+M!@4_1*t%L&fFxWWaVeo{&qN>BH z7`NLP`JXA^k25Al?SFMW(cP=Ce$fpVBJ*`NVU!2LnTtZB+{0IekV=q?Zi&{RIFR0; z$xE`~oIpQSU_}Z#Z2Maqk)|n@Tx(U)B zII|!`52G+AbTg-Tg3h@PXC395861nGz=%&Tt)jD7zMVB0OnS)vAwVc%21=<_sRvd) zfIbER!4z!gN9|LzQ*Zm*-wJVmgTXj)L`M~&-?9YvRk(NJ6Fa(n!{5-~O-gGR{hcA^j8$rV=SOLPE-Kq!`$7eI?qH916|PBq{|j}{ArmV z2G%^qi6OT@nY|E4qo{mYSo${9@JJ~c#k?3?m^U$da>t9<@7IobDJwPGz@86PbL9As z5PGHYcunD-E#OZky^gg1+mPo;J$w*yM33)<+@3qICSSjRk@mpAQgg*H1#5C;_Ol&N z4A&&N;`Weh;SkQxgg-*7ftrimIr=+(6(K^$oo#pAyNUaQ;FiRBT* z?oL%^L&u|C1hHqkCc^R1Gu-oB4zw>8cM$zvQG~PfaQt2=2ejgeG;JX_#fl6APUl18eRjoYFT1bm zfGK#LntMI$>~7@>QBS>#V*%Eoet8=Af8kE3s-8sts3jEjcreL>Z8t>q<%=Se80D!- ze=Vm6)l=%)vLaD%w+#ZDyUIQ21vCd`;BV!Dyx8ar8Tt%n}k>U*~QekaSJ|v z*ckk02>8#4!Jp;SK9SW3Dn?tY##-CcGMQ@_t{${SigzaU26PJaq z`*j?~?g(087OYO~C}z1e>xpJx)RhH~W_2vwhiYVLF)L* zsPGr#T>eIml(GQb`_y%$CznUxZ4cg=4;;5F*yf-yz5{6k605ZP5~OeIW;q$6TZcM^ zn$3XMFwujW1ajx0{?E94E*I*!iJ*F1j2thTD>;3TYhxL%Ek(z8Q3~aHdM=I7i}51r z{eq1lokal$*#vB?jNfex{xb#qXU5>KV|SsawiKoEx7{l_nNMLAB(ly*B(lgi@dQ;1 zK0&T3>LNYWy;4BVpR4pedx^G+P@5KKNl?3+C<809*0GB-r~qv>u>WszI=_#|>4z@q ztQwzYST_@WRM0)Qo0Rf!w+OGOYt;1{GQP$!1{EmOGrRv&FMSY<)l0y4b_rT(QkUAV ztT)NvO#KDLDN|ENicxQ4YMYcbwcPpmM3f}T!1zV~C-^^Cz&|$zf3H<%QP+2ZnyEqU zOk`^!>itSJ|8$cw^Q&{(2I3L!Z2BUk^xqnlA}asOC;_H|;&2vvmuJD# zC_$(>M27qjScwuq<-3J@mHVW-6?K0jTA8A`*I#P23TN{!p(O7XC?z@1$m*=>TET)j ze(8xzM1I`Fz1gj5pt7K2#)aF{p3*D)jTj-ANSiDoZRQYZ^KNm=sIdW?9hKhY-JxzG3y8%=%|65(E~?^gbt!9&u7MPtFTqFp5X7*OiSwyp zCll{G#Kkql`x7z3LtJgVZy>&kOGG)efNkKe=daQwSUQ{Ho>LV(f}?@7XhBY%jdRK$ zo$%O=T-=lKPd$UT=kySf@R1(fU<9c^bUFds5=!5WIYpDayE+ON>e`3A{uo zcB^4g03lrP|)AA`T3odpb@=d@3#v3*C{ui*neG_`kg=u~}o^^T3tF=z9`L^FjYf z)MXELC;OLhagW76{v7r~UQ_%(N5Fqh4E__IOnRce`&q1)q3$IAQmm2ZP#Pyb5$Snx zKyga2n3XjfFM(C&cB0aSOGa-0M?NfKl3N*eMmjENSi81D$=pc^TEJ*^p zP4pc03-wDe-s?FWcc^P7qqmb?dm14JJ^U7^k(I2liJyDAn4%?(I*d7<+y``Dh_w4p zVScJaVx}DWVmcmw<9jDtNfa3UUP+#5FB#7_arn1r_;advy{)>=gs zN3~_3Jr{1~mge7e&s{&?I(I9C>E1(}%|7z1V@eE5dq;D&K&CYS+4=yWC-OB;yKLUZ z`!-@z(kjs6eOu>k-NfO{Eudglt&-K^L6b1|nPDHE*~rjMCVnAZ&(xQ*;Clbe&wk>ycv zjycY>8lat;b;KrX18Y<|4bw=XiORj){_oH=h5vj3f3)mJ@mEfJ&@{ws;Eptr8ih7$ zzD094o1{sU>@wCDs)5vH(sdN{VO@Hob&0Ek1&-KMZMaTIE~(o@Q$NnO>%}yPN$bHV zEU6k?S171C2~$#4l7LAxF)oiKRFkU4U)02S{Dri07=Pgq6#PXf=tH$AP^+&fq~@f; z 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

|*4|34+- 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 Date: Tue, 28 Mar 2023 08:53:01 -0300 Subject: [PATCH 4/6] Fixing header info. --- c/lib/LCD/LCD_1in28.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/c/lib/LCD/LCD_1in28.h b/c/lib/LCD/LCD_1in28.h index 027b76b..b11d0fe 100644 --- a/c/lib/LCD/LCD_1in28.h +++ b/c/lib/LCD/LCD_1in28.h @@ -1,5 +1,5 @@ /***************************************************************************** -* | File : LCD_1in54.c +* | File : LCD_1in28.c * | Author : Waveshare team, Julianno F. C. Silva (@juliannojungle) * | Function : Hardware underlying interface * | Info : From adc1cde37361e61a25bda1eed4f65fd827f7e5f4 Mon Sep 17 00:00:00 2001 From: "Julianno F. C. Silva" Date: Tue, 28 Mar 2023 08:55:53 -0300 Subject: [PATCH 5/6] Fixing header info. --- c/lib/LCD/LCD_1in28.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/c/lib/LCD/LCD_1in28.h b/c/lib/LCD/LCD_1in28.h index b11d0fe..bd63772 100644 --- a/c/lib/LCD/LCD_1in28.h +++ b/c/lib/LCD/LCD_1in28.h @@ -1,5 +1,5 @@ /***************************************************************************** -* | File : LCD_1in28.c +* | File : LCD_1in28.h * | Author : Waveshare team, Julianno F. C. Silva (@juliannojungle) * | Function : Hardware underlying interface * | Info : From 1bb94e0dee6fba994f4c482d6532df84cb16fccf Mon Sep 17 00:00:00 2001 From: Julianno Francisco do Canto Silva Date: Thu, 27 Apr 2023 21:44:17 -0300 Subject: [PATCH 6/6] Fixing parameters, indentation and formatting. --- c/lib/GUI/GUI_Paint.c | 452 +++++++++++++++++++++--------------------- 1 file changed, 225 insertions(+), 227 deletions(-) diff --git a/c/lib/GUI/GUI_Paint.c b/c/lib/GUI/GUI_Paint.c index e6e6b0b..addf386 100644 --- a/c/lib/GUI/GUI_Paint.c +++ b/c/lib/GUI/GUI_Paint.c @@ -16,25 +16,24 @@ function: Create Image Height : The height of the picture Color : Whether the picture is inverted ******************************************************************************/ -void Paint_NewImage(UBYTE *image, UWORD Width, UWORD Height, UWORD Rotate, UWORD Color) -{ +void Paint_NewImage(UBYTE *image, UWORD Width, UWORD Height, UWORD Rotate, UWORD Color) { Paint.Image = NULL; Paint.Image = image; Paint.WidthMemory = Width; Paint.HeightMemory = Height; - Paint.Color = Color; - Paint.Scale = 2; - + Paint.Color = Color; + Paint.Scale = 2; + Paint.WidthByte = (Width % 8 == 0)? (Width / 8 ): (Width / 8 + 1); - Paint.HeightByte = Height; + Paint.HeightByte = Height; // printf("WidthByte = %d, HeightByte = %d\r\n", Paint.WidthByte, Paint.HeightByte); // printf(" EPD_WIDTH / 8 = %d\r\n", 122 / 8); - + Paint.Rotate = Rotate; Paint.Mirror = MIRROR_NONE; - - if(Rotate == ROTATE_0 || Rotate == ROTATE_180) { + + if (Rotate == ROTATE_0 || Rotate == ROTATE_180) { Paint.Width = Width; Paint.Height = Height; } else { @@ -48,8 +47,7 @@ function: Select Image parameter: image : Pointer to the image cache ******************************************************************************/ -void Paint_SelectImage(UBYTE *image) -{ +void Paint_SelectImage(UBYTE *image) { Paint.Image = image; } @@ -58,9 +56,8 @@ function: Select Image Rotate parameter: Rotate : 0,90,180,270 ******************************************************************************/ -void Paint_SetRotate(UWORD Rotate) -{ - if(Rotate == ROTATE_0 || Rotate == ROTATE_90 || Rotate == ROTATE_180 || Rotate == ROTATE_270) { +void Paint_SetRotate(UWORD Rotate) { + if (Rotate == ROTATE_0 || Rotate == ROTATE_90 || Rotate == ROTATE_180 || Rotate == ROTATE_270) { Debug("Set image Rotate %d\r\n", Rotate); Paint.Rotate = Rotate; } else { @@ -68,40 +65,45 @@ void Paint_SetRotate(UWORD Rotate) } } -void Paint_SetScale(UBYTE scale) -{ - if(scale == 2){ - Paint.Scale = scale; - Paint.WidthByte = (Paint.WidthMemory % 8 == 0)? (Paint.WidthMemory / 8 ): (Paint.WidthMemory / 8 + 1); - }else if(scale == 4){ - Paint.Scale = scale; - Paint.WidthByte = (Paint.WidthMemory % 4 == 0)? (Paint.WidthMemory / 4 ): (Paint.WidthMemory / 4 + 1); - }else if(scale ==16) { - Paint.Scale = scale; - Paint.WidthByte = (Paint.WidthMemory%2==0) ? (Paint.WidthMemory/2) : (Paint.WidthMemory/2+1); - }else if(scale ==65) { - Paint.Scale = scale; - Paint.WidthByte = Paint.WidthMemory*2; - }else{ - Debug("Set Scale Input parameter error\r\n"); - Debug("Scale Only support: 2 4 16 65\r\n"); +void Paint_SetScale(UBYTE scale) { + switch (scale) { + case 2: { + Paint.Scale = scale; + Paint.WidthByte = (Paint.WidthMemory % 8 == 0) ? (Paint.WidthMemory / 8 ) : (Paint.WidthMemory / 8 + 1); + } break; + case 4: { + Paint.Scale = scale; + Paint.WidthByte = (Paint.WidthMemory % 4 == 0) ? (Paint.WidthMemory / 4 ) : (Paint.WidthMemory / 4 + 1); + } break; + case 16: { + Paint.Scale = scale; + Paint.WidthByte = (Paint.WidthMemory % 2 == 0) ? (Paint.WidthMemory / 2) : (Paint.WidthMemory / 2 + 1); + } break; + case 65: { + Paint.Scale = scale; + Paint.WidthByte = Paint.WidthMemory * 2; + } break; + default: { + Debug("Set Scale Input parameter error\r\n"); + Debug("Scale Only support: 2 4 16 65\r\n"); + } } } + /****************************************************************************** -function: Select Image mirror +function: Select Image mirror parameter: mirror :Not mirror,Horizontal mirror,Vertical mirror,Origin mirror ******************************************************************************/ -void Paint_SetMirroring(UBYTE mirror) -{ - if(mirror == MIRROR_NONE || mirror == MIRROR_HORIZONTAL || +void Paint_SetMirroring(UBYTE mirror) { + if (mirror == MIRROR_NONE || mirror == MIRROR_HORIZONTAL || mirror == MIRROR_VERTICAL || mirror == MIRROR_ORIGIN) { - Debug("mirror image x:%s, y:%s\r\n",(mirror & 0x01)? "mirror":"none", ((mirror >> 1) & 0x01)? "mirror":"none"); + Debug("mirror image x:%s, y:%s\r\n", (mirror & 0x01) ? "mirror" : "none", ((mirror >> 1) & 0x01) ? "mirror" : "none"); Paint.Mirror = mirror; } else { Debug("mirror should be MIRROR_NONE, MIRROR_HORIZONTAL, \ MIRROR_VERTICAL or MIRROR_ORIGIN\r\n"); - } + } } /****************************************************************************** @@ -111,83 +113,80 @@ function: Draw Pixels Ypoint : At point Y Color : Painted colors ******************************************************************************/ -void Paint_SetPixel(UWORD Xpoint, UWORD Ypoint, UWORD Color) -{ - if(Xpoint > Paint.Width || Ypoint > Paint.Height){ +void Paint_SetPixel(UWORD Xpoint, UWORD Ypoint, UWORD Color) { + if (Xpoint > Paint.Width || Ypoint > Paint.Height) { Debug("Exceeding display boundaries\r\n"); return; - } + } + UWORD X, Y; - switch(Paint.Rotate) { - case 0: - X = Xpoint; - Y = Ypoint; - break; - case 90: - X = Paint.WidthMemory - Ypoint - 1; - Y = Xpoint; - break; - case 180: - X = Paint.WidthMemory - Xpoint - 1; - Y = Paint.HeightMemory - Ypoint - 1; - break; - case 270: - X = Ypoint; - Y = Paint.HeightMemory - Xpoint - 1; - break; - default: - return; + switch (Paint.Rotate) { + case 0: + X = Xpoint; + Y = Ypoint; + break; + case 90: + X = Paint.WidthMemory - Ypoint - 1; + Y = Xpoint; + break; + case 180: + X = Paint.WidthMemory - Xpoint - 1; + Y = Paint.HeightMemory - Ypoint - 1; + break; + case 270: + X = Ypoint; + Y = Paint.HeightMemory - Xpoint - 1; + break; + default: return; } - - switch(Paint.Mirror) { - case MIRROR_NONE: - break; - case MIRROR_HORIZONTAL: - X = Paint.WidthMemory - X - 1; - break; - case MIRROR_VERTICAL: - Y = Paint.HeightMemory - Y - 1; - break; - case MIRROR_ORIGIN: - X = Paint.WidthMemory - X - 1; - Y = Paint.HeightMemory - Y - 1; - break; - default: - return; + + switch (Paint.Mirror) { + case MIRROR_NONE: + break; + case MIRROR_HORIZONTAL: + X = Paint.WidthMemory - X - 1; + break; + case MIRROR_VERTICAL: + Y = Paint.HeightMemory - Y - 1; + break; + case MIRROR_ORIGIN: + X = Paint.WidthMemory - X - 1; + Y = Paint.HeightMemory - Y - 1; + break; + default: return; } - if(X > Paint.WidthMemory || Y > Paint.HeightMemory){ + if (X > Paint.WidthMemory || Y > Paint.HeightMemory) { Debug("Exceeding display boundaries\r\n"); return; } - - if(Paint.Scale == 2){ + + if (Paint.Scale == 2) { UDOUBLE Addr = X / 8 + Y * Paint.WidthByte; UBYTE Rdata = Paint.Image[Addr]; - if(Color&0xff == BLACK) + if (Color &0xff == BLACK) Paint.Image[Addr] = Rdata & ~(0x80 >> (X % 8)); else Paint.Image[Addr] = Rdata | (0x80 >> (X % 8)); - }else if(Paint.Scale == 4){ + } else if (Paint.Scale == 4) { UDOUBLE Addr = X / 4 + Y * Paint.WidthByte; - Color = Color % 4;//Guaranteed color scale is 4 --- 0~3 + Color = Color % 4; //Guaranteed color scale is 4 --- 0~3 UBYTE Rdata = Paint.Image[Addr]; - - Rdata = Rdata & (~(0xC0 >> ((X % 4)*2))); - Paint.Image[Addr] = Rdata | ((Color << 6) >> ((X % 4)*2)); - }else if(Paint.Scale == 16) { + + Rdata = Rdata & (~(0xC0 >> ((X % 4) * 2))); + Paint.Image[Addr] = Rdata | ((Color << 6) >> ((X % 4) * 2)); + } else if (Paint.Scale == 16) { UDOUBLE Addr = X / 2 + Y * Paint.WidthByte; UBYTE Rdata = Paint.Image[Addr]; Color = Color % 16; - Rdata = Rdata & (~(0xf0 >> ((X % 2)*4))); - Paint.Image[Addr] = Rdata | ((Color << 4) >> ((X % 2)*4)); - }else if(Paint.Scale == 65) { - UDOUBLE Addr = X*2 + Y*Paint.WidthByte; - Paint.Image[Addr] = 0xff & (Color>>8); - Paint.Image[Addr+1] = 0xff & Color; + Rdata = Rdata & (~(0xf0 >> ((X % 2) * 4))); + Paint.Image[Addr] = Rdata | ((Color << 4) >> ((X % 2) * 4)); + } else if (Paint.Scale == 65) { + UDOUBLE Addr = X * 2 + Y * Paint.WidthByte; + Paint.Image[Addr] = 0xff & (Color >> 8); + Paint.Image[Addr + 1] = 0xff & Color; } - } /****************************************************************************** @@ -195,28 +194,27 @@ function: Clear the color of the picture parameter: Color : Painted colors ******************************************************************************/ -void Paint_Clear(UWORD Color) -{ - if(Paint.Scale == 2 || Paint.Scale == 4) { +void Paint_Clear(UWORD Color) { + if (Paint.Scale == 2 || Paint.Scale == 4) { for (UWORD Y = 0; Y < Paint.HeightByte; Y++) { - for (UWORD X = 0; X < Paint.WidthByte; X++ ) {//8 pixel = 1 byte - UDOUBLE Addr = X + Y*Paint.WidthByte; + for (UWORD X = 0; X < Paint.WidthByte; X++) {//8 pixel = 1 byte + UDOUBLE Addr = X + Y * Paint.WidthByte; Paint.Image[Addr] = Color; } } - }else if(Paint.Scale == 16) { + } else if (Paint.Scale == 16) { for (UWORD Y = 0; Y < Paint.HeightByte; Y++) { for (UWORD X = 0; X < Paint.WidthByte; X++ ) {//8 pixel = 1 byte - UDOUBLE Addr = X + Y*Paint.WidthByte; + UDOUBLE Addr = X + Y * Paint.WidthByte; Color = Color & 0x0f; - Paint.Image[Addr] = (Color<<4) | Color; + Paint.Image[Addr] = (Color << 4) | Color; } } - }else if(Paint.Scale == 65) { + } else if (Paint.Scale == 65) { for (UWORD Y = 0; Y < Paint.HeightByte; Y++) { - for (UWORD X = 0; X < Paint.WidthByte; X++ ) {//8 pixel = 1 byte - UDOUBLE Addr = X*2 + Y*Paint.WidthByte; - Paint.Image[Addr] = 0xff & (Color>>8); + for (UWORD X = 0; X < Paint.WidthByte; X++) {//8 pixel = 1 byte + UDOUBLE Addr = X * 2 + Y * Paint.WidthByte; + Paint.Image[Addr] = 0xff & (Color >> 8); Paint.Image[Addr+1] = 0xff & Color; } } @@ -232,8 +230,7 @@ function: Clear the color of a window Yend : y end point Color : Painted colors ******************************************************************************/ -void Paint_ClearWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD Color) -{ +void Paint_ClearWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD Color) { UWORD X, Y; for (Y = Ystart; Y < Yend; Y++) { for (X = Xstart; X < Xend; X++) {//8 pixel = 1 byte @@ -245,15 +242,14 @@ void Paint_ClearWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWOR /****************************************************************************** function: Draw Point(Xpoint, Ypoint) Fill the color parameter: - Xpoint : The Xpoint coordinate of the point - Ypoint : The Ypoint coordinate of the point - Color : Painted color - Dot_Pixel : point size - Dot_Style : point Style + Xpoint : The Xpoint coordinate of the point + Ypoint : The Ypoint coordinate of the point + Color : Painted color + Dot_Pixel : point size + Dot_Style : point Style ******************************************************************************/ void Paint_DrawPoint(UWORD Xpoint, UWORD Ypoint, UWORD Color, - DOT_PIXEL Dot_Pixel, DOT_STYLE Dot_Style) -{ + DOT_PIXEL Dot_Pixel, DOT_STYLE Dot_Style) { if (Xpoint > Paint.Width || Ypoint > Paint.Height) { Debug("Paint_DrawPoint Input exceeds the normal display range\r\n"); printf("Xpoint = %d , Paint.Width = %d \r\n ",Xpoint,Paint.Width); @@ -265,7 +261,7 @@ void Paint_DrawPoint(UWORD Xpoint, UWORD Ypoint, UWORD Color, if (Dot_Style == DOT_FILL_AROUND) { for (XDir_Num = 0; XDir_Num < 2 * Dot_Pixel - 1; XDir_Num++) { for (YDir_Num = 0; YDir_Num < 2 * Dot_Pixel - 1; YDir_Num++) { - if(Xpoint + XDir_Num - Dot_Pixel < 0 || Ypoint + YDir_Num - Dot_Pixel < 0) + if (Xpoint + XDir_Num - Dot_Pixel < 0 || Ypoint + YDir_Num - Dot_Pixel < 0) break; // printf("x = %d, y = %d\r\n", Xpoint + XDir_Num - Dot_Pixel, Ypoint + YDir_Num - Dot_Pixel); Paint_SetPixel(Xpoint + XDir_Num - Dot_Pixel, Ypoint + YDir_Num - Dot_Pixel, Color); @@ -292,8 +288,7 @@ function: Draw a line of arbitrary slope Line_Style: Solid and dotted lines ******************************************************************************/ void Paint_DrawLine(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, - UWORD Color, DOT_PIXEL Line_width, LINE_STYLE Line_Style) -{ + UWORD Color, DOT_PIXEL Line_width, LINE_STYLE Line_Style) { if (Xstart > Paint.Width || Ystart > Paint.Height || Xend > Paint.Width || Yend > Paint.Height) { Debug("Paint_DrawLine Input exceeds the normal display range\r\n"); @@ -318,20 +313,22 @@ void Paint_DrawLine(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, //Painted dotted line, 2 point is really virtual if (Line_Style == LINE_STYLE_DOTTED && Dotted_Len % 3 == 0) { //Debug("LINE_DOTTED\r\n"); - if(Color) - Paint_DrawPoint(Xpoint, Ypoint, BLACK, Line_width, DOT_STYLE_DFT); + if(Color) + Paint_DrawPoint(Xpoint, Ypoint, BLACK, Line_width, DOT_STYLE_DFT); else - Paint_DrawPoint(Xpoint, Ypoint, WHITE, Line_width, DOT_STYLE_DFT); + Paint_DrawPoint(Xpoint, Ypoint, WHITE, Line_width, DOT_STYLE_DFT); Dotted_Len = 0; } else { Paint_DrawPoint(Xpoint, Ypoint, Color, Line_width, DOT_STYLE_DFT); } + if (2 * Esp >= dy) { if (Xpoint == Xend) break; Esp += dy; Xpoint += XAddway; } + if (2 * Esp <= dx) { if (Ypoint == Yend) break; @@ -353,8 +350,7 @@ function: Draw a rectangle Draw_Fill : Whether to fill the inside of the rectangle ******************************************************************************/ void Paint_DrawRectangle(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, - UWORD Color, DOT_PIXEL Line_width, DRAW_FILL Draw_Fill) -{ + UWORD Color, DOT_PIXEL Line_width, DRAW_FILL Draw_Fill) { if (Xstart > Paint.Width || Ystart > Paint.Height || Xend > Paint.Width || Yend > Paint.Height) { Debug("Input exceeds the normal display range\r\n"); @@ -386,8 +382,7 @@ function: Use the 8-point method to draw a circle of the Draw_Fill : Whether to fill the inside of the Circle ******************************************************************************/ void Paint_DrawCircle(UWORD X_Center, UWORD Y_Center, UWORD Radius, - UWORD Color, DOT_PIXEL Line_width, DRAW_FILL Draw_Fill) -{ + UWORD Color, DOT_PIXEL Line_width, DRAW_FILL Draw_Fill) { if (X_Center > Paint.Width || Y_Center >= Paint.Height) { Debug("Paint_DrawCircle Input exceeds the normal display range\r\n"); return; @@ -414,12 +409,14 @@ void Paint_DrawCircle(UWORD X_Center, UWORD Y_Center, UWORD Radius, Paint_DrawPoint(X_Center + sCountY, Y_Center - XCurrent, Color, DOT_PIXEL_DFT, DOT_STYLE_DFT);//7 Paint_DrawPoint(X_Center + sCountY, Y_Center + XCurrent, Color, DOT_PIXEL_DFT, DOT_STYLE_DFT); } + if (Esp < 0 ) Esp += 4 * XCurrent + 6; else { Esp += 10 + 4 * (XCurrent - YCurrent ); YCurrent --; } + XCurrent ++; } } else { //Draw a hollow circle @@ -455,8 +452,7 @@ function: Show English characters Color_Background : Select the background color ******************************************************************************/ void Paint_DrawChar(UWORD Xpoint, UWORD Ypoint, const char Acsii_Char, - sFONT* Font, UWORD Color_Foreground, UWORD Color_Background) -{ + sFONT* Font, UWORD Color_Foreground, UWORD Color_Background) { UWORD Page, Column; if (Xpoint > Paint.Width || Ypoint > Paint.Height) { @@ -469,7 +465,6 @@ void Paint_DrawChar(UWORD Xpoint, UWORD Ypoint, const char Acsii_Char, for (Page = 0; Page < Font->Height; Page ++ ) { for (Column = 0; Column < Font->Width; Column ++ ) { - //To determine whether the font background color and screen background color is consistent if (FONT_BACKGROUND == Color_Background) { //this process is to speed up the scan if (*ptr & (0x80 >> (Column % 8))) @@ -484,17 +479,19 @@ void Paint_DrawChar(UWORD Xpoint, UWORD Ypoint, const char Acsii_Char, // Paint_DrawPoint(Xpoint + Column, Ypoint + Page, Color_Background, DOT_PIXEL_DFT, DOT_STYLE_DFT); } } + //One pixel is 8 bits if (Column % 8 == 7) ptr++; }// Write a line + if (Font->Width % 8 != 0) ptr++; }// Write all } /****************************************************************************** -function: Display the string +function: Display the string parameter: Xstart :X coordinate Ystart :Y coordinate @@ -504,8 +501,7 @@ function: Display the string Color_Background : Select the background color ******************************************************************************/ void Paint_DrawString_EN(UWORD Xstart, UWORD Ystart, const char * pString, - sFONT* Font, UWORD Color_Foreground, UWORD Color_Background) -{ + sFONT* Font, UWORD Color_Foreground, UWORD Color_Background) { UWORD Xpoint = Xstart; UWORD Ypoint = Ystart; @@ -526,10 +522,11 @@ void Paint_DrawString_EN(UWORD Xstart, UWORD Ystart, const char * pString, Xpoint = Xstart; Ypoint = Ystart; } - Paint_DrawChar(Xpoint, Ypoint, * pString, Font, Color_Background, Color_Foreground); + + Paint_DrawChar(Xpoint, Ypoint, * pString, Font, Color_Foreground, Color_Background); //The next character of the address - pString ++; + pString++; //The next word of the abscissa increases the font of the broadband Xpoint += Font->Width; @@ -549,17 +546,16 @@ function: Display the string Color_Background : Select the background color ******************************************************************************/ void Paint_DrawString_CN(UWORD Xstart, UWORD Ystart, const char * pString, cFONT* font, - UWORD Color_Foreground, UWORD Color_Background) -{ + UWORD Color_Foreground, UWORD Color_Background) { const char* p_text = pString; int x = Xstart, y = Ystart; - int i, j,Num; + int i, j, Num; /* Send the string character by character on EPD */ while (*p_text != 0) { - if(*p_text <= 0x7F) { //ASCII < 126 - for(Num = 0; Num < font->size; Num++) { - if(*p_text== font->table[Num].index[0]) { + if (*p_text <= 0x7F) { //ASCII < 126 + for (Num = 0; Num < font->size; Num++) { + if (*p_text== font->table[Num].index[0]) { const char* ptr = &font->table[Num].matrix[0]; for (j = 0; j < font->Height; j++) { @@ -578,24 +574,28 @@ void Paint_DrawString_CN(UWORD Xstart, UWORD Ystart, const char * pString, cFONT // Paint_DrawPoint(x + i, y + j, Color_Background, DOT_PIXEL_DFT, DOT_STYLE_DFT); } } + if (i % 8 == 7) { ptr++; } } + if (font->Width % 8 != 0) { ptr++; } } + break; } } + /* Point on the next character */ p_text += 1; /* Decrement the column position by 16 */ x += font->ASCII_Width; } else { //Chinese - for(Num = 0; Num < font->size; Num++) { - if((*p_text== font->table[Num].index[0]) && (*(p_text+1) == font->table[Num].index[1])) { + for (Num = 0; Num < font->size; Num++) { + if ((*p_text== font->table[Num].index[0]) && (*(p_text + 1) == font->table[Num].index[1])) { const char* ptr = &font->table[Num].matrix[0]; for (j = 0; j < font->Height; j++) { @@ -614,17 +614,21 @@ void Paint_DrawString_CN(UWORD Xstart, UWORD Ystart, const char * pString, cFONT // Paint_DrawPoint(x + i, y + j, Color_Background, DOT_PIXEL_DFT, DOT_STYLE_DFT); } } + if (i % 8 == 7) { ptr++; } } + if (font->Width % 8 != 0) { ptr++; } } + break; } } + /* Point on the next character */ p_text += 2; /* Decrement the column position by 16 */ @@ -634,55 +638,60 @@ void Paint_DrawString_CN(UWORD Xstart, UWORD Ystart, const char * pString, cFONT } /****************************************************************************** -function: Display nummber +function: Display nummber parameter: Xstart :X coordinate Ystart : Y coordinate Nummber : The number displayed Font :A structure pointer that displays a character size - Digit : Fractional width + Digit : Fractional width Color_Foreground : Select the foreground color Color_Background : Select the background color ******************************************************************************/ #define ARRAY_LEN 255 void Paint_DrawNum(UWORD Xpoint, UWORD Ypoint, double Nummber, - sFONT* Font, UWORD Digit,UWORD Color_Foreground, UWORD Color_Background) -{ + sFONT* Font, UWORD Digit,UWORD Color_Foreground, UWORD Color_Background) { int16_t Num_Bit = 0, Str_Bit = 0; uint8_t Str_Array[ARRAY_LEN] = {0}, Num_Array[ARRAY_LEN] = {0}; uint8_t *pStr = Str_Array; - int temp = Nummber; - float decimals; - uint8_t i; + int temp = Nummber; + float decimals; + uint8_t i; + if (Xpoint > Paint.Width || Ypoint > Paint.Height) { Debug("Paint_DisNum Input exceeds the normal display range\r\n"); return; } - if(Digit > 0) { - decimals = Nummber - temp; - for(i=Digit; i > 0; i--) { - decimals*=10; - } - temp = decimals; - //Converts a number to a string - for(i=Digit; i>0; i--) { - Num_Array[Num_Bit] = temp % 10 + '0'; - Num_Bit++; - temp /= 10; - } - Num_Array[Num_Bit] = '.'; - Num_Bit++; - } - - temp = Nummber; + if (Digit > 0) { + decimals = Nummber - temp; + + for(i = Digit; i > 0; i--) { + decimals*=10; + } + + temp = decimals; + + //Converts a number to a string + for(i=Digit; i>0; i--) { + Num_Array[Num_Bit] = temp % 10 + '0'; + Num_Bit++; + temp /= 10; + } + + Num_Array[Num_Bit] = '.'; + Num_Bit++; + } + + temp = Nummber; + //Converts a number to a string while (temp) { Num_Array[Num_Bit] = temp % 10 + '0'; Num_Bit++; temp /= 10; } - + //The string is inverted while (Num_Bit > 0) { Str_Array[Str_Bit] = Num_Array[Num_Bit - 1]; @@ -691,11 +700,11 @@ void Paint_DrawNum(UWORD Xpoint, UWORD Ypoint, double Nummber, } //show - Paint_DrawString_EN(Xpoint, Ypoint, (const char*)pStr, Font, Color_Background, Color_Foreground); + Paint_DrawString_EN(Xpoint, Ypoint, (const char*)pStr, Font, Color_Foreground, Color_Background); } /****************************************************************************** -function: Display time +function: Display time parameter: Xstart :X coordinate Ystart : Y coordinate @@ -705,63 +714,56 @@ function: Display time Color_Background : Select the background color ******************************************************************************/ void Paint_DrawTime(UWORD Xstart, UWORD Ystart, PAINT_TIME *pTime, sFONT* Font, - UWORD Color_Foreground, UWORD Color_Background) -{ + UWORD Color_Foreground, UWORD Color_Background) { uint8_t value[10] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}; - UWORD Dx = Font->Width; //Write data into the cache - Paint_DrawChar(Xstart , Ystart, value[pTime->Hour / 10], Font, Color_Background, Color_Foreground); - Paint_DrawChar(Xstart + Dx , Ystart, value[pTime->Hour % 10], Font, Color_Background, Color_Foreground); - Paint_DrawChar(Xstart + Dx + Dx / 4 + Dx / 2 , Ystart, ':' , Font, Color_Background, Color_Foreground); - Paint_DrawChar(Xstart + Dx * 2 + Dx / 2 , Ystart, value[pTime->Min / 10] , Font, Color_Background, Color_Foreground); - Paint_DrawChar(Xstart + Dx * 3 + Dx / 2 , Ystart, value[pTime->Min % 10] , Font, Color_Background, Color_Foreground); - Paint_DrawChar(Xstart + Dx * 4 + Dx / 2 - Dx / 4, Ystart, ':' , Font, Color_Background, Color_Foreground); - Paint_DrawChar(Xstart + Dx * 5 , Ystart, value[pTime->Sec / 10] , Font, Color_Background, Color_Foreground); - Paint_DrawChar(Xstart + Dx * 6 , Ystart, value[pTime->Sec % 10] , Font, Color_Background, Color_Foreground); - + Paint_DrawChar(Xstart, Ystart, value[pTime->Hour / 10], Font, Color_Foreground, Color_Background); + Paint_DrawChar(Xstart + Dx, Ystart, value[pTime->Hour % 10], Font, Color_Foreground, Color_Background); + Paint_DrawChar(Xstart + Dx + Dx / 4 + Dx / 2, Ystart, ':', Font, Color_Foreground, Color_Background); + Paint_DrawChar(Xstart + Dx * 2 + Dx / 2, Ystart, value[pTime->Min / 10], Font, Color_Foreground, Color_Background); + Paint_DrawChar(Xstart + Dx * 3 + Dx / 2, Ystart, value[pTime->Min % 10], Font, Color_Foreground, Color_Background); + Paint_DrawChar(Xstart + Dx * 4 + Dx / 2 - Dx / 4, Ystart, ':', Font, Color_Foreground, Color_Background); + Paint_DrawChar(Xstart + Dx * 5, Ystart, value[pTime->Sec / 10], Font, Color_Foreground, Color_Background); + Paint_DrawChar(Xstart + Dx * 6, Ystart, value[pTime->Sec % 10], Font, Color_Foreground, Color_Background); } - -void Paint_DrawImage(const unsigned char *image, UWORD xStart, UWORD yStart, UWORD W_Image, UWORD H_Image) -{ - int i,j; - for(j = 0; j < H_Image; j++){ - for(i = 0; i < W_Image; i++){ - if(xStart+i < Paint.WidthMemory && yStart+j < Paint.HeightMemory)//Exceeded part does not display - Paint_SetPixel(xStart + i, yStart + j, (*(image + j*W_Image*2 + i*2+1))<<8 | (*(image + j*W_Image*2 + i*2))); - //Using arrays is a property of sequential storage, accessing the original array by algorithm - //j*W_Image*2 Y offset - //i*2 X offset - } - } +void Paint_DrawImage(const unsigned char *image, UWORD xStart, UWORD yStart, UWORD W_Image, UWORD H_Image) { + int i, j; + for (j = 0; j < H_Image; j++) { + for (i = 0; i < W_Image; i++) { + if (xStart + i < Paint.WidthMemory && yStart + j < Paint.HeightMemory) //Exceeded part does not display + Paint_SetPixel(xStart + i, yStart + j, (*(image + j * W_Image * 2 + i * 2 + 1)) << 8 | (*(image + j * W_Image * 2 + i * 2))); + //Using arrays is a property of sequential storage, accessing the original array by algorithm + //j*W_Image*2 Y offset + //i*2 X offset + } + } } -void Paint_DrawImage1(const unsigned char *image, UWORD xStart, UWORD yStart, UWORD W_Image, UWORD H_Image) -{ - int i,j; - for(j = 0; j < H_Image; j++){ - for(i = 0; i < W_Image; i++){ - if(xStart+i < Paint.HeightMemory && yStart+j < Paint.WidthMemory)//Exceeded part does not display - Paint_SetPixel(xStart + i, yStart + j, (*(image + j*W_Image*2 + i*2+1))<<8 | (*(image + j*W_Image*2 + i*2))); - //Using arrays is a property of sequential storage, accessing the original array by algorithm - //j*W_Image*2 Y offset - //i*2 X offset - } - } +void Paint_DrawImage1(const unsigned char *image, UWORD xStart, UWORD yStart, UWORD W_Image, UWORD H_Image) { + int i, j; + for (j = 0; j < H_Image; j++) { + for (i = 0; i < W_Image; i++) { + if (xStart + i < Paint.HeightMemory && yStart + j < Paint.WidthMemory) //Exceeded part does not display + Paint_SetPixel(xStart + i, yStart + j, (*(image + j * W_Image * 2 + i * 2 + 1)) << 8 | (*(image + j * W_Image * 2 + i * 2))); + //Using arrays is a property of sequential storage, accessing the original array by algorithm + //j*W_Image*2 Y offset + //i*2 X offset + } + } } /****************************************************************************** -function: Display monochrome bitmap +function: Display monochrome bitmap parameter: image_buffer :A picture data converted to a bitmap info: Use a computer to convert the image into a corresponding array, and then embed the array directly into Imagedata.cpp as a .c file. ******************************************************************************/ -void Paint_DrawBitMap(const unsigned char* image_buffer) -{ +void Paint_DrawBitMap(const unsigned char* image_buffer) { UWORD x, y; UDOUBLE Addr = 0; @@ -773,32 +775,28 @@ void Paint_DrawBitMap(const unsigned char* image_buffer) } } -void Paint_DrawBitMap_Block(const unsigned char* image_buffer, UBYTE Region) -{ +void Paint_DrawBitMap_Block(const unsigned char* image_buffer, UBYTE Region) { UWORD x, y; UDOUBLE Addr = 0; - for (y = 0; y < Paint.HeightByte; y++) { - for (x = 0; x < Paint.WidthByte; x++) {//8 pixel = 1 byte - Addr = x + y * Paint.WidthByte ; - Paint.Image[Addr] = \ - (unsigned char)image_buffer[Addr+ (Paint.HeightByte)*Paint.WidthByte*(Region - 1)]; - } - } -} - + for (y = 0; y < Paint.HeightByte; y++) { + for (x = 0; x < Paint.WidthByte; x++) {//8 pixel = 1 byte + Addr = x + y * Paint.WidthByte ; + Paint.Image[Addr] = \ + (unsigned char)image_buffer[Addr+ (Paint.HeightByte)*Paint.WidthByte*(Region - 1)]; + } + } +} void Paint_BmpWindows(unsigned char x,unsigned char y,const unsigned char *pBmp, - unsigned char chWidth,unsigned char chHeight) -{ - uint16_t i, j, byteWidth = (chWidth + 7)/8; - for(j = 0; j < chHeight; j ++){ - for(i = 0; i < chWidth; i ++ ) { - if(*(pBmp + j * byteWidth + i / 8) & (128 >> (i & 7))) { - Paint_SetPixel(x+i, y+j, 0xffff); + unsigned char chWidth,unsigned char chHeight) { + uint16_t i, j, byteWidth = (chWidth + 7) / 8; + + for (j = 0; j < chHeight; j ++) { + for (i = 0; i < chWidth; i ++ ) { + if (*(pBmp + j * byteWidth + i / 8) & (128 >> (i & 7))) { + Paint_SetPixel(x + i, y + j, 0xffff); } } } } - -