add gd32v eval lcd display support
This commit is contained in:
168
board/GigaDevice_GD32VF103C_EVAL/BSP/Inc/gd32vf103v_eval.h
Normal file
168
board/GigaDevice_GD32VF103C_EVAL/BSP/Inc/gd32vf103v_eval.h
Normal file
@@ -0,0 +1,168 @@
|
||||
/*!
|
||||
\file gd32vf103v_eval.h
|
||||
\brief definitions for GD32VF103V_EVAL's leds, keys and COM ports hardware resources
|
||||
|
||||
\version 2019-06-05, V1.0.0, demo for GD32VF103
|
||||
*/
|
||||
|
||||
/*
|
||||
Copyright (c) 2019, GigaDevice Semiconductor Inc.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
3. Neither the name of the copyright holder nor the names of its contributors
|
||||
may be used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef GD32VF103V_EVAL_H
|
||||
#define GD32VF103V_EVAL_H
|
||||
|
||||
#ifdef cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "gd32vf103.h"
|
||||
|
||||
/* exported types */
|
||||
typedef enum
|
||||
{
|
||||
LED1 = 0,
|
||||
LED2 = 1,
|
||||
LED3 = 2,
|
||||
LED4 = 3
|
||||
} led_typedef_enum;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
KEY_A = 0,
|
||||
KEY_B = 1,
|
||||
KEY_C = 2,
|
||||
KEY_D = 3,
|
||||
KEY_CET = 4
|
||||
} key_typedef_enum;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
KEY_MODE_GPIO = 0,
|
||||
KEY_MODE_EXTI = 1
|
||||
} keymode_typedef_enum;
|
||||
|
||||
/* eval board low layer led */
|
||||
#define LEDn 4U
|
||||
|
||||
#define LED1_PIN GPIO_PIN_0
|
||||
#define LED1_GPIO_PORT GPIOC
|
||||
#define LED1_GPIO_CLK RCU_GPIOC
|
||||
|
||||
#define LED2_PIN GPIO_PIN_2
|
||||
#define LED2_GPIO_PORT GPIOC
|
||||
#define LED2_GPIO_CLK RCU_GPIOC
|
||||
|
||||
#define LED3_PIN GPIO_PIN_0
|
||||
#define LED3_GPIO_PORT GPIOE
|
||||
#define LED3_GPIO_CLK RCU_GPIOE
|
||||
|
||||
#define LED4_PIN GPIO_PIN_1
|
||||
#define LED4_GPIO_PORT GPIOE
|
||||
#define LED4_GPIO_CLK RCU_GPIOE
|
||||
|
||||
#define COMn 2U
|
||||
|
||||
#define EVAL_COM0 USART0
|
||||
#define EVAL_COM0_CLK RCU_USART0
|
||||
#define EVAL_COM0_TX_PIN GPIO_PIN_9
|
||||
#define EVAL_COM0_RX_PIN GPIO_PIN_10
|
||||
#define EVAL_COM0_GPIO_PORT GPIOA
|
||||
#define EVAL_COM0_GPIO_CLK RCU_GPIOA
|
||||
|
||||
#define EVAL_COM1 USART1
|
||||
#define EVAL_COM1_CLK RCU_USART1
|
||||
#define EVAL_COM1_TX_PIN GPIO_PIN_2
|
||||
#define EVAL_COM1_RX_PIN GPIO_PIN_3
|
||||
#define EVAL_COM1_GPIO_PORT GPIOA
|
||||
#define EVAL_COM1_GPIO_CLK RCU_GPIOA
|
||||
|
||||
#define KEYn 5U
|
||||
|
||||
/* wakeup push-button */
|
||||
#define KEY_A_PIN GPIO_PIN_0
|
||||
#define KEY_A_GPIO_PORT GPIOA
|
||||
#define KEY_A_GPIO_CLK RCU_GPIOA
|
||||
#define KEY_A_EXTI_LINE EXTI_0
|
||||
#define KEY_A_EXTI_PORT_SOURCE GPIO_PORT_SOURCE_GPIOA
|
||||
#define KEY_A_EXTI_PIN_SOURCE GPIO_PIN_SOURCE_0
|
||||
#define KEY_A_EXTI_IRQn EXTI0_IRQn
|
||||
|
||||
/* tamper push-button */
|
||||
#define KEY_B_PIN GPIO_PIN_13
|
||||
#define KEY_B_GPIO_PORT GPIOC
|
||||
#define KEY_B_GPIO_CLK RCU_GPIOC
|
||||
#define KEY_B_EXTI_LINE EXTI_13
|
||||
#define KEY_B_EXTI_PORT_SOURCE GPIO_PORT_SOURCE_GPIOC
|
||||
#define KEY_B_EXTI_PIN_SOURCE GPIO_PIN_SOURCE_13
|
||||
#define KEY_B_EXTI_IRQn EXTI10_15_IRQn
|
||||
|
||||
/* user push-button */
|
||||
#define KEY_C_PIN GPIO_PIN_14
|
||||
#define KEY_C_GPIO_PORT GPIOB
|
||||
#define KEY_C_GPIO_CLK RCU_GPIOB
|
||||
#define KEY_C_EXTI_LINE EXTI_14
|
||||
#define KEY_C_EXTI_PORT_SOURCE GPIO_PORT_SOURCE_GPIOB
|
||||
#define KEY_C_EXTI_PIN_SOURCE GPIO_PIN_SOURCE_14
|
||||
#define KEY_C_EXTI_IRQn EXTI10_15_IRQn
|
||||
|
||||
#define KEY_D_PIN GPIO_PIN_5
|
||||
#define KEY_D_GPIO_PORT GPIOC
|
||||
#define KEY_D_GPIO_CLK RCU_GPIOC
|
||||
#define KEY_D_EXTI_LINE EXTI_5
|
||||
#define KEY_D_EXTI_PORT_SOURCE GPIO_PORT_SOURCE_GPIOC
|
||||
#define KEY_D_EXTI_PIN_SOURCE GPIO_PIN_SOURCE_5
|
||||
#define KEY_D_EXTI_IRQn EXTI5_9_IRQn
|
||||
|
||||
#define KEY_CET_PIN GPIO_PIN_4
|
||||
#define KEY_CET_GPIO_PORT GPIOC
|
||||
#define KEY_CET_GPIO_CLK RCU_GPIOC
|
||||
#define KEY_CET_EXTI_LINE EXTI_4
|
||||
#define KEY_CET_EXTI_PORT_SOURCE GPIO_PORT_SOURCE_GPIOC
|
||||
#define KEY_CET_EXTI_PIN_SOURCE GPIO_PIN_SOURCE_4
|
||||
#define KEY_CET_EXTI_IRQn EXTI4_IRQn
|
||||
|
||||
/* function declarations */
|
||||
/* configure led GPIO */
|
||||
void gd_eval_led_init(led_typedef_enum lednum);
|
||||
/* turn on selected led */
|
||||
void gd_eval_led_on(led_typedef_enum lednum);
|
||||
/* turn off selected led */
|
||||
void gd_eval_led_off(led_typedef_enum lednum);
|
||||
/* toggle the selected led */
|
||||
void gd_eval_led_toggle(led_typedef_enum lednum);
|
||||
/* configure key */
|
||||
void gd_eval_key_init(key_typedef_enum key_num, keymode_typedef_enum key_mode);
|
||||
/* return the selected key state */
|
||||
uint8_t gd_eval_key_state_get(key_typedef_enum key);
|
||||
/* configure COM port */
|
||||
void gd_eval_com_init(uint32_t com);
|
||||
|
||||
#ifdef cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GD32VF103V_EVAL_H */
|
237
board/GigaDevice_GD32VF103C_EVAL/BSP/Inc/gd32vf103v_lcd_eval.h
Normal file
237
board/GigaDevice_GD32VF103C_EVAL/BSP/Inc/gd32vf103v_lcd_eval.h
Normal file
@@ -0,0 +1,237 @@
|
||||
/*!
|
||||
\file gd32vf103v_lcd_eval.h
|
||||
\brief LCD driver header file
|
||||
|
||||
\version 2019-06-05, V1.0.0, demo for GD32VF103
|
||||
*/
|
||||
|
||||
/*
|
||||
Copyright (c) 2019, GigaDevice Semiconductor Inc.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
3. Neither the name of the copyright holder nor the names of its contributors
|
||||
may be used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef GD32VF103V_LCD_EVAL_H
|
||||
#define GD32VF103V_LCD_EVAL_H
|
||||
|
||||
#include "gd32vf103.h"
|
||||
|
||||
#define BANK0_LCD_C ((uint32_t)0x60000000) /*!< LCD register address */
|
||||
#define BANK0_LCD_D ((uint32_t)0x61000000) /*!< LCD data address */
|
||||
|
||||
/* LCD registers */
|
||||
#define R0 0x00
|
||||
#define R1 0x01
|
||||
#define R2 0x02
|
||||
#define R3 0x03
|
||||
#define R4 0x04
|
||||
#define R5 0x05
|
||||
#define R6 0x06
|
||||
#define R7 0x07
|
||||
#define R8 0x08
|
||||
#define R9 0x09
|
||||
#define R10 0x0A
|
||||
#define R11 0x0B
|
||||
#define R12 0x0C
|
||||
#define R13 0x0D
|
||||
#define R14 0x0E
|
||||
#define R15 0x0F
|
||||
#define R16 0x10
|
||||
#define R17 0x11
|
||||
#define R18 0x12
|
||||
#define R19 0x13
|
||||
#define R20 0x14
|
||||
#define R21 0x15
|
||||
#define R22 0x16
|
||||
#define R23 0x17
|
||||
#define R24 0x18
|
||||
#define R25 0x19
|
||||
#define R26 0x1A
|
||||
#define R27 0x1B
|
||||
#define R28 0x1C
|
||||
#define R29 0x1D
|
||||
#define R30 0x1E
|
||||
#define R31 0x1F
|
||||
#define R32 0x20
|
||||
#define R33 0x21
|
||||
#define R34 0x22
|
||||
#define R35 0x23
|
||||
#define R36 0x24
|
||||
#define R37 0x25
|
||||
#define R40 0x28
|
||||
#define R41 0x29
|
||||
#define R43 0x2B
|
||||
#define R45 0x2D
|
||||
#define R48 0x30
|
||||
#define R49 0x31
|
||||
#define R50 0x32
|
||||
#define R51 0x33
|
||||
#define R52 0x34
|
||||
#define R53 0x35
|
||||
#define R54 0x36
|
||||
#define R55 0x37
|
||||
#define R56 0x38
|
||||
#define R57 0x39
|
||||
#define R58 0x3A
|
||||
#define R59 0x3B
|
||||
#define R60 0x3C
|
||||
#define R61 0x3D
|
||||
#define R62 0x3E
|
||||
#define R63 0x3F
|
||||
#define R64 0x40
|
||||
#define R65 0x41
|
||||
#define R66 0x42
|
||||
#define R67 0x43
|
||||
#define R68 0x44
|
||||
#define R69 0x45
|
||||
#define R70 0x46
|
||||
#define R71 0x47
|
||||
#define R72 0x48
|
||||
#define R73 0x49
|
||||
#define R74 0x4A
|
||||
#define R75 0x4B
|
||||
#define R76 0x4C
|
||||
#define R77 0x4D
|
||||
#define R78 0x4E
|
||||
#define R79 0x4F
|
||||
#define R80 0x50
|
||||
#define R81 0x51
|
||||
#define R82 0x52
|
||||
#define R83 0x53
|
||||
#define R96 0x60
|
||||
#define R97 0x61
|
||||
#define R106 0x6A
|
||||
#define R118 0x76
|
||||
#define R128 0x80
|
||||
#define R129 0x81
|
||||
#define R130 0x82
|
||||
#define R131 0x83
|
||||
#define R132 0x84
|
||||
#define R133 0x85
|
||||
#define R134 0x86
|
||||
#define R135 0x87
|
||||
#define R136 0x88
|
||||
#define R137 0x89
|
||||
#define R139 0x8B
|
||||
#define R140 0x8C
|
||||
#define R141 0x8D
|
||||
#define R143 0x8F
|
||||
#define R144 0x90
|
||||
#define R145 0x91
|
||||
#define R146 0x92
|
||||
#define R147 0x93
|
||||
#define R148 0x94
|
||||
#define R149 0x95
|
||||
#define R150 0x96
|
||||
#define R151 0x97
|
||||
#define R152 0x98
|
||||
#define R153 0x99
|
||||
#define R154 0x9A
|
||||
#define R157 0x9D
|
||||
#define R192 0xC0
|
||||
#define R193 0xC1
|
||||
#define R229 0xE5
|
||||
|
||||
/* LCD color */
|
||||
#define LCD_COLOR_WHITE 0xFFFF
|
||||
#define LCD_COLOR_BLACK 0x0000
|
||||
#define LCD_COLOR_GREY 0xF7DE
|
||||
#define LCD_COLOR_BLUE 0x001F
|
||||
#define LCD_COLOR_BLUE2 0x051F
|
||||
#define LCD_COLOR_RED 0xF800
|
||||
#define LCD_COLOR_MAGENTA 0xF81F
|
||||
#define LCD_COLOR_GREEN 0x07E0
|
||||
#define LCD_COLOR_CYAN 0x7FFF
|
||||
#define LCD_COLOR_YELLOW 0xFFE0
|
||||
|
||||
/* definitions of LCD lines */
|
||||
#define LCD_LINE_0 0
|
||||
#define LCD_LINE_1 24
|
||||
#define LCD_LINE_2 48
|
||||
#define LCD_LINE_3 72
|
||||
#define LCD_LINE_4 96
|
||||
#define LCD_LINE_5 120
|
||||
#define LCD_LINE_6 144
|
||||
#define LCD_LINE_7 168
|
||||
#define LCD_LINE_8 192
|
||||
#define LCD_LINE_9 216
|
||||
|
||||
#define CHAR_FONT_8_16 ((uint16_t)0x0000U) /*!< the font of char is 8X16 */
|
||||
#define CHAR_FONT_16_24 ((uint16_t)0x0001U) /*!< the font of char is 16X24 */
|
||||
|
||||
#define CHAR_DIRECTION_HORIZONTAL ((uint16_t)0x0000U) /*!< character display direction is horizontal */
|
||||
#define CHAR_DIRECTION_VERTICAL ((uint16_t)0x0001U) /*!< character display direction is vertical */
|
||||
|
||||
#define LCD_PIXEL_WIDTH ((uint16_t)320)
|
||||
#define LCD_PIXEL_HEIGHT ((uint16_t)240)
|
||||
|
||||
/* char format struct definitions */
|
||||
typedef struct
|
||||
{
|
||||
uint16_t font; /*!< the type of font */
|
||||
uint16_t direction; /*!< the direction of char */
|
||||
uint16_t char_color; /*!< the color of char */
|
||||
uint16_t bk_color; /*!< the color of backgroud */
|
||||
}char_format_struct;
|
||||
|
||||
/* lcd peripheral initialize */
|
||||
void exmc_lcd_init(void);
|
||||
/* initialize the LCD */
|
||||
void lcd_init(void);
|
||||
/* write data to the selected LCD register */
|
||||
void lcd_register_write(uint16_t register_id,uint16_t value);
|
||||
/* read the value of LCD register */
|
||||
uint16_t lcd_register_read(uint8_t register_id);
|
||||
/* write command to LCD register */
|
||||
void lcd_command_write (uint16_t value);
|
||||
/* prepare to write to the LCD GRAM */
|
||||
void lcd_gram_write_prepare(void);
|
||||
/* write RGB code to the LCD GRAM register */
|
||||
void lcd_gram_write(uint16_t rgb_code);
|
||||
/* read data from GRAM */
|
||||
uint16_t lcd_gram_read(void);
|
||||
/* set the cursor of LCD */
|
||||
void lcd_cursor_set(uint16_t x,uint16_t y);
|
||||
/* clear the LCD screen to the specified color */
|
||||
void lcd_clear(uint16_t Color);
|
||||
/* set the point according to the specified position and color */
|
||||
void lcd_point_set(uint16_t x,uint16_t y,uint16_t point);
|
||||
/* get the point according to the specified position */
|
||||
uint16_t lcd_point_get(uint16_t x,uint16_t y);
|
||||
/* set window area */
|
||||
void lcd_windows_set(uint16_t start_x,uint16_t start_y,uint16_t end_x,uint16_t end_y);
|
||||
/* draw a horizontal line on LCD screen */
|
||||
void lcd_hline_draw(uint16_t x,uint16_t start_y,uint16_t end_y,uint16_t color,uint16_t width);
|
||||
/* draw a vertical line on LCD screen */
|
||||
void lcd_vline_draw(uint16_t start_x,uint16_t end_x,uint16_t y,uint16_t color,uint16_t width);
|
||||
/* draw a rectangle according to the specified position and color */
|
||||
void lcd_rectangle_draw(uint16_t start_x,uint16_t start_y,uint16_t end_x,uint16_t end_y,uint16_t point);
|
||||
/* fill the specified color to a rectangle */
|
||||
void lcd_rectangle_fill(uint16_t start_x,uint16_t start_y,uint16_t end_x,uint16_t end_y,uint16_t color);
|
||||
/* draw a picture on LCD screen according to the specified position */
|
||||
void lcd_picture_draw(uint16_t start_x,uint16_t start_y,uint16_t end_x,uint16_t end_y,uint16_t *pic);
|
||||
/* display a char on LCD screen according to the specified position */
|
||||
void lcd_char_display(uint16_t x,uint16_t y,uint8_t c,char_format_struct c_format);
|
||||
|
||||
#endif /* GD32VF103V_LCD_EVAL_H */
|
45
board/GigaDevice_GD32VF103C_EVAL/BSP/Inc/lcd_font.h
Normal file
45
board/GigaDevice_GD32VF103C_EVAL/BSP/Inc/lcd_font.h
Normal file
@@ -0,0 +1,45 @@
|
||||
/*!
|
||||
\file lcd_font.h
|
||||
\brief the header file of LCD font
|
||||
|
||||
\version 2019-06-05, V1.0.0, demo for GD32VF103
|
||||
*/
|
||||
|
||||
/*
|
||||
Copyright (c) 2019, GigaDevice Semiconductor Inc.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
3. Neither the name of the copyright holder nor the names of its contributors
|
||||
may be used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef LCD_FONT_H
|
||||
#define LCD_FONT_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
extern unsigned char const ascii_8x16[1536];
|
||||
|
||||
extern const uint16_t ASCII_Table_16x24[];
|
||||
|
||||
#endif /* LCD_FONT_H */
|
||||
|
@@ -3,7 +3,10 @@
|
||||
|
||||
#include "gd32vf103.h"
|
||||
#include "usart.h"
|
||||
|
||||
#include "gd32vf103v_eval.h"
|
||||
#include "gd32vf103v_lcd_eval.h"
|
||||
#include "touch_panel.h"
|
||||
#include "picture.h"
|
||||
void board_init();
|
||||
|
||||
#endif //__MCU_INIT_H
|
||||
|
47
board/GigaDevice_GD32VF103C_EVAL/BSP/Inc/picture.h
Normal file
47
board/GigaDevice_GD32VF103C_EVAL/BSP/Inc/picture.h
Normal file
@@ -0,0 +1,47 @@
|
||||
/*!
|
||||
\file picture.h
|
||||
\brief picture header file
|
||||
|
||||
\version 2019-06-05, V1.0.0, demo for GD32VF103
|
||||
*/
|
||||
|
||||
/*
|
||||
Copyright (c) 2019, GigaDevice Semiconductor Inc.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
3. Neither the name of the copyright holder nor the names of its contributors
|
||||
may be used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef PICTURE_H
|
||||
#define PICTURE_H
|
||||
|
||||
#include "gd32vf103.h"
|
||||
|
||||
#define BMP_HEADSIZE (8)
|
||||
|
||||
extern const uint8_t picture[];
|
||||
extern const uint8_t gImage_logo[];
|
||||
extern const uint8_t image_off[];
|
||||
extern const uint8_t image_on[];
|
||||
|
||||
#endif /* PICTURE_H */
|
107
board/GigaDevice_GD32VF103C_EVAL/BSP/Inc/touch_panel.h
Normal file
107
board/GigaDevice_GD32VF103C_EVAL/BSP/Inc/touch_panel.h
Normal file
@@ -0,0 +1,107 @@
|
||||
/*!
|
||||
\file touch_panel.h
|
||||
\brief LCD touch panel driver header file
|
||||
|
||||
\version 2019-06-05, V1.0.0, demo for GD32VF103
|
||||
*/
|
||||
|
||||
/*
|
||||
Copyright (c) 2019, GigaDevice Semiconductor Inc.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
3. Neither the name of the copyright holder nor the names of its contributors
|
||||
may be used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef TOUCH_PANEL_H
|
||||
#define TOUCH_PANEL_H
|
||||
|
||||
#include "gd32vf103.h"
|
||||
|
||||
#define AD_Left 300
|
||||
#define AD_Right 3850
|
||||
#define AD_Top 220
|
||||
#define AD_Bottom 3850
|
||||
|
||||
#define LCD_X 240
|
||||
#define LCD_Y 320
|
||||
|
||||
#define CH_X 0XD2
|
||||
#define CH_Y 0X92
|
||||
|
||||
/* SPI SCK pin */
|
||||
#define SPI_SCK_PIN GPIO_PIN_5
|
||||
#define SPI_SCK_PORT GPIOA
|
||||
#define SPI_SCK_LOW() gpio_bit_reset(SPI_SCK_PORT, SPI_SCK_PIN)
|
||||
#define SPI_SCK_HIGH() gpio_bit_set(SPI_SCK_PORT, SPI_SCK_PIN)
|
||||
|
||||
/* SPI MOSI pin */
|
||||
#define SPI_MOSI_PIN GPIO_PIN_7
|
||||
#define SPI_MOSI_PORT GPIOA
|
||||
#define SPI_MOSI_LOW() gpio_bit_reset(SPI_MOSI_PORT, SPI_MOSI_PIN)
|
||||
#define SPI_MOSI_HIGH() gpio_bit_set(SPI_MOSI_PORT, SPI_MOSI_PIN)
|
||||
|
||||
/* SPI MISO pin */
|
||||
#define SPI_MISO_PIN GPIO_PIN_6
|
||||
#define SPI_MISO_PORT GPIOA
|
||||
#define SPI_MISO_READ() gpio_input_bit_get(SPI_MISO_PORT, SPI_MISO_PIN)
|
||||
|
||||
/* SPI Chip select pin */
|
||||
#define SPI_TOUCH_CS_PIN GPIO_PIN_4
|
||||
#define SPI_TOUCH_CS_PORT GPIOE
|
||||
#define SPI_TOUCH_CS_LOW() gpio_bit_reset(SPI_TOUCH_CS_PORT, SPI_TOUCH_CS_PIN)
|
||||
#define SPI_TOUCH_CS_HIGH() gpio_bit_set(SPI_TOUCH_CS_PORT, SPI_TOUCH_CS_PIN)
|
||||
|
||||
/* LCD touch interrupt request pin */
|
||||
#define TOUCH_PEN_INT_PIN GPIO_PIN_5
|
||||
#define TOUCH_PEN_INT_PORT GPIOE
|
||||
#define TOUCH_PEN_INT_READ() gpio_input_bit_get(TOUCH_PEN_INT_PORT, TOUCH_PEN_INT_PIN)
|
||||
|
||||
|
||||
/* touch panel gpio configure */
|
||||
void touch_panel_gpio_configure(void);
|
||||
/* touch start */
|
||||
void touch_start(void);
|
||||
/* write data to touch screen */
|
||||
void touch_write(uint8_t d);
|
||||
/* read the touch AD value */
|
||||
uint16_t touch_read(void);
|
||||
/* read the touch pen interrupt request signal */
|
||||
FlagStatus touch_pen_irq(void);
|
||||
/* get the AD sample value of touch location at X coordinate */
|
||||
uint16_t touch_ad_x_get(void);
|
||||
/* get the AD sample value of touch location at Y coordinate */
|
||||
uint16_t touch_ad_y_get(void);
|
||||
/* get channel X+ AD average sample value */
|
||||
uint16_t touch_average_ad_x_get(void);
|
||||
/* get channel Y+ AD average sample value */
|
||||
uint16_t touch_average_ad_y_get(void);
|
||||
/* get X coordinate value of touch point on LCD screen */
|
||||
uint16_t touch_coordinate_x_get(uint16_t adx);
|
||||
/* get Y coordinate value of touch point on LCD screen */
|
||||
uint16_t touch_coordinate_y_get(uint16_t ady);
|
||||
|
||||
uint16_t touch_data_filter(uint8_t channel_select);
|
||||
ErrStatus touch_ad_xy_get(uint16_t *ad_x, uint16_t *ad_y);
|
||||
ErrStatus touch_scan(void);
|
||||
|
||||
#endif /* TOUCH_PANEL_H */
|
607
board/GigaDevice_GD32VF103C_EVAL/BSP/Src/gd32vf103v_lcd_eval.c
Normal file
607
board/GigaDevice_GD32VF103C_EVAL/BSP/Src/gd32vf103v_lcd_eval.c
Normal file
@@ -0,0 +1,607 @@
|
||||
/*!
|
||||
\file gd32vf103v_lcd_eval.c
|
||||
\brief LCD driver functions
|
||||
|
||||
\version 2019-06-05, V1.0.1, demo for GD32VF103
|
||||
\version 2019-09-18, V1.0.2, demo for GD32VF103
|
||||
*/
|
||||
|
||||
/*
|
||||
Copyright (c) 2019, GigaDevice Semiconductor Inc.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
3. Neither the name of the copyright holder nor the names of its contributors
|
||||
may be used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "gd32vf103v_lcd_eval.h"
|
||||
#include "lcd_font.h"
|
||||
|
||||
#define LCD_ILI9320 0x9320
|
||||
#define LCD_ILI9325 0x9325
|
||||
|
||||
#define ABS(X) ((X) > 0 ? (X) : -(X))
|
||||
|
||||
uint16_t device_code;
|
||||
|
||||
/*!
|
||||
\brief lcd peripheral initialize
|
||||
\param[in] none
|
||||
\param[out] none
|
||||
\retval none
|
||||
*/
|
||||
void exmc_lcd_init(void)
|
||||
{
|
||||
exmc_norsram_parameter_struct lcd_init_struct;
|
||||
exmc_norsram_timing_parameter_struct lcd_timing_init_struct;
|
||||
|
||||
/* EXMC clock enable */
|
||||
rcu_periph_clock_enable(RCU_EXMC);
|
||||
rcu_periph_clock_enable(RCU_AF);
|
||||
/* GPIO clock enable */
|
||||
rcu_periph_clock_enable(RCU_GPIOD);
|
||||
rcu_periph_clock_enable(RCU_GPIOE);
|
||||
|
||||
/* configure EXMC_D[0~15]*/
|
||||
/* PD14(EXMC_D0), PD15(EXMC_D1),PD0(EXMC_D2), PD1(EXMC_D3), PD8(EXMC_D13), PD9(EXMC_D14), PD10(EXMC_D15) */
|
||||
gpio_init(GPIOD, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_0 | GPIO_PIN_1| GPIO_PIN_8 | GPIO_PIN_9 |
|
||||
GPIO_PIN_10 | GPIO_PIN_14 | GPIO_PIN_15);
|
||||
|
||||
/* PE7(EXMC_D4), PE8(EXMC_D5), PE9(EXMC_D6), PE10(EXMC_D7), PE11(EXMC_D8), PE12(EXMC_D9),
|
||||
PE13(EXMC_D10), PE14(EXMC_D11), PE15(EXMC_D12) */
|
||||
gpio_init(GPIOE, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9 |
|
||||
GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 |
|
||||
GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15);
|
||||
|
||||
/* configure PE2(EXMC_A23) */
|
||||
gpio_init(GPIOE, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_2);
|
||||
|
||||
/* configure NOE and NWE */
|
||||
gpio_init(GPIOD, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_4 | GPIO_PIN_5);
|
||||
|
||||
/* configure EXMC NE0 */
|
||||
gpio_init(GPIOD, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_7);
|
||||
|
||||
lcd_timing_init_struct.bus_latency = 2;
|
||||
lcd_timing_init_struct.asyn_data_setuptime = 10;
|
||||
lcd_timing_init_struct.asyn_address_holdtime = 2;
|
||||
lcd_timing_init_struct.asyn_address_setuptime = 5;
|
||||
|
||||
lcd_init_struct.norsram_region = EXMC_BANK0_NORSRAM_REGION0;
|
||||
lcd_init_struct.asyn_wait = DISABLE;
|
||||
lcd_init_struct.nwait_signal = DISABLE;
|
||||
lcd_init_struct.memory_write = ENABLE;
|
||||
lcd_init_struct.nwait_polarity = EXMC_NWAIT_POLARITY_LOW;
|
||||
lcd_init_struct.databus_width = EXMC_NOR_DATABUS_WIDTH_16B;
|
||||
lcd_init_struct.memory_type = EXMC_MEMORY_TYPE_SRAM;
|
||||
lcd_init_struct.address_data_mux = ENABLE;
|
||||
lcd_init_struct.read_write_timing = &lcd_timing_init_struct;
|
||||
|
||||
exmc_norsram_init(&lcd_init_struct);
|
||||
|
||||
exmc_norsram_enable(EXMC_BANK0_NORSRAM_REGION0);
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
\brief write data to the selected LCD register
|
||||
\param[in] register_id: the selected register id
|
||||
\param[in] value: the register value to be written
|
||||
\param[out] none
|
||||
\retval none
|
||||
*/
|
||||
|
||||
void lcd_register_write(uint16_t register_id,uint16_t value)
|
||||
{
|
||||
*(__IO uint16_t *) (BANK0_LCD_C)= register_id;
|
||||
*(__IO uint16_t *) (BANK0_LCD_D)= value;
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief read the value of LCD register
|
||||
\param[in] register_id: the register id
|
||||
\param[out] none
|
||||
\retval the register value
|
||||
*/
|
||||
uint16_t lcd_register_read(uint8_t register_id)
|
||||
{
|
||||
uint16_t data;
|
||||
*(__IO uint16_t *) (BANK0_LCD_C)= register_id;
|
||||
data = *(__IO uint16_t *) (BANK0_LCD_D);
|
||||
return data;
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief write command to LCD register
|
||||
\param[in] value: the register value to be written
|
||||
\param[out] none
|
||||
\retval none
|
||||
*/
|
||||
void lcd_command_write(uint16_t value)
|
||||
{
|
||||
/* write 16-bit index, then write reg */
|
||||
*(__IO uint16_t *) (BANK0_LCD_C) = value;
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief prepare to write to the LCD GRAM register(R22h)
|
||||
\param[in] none
|
||||
\param[out] none
|
||||
\retval none
|
||||
*/
|
||||
void lcd_gram_write_prepare(void)
|
||||
{
|
||||
*(__IO uint16_t *) (BANK0_LCD_C) = 0x0022;
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief write RGB code to the LCD GRAM register
|
||||
\param[in] rgb_code: the pixel color in RGB mode (5-6-5)
|
||||
\param[out] none
|
||||
\retval none
|
||||
*/
|
||||
void lcd_gram_write(uint16_t rgb_code)
|
||||
{
|
||||
/* write 16-bit GRAM register */
|
||||
*(__IO uint16_t *) (BANK0_LCD_D) = rgb_code;
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief read data from GRAM
|
||||
\param[in] none
|
||||
\param[out] none
|
||||
\retval GRAM value
|
||||
*/
|
||||
uint16_t lcd_gram_read(void)
|
||||
{
|
||||
uint16_t data;
|
||||
|
||||
/* write GRAM register (R22h) */
|
||||
*(__IO uint16_t *) (BANK0_LCD_C) = 0x0022;
|
||||
/* dummy read (invalid data) */
|
||||
data = *(__IO uint16_t *) (BANK0_LCD_D);
|
||||
|
||||
data = *(__IO uint16_t *) (BANK0_LCD_D);
|
||||
return data;
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief initialize the LCD
|
||||
\param[in] none
|
||||
\param[out] none
|
||||
\retval none
|
||||
*/
|
||||
void lcd_init(void)
|
||||
{
|
||||
__IO uint16_t i;
|
||||
|
||||
/* read the LCD controller device code */
|
||||
device_code = lcd_register_read(0x0000);
|
||||
|
||||
if(0x8989 == device_code){ // SSD1289
|
||||
lcd_register_write(0x0000,0x0001);
|
||||
lcd_register_write(0x0003,0xA8A4);
|
||||
lcd_register_write(0x000C,0x0000);
|
||||
lcd_register_write(0x000D,0x080C);
|
||||
lcd_register_write(0x000E,0x2B00);
|
||||
lcd_register_write(0x001E,0x00B0);
|
||||
lcd_register_write(0x0001,0x2B3F);
|
||||
lcd_register_write(0x0002,0x0600);
|
||||
lcd_register_write(0x0010,0x0000);
|
||||
lcd_register_write(0x0011,0x6070);
|
||||
lcd_register_write(0x0005,0x0000);
|
||||
lcd_register_write(0x0006,0x0000);
|
||||
lcd_register_write(0x0016,0xEF1C);
|
||||
lcd_register_write(0x0017,0x0003);
|
||||
lcd_register_write(0x0007,0x0233);
|
||||
lcd_register_write(0x000B,0x0000);
|
||||
lcd_register_write(0x000F,0x0000);
|
||||
lcd_register_write(0x0041,0x0000);
|
||||
lcd_register_write(0x0042,0x0000);
|
||||
lcd_register_write(0x0048,0x0000);
|
||||
lcd_register_write(0x0049,0x013F);
|
||||
lcd_register_write(0x004A,0x0000);
|
||||
lcd_register_write(0x004B,0x0000);
|
||||
lcd_register_write(0x0044,0xEF00);
|
||||
lcd_register_write(0x0045,0x0000);
|
||||
lcd_register_write(0x0046,0x013F);
|
||||
lcd_register_write(0x0030,0x0707);
|
||||
lcd_register_write(0x0031,0x0204);
|
||||
lcd_register_write(0x0032,0x0204);
|
||||
lcd_register_write(0x0033,0x0502);
|
||||
lcd_register_write(0x0034,0x0507);
|
||||
lcd_register_write(0x0035,0x0204);
|
||||
lcd_register_write(0x0036,0x0204);
|
||||
lcd_register_write(0x0037,0x0502);
|
||||
lcd_register_write(0x003A,0x0302);
|
||||
lcd_register_write(0x003B,0x0302);
|
||||
lcd_register_write(0x0023,0x0000);
|
||||
lcd_register_write(0x0024,0x0000);
|
||||
lcd_register_write(0x0025,0x8000);
|
||||
lcd_register_write(0x004e,0);
|
||||
lcd_register_write(0x004f,0);
|
||||
}else if((0x9320 == device_code) || (0x9300 == device_code)){ //ILI9320
|
||||
lcd_register_write(0x01,0x0100); //driver output control
|
||||
lcd_register_write(0x02,0x0700); //lcd driver waveform control
|
||||
lcd_register_write(0x03,0x1020); //entry mode set
|
||||
|
||||
lcd_register_write(0x04,0x0000); //resizing control
|
||||
lcd_register_write(0x08,0x0202); //display control 2
|
||||
lcd_register_write(0x09,0x0000); //display control 3
|
||||
lcd_register_write(0x0a,0x0000); //frame cycle control
|
||||
lcd_register_write(0x0c,(1<<0)); //extern display interface control 1
|
||||
lcd_register_write(0x0d,0x0000); //frame maker position
|
||||
lcd_register_write(0x0f,0x0000); //extern display interface control 2
|
||||
|
||||
for(i=50000;i>0;i--);
|
||||
lcd_register_write(0x07,0x0101); //display control
|
||||
for(i=50000;i>0;i--);
|
||||
|
||||
lcd_register_write(0x10,(1<<12)|(0<<8)|(1<<7)|(1<<6)|(0<<4)); //power control 1
|
||||
lcd_register_write(0x11,0x0007); //power control 2
|
||||
lcd_register_write(0x12,(1<<8)|(1<<4)|(0<<0)); //power control 3
|
||||
lcd_register_write(0x13,0x0b00); //power control 4
|
||||
lcd_register_write(0x29,0x0000); //power control 7
|
||||
lcd_register_write(0x2b,(1<<14)|(1<<4));
|
||||
lcd_register_write(0x50,0); //set x start
|
||||
lcd_register_write(0x51,239); //set x end
|
||||
lcd_register_write(0x52,0); //set y start
|
||||
lcd_register_write(0x53,319); //set y end
|
||||
|
||||
lcd_register_write(0x60,0x2700); //driver output control
|
||||
lcd_register_write(0x61,0x0001); //driver output control
|
||||
lcd_register_write(0x6a,0x0000); //vertical srcoll control
|
||||
|
||||
lcd_register_write(0x80,0x0000); //display position? partial display 1
|
||||
lcd_register_write(0x81,0x0000); //ram address start? partial display 1
|
||||
lcd_register_write(0x82,0x0000); //ram address end-partial display 1
|
||||
lcd_register_write(0x83,0x0000); //display position? partial display 2
|
||||
lcd_register_write(0x84,0x0000); //ram address start? partial display 2
|
||||
lcd_register_write(0x85,0x0000); //ram address end? partial display 2
|
||||
|
||||
lcd_register_write(0x90,(0<<7)|(16<<0)); //frame cycle control
|
||||
lcd_register_write(0x92,0x0000); //panel interface control 2
|
||||
lcd_register_write(0x93,0x0001); //panel interface control 3
|
||||
lcd_register_write(0x95,0x0110); //frame cycle control
|
||||
lcd_register_write(0x97,(0<<8));
|
||||
lcd_register_write(0x98,0x0000); //frame cycle control
|
||||
for(i=50000;i>0;i--);
|
||||
lcd_register_write(0x07,0x0173);
|
||||
for(i=50000;i>0;i--);
|
||||
|
||||
}else{
|
||||
return;
|
||||
}
|
||||
|
||||
for(i=50000;i>0;i--);
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief set the cursor of LCD
|
||||
\param[in] x: the row-coordinate
|
||||
\param[in] y: the column-coordinate
|
||||
\param[out] none
|
||||
\retval none
|
||||
*/
|
||||
void lcd_cursor_set(uint16_t x,uint16_t y)
|
||||
{
|
||||
lcd_register_write(0x004e,x);
|
||||
lcd_register_write(0x004f,y);
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief clear the LCD screen to the specified color
|
||||
\param[in] color: specified screen color
|
||||
\param[out] none
|
||||
\retval none
|
||||
*/
|
||||
void lcd_clear(uint16_t color)
|
||||
{
|
||||
uint32_t index=0;
|
||||
if(0x8989 == device_code){ // SSD1289
|
||||
lcd_cursor_set(0,0);
|
||||
/* prepare to write GRAM */
|
||||
lcd_gram_write_prepare();
|
||||
for(index=0; index<LCD_PIXEL_WIDTH*LCD_PIXEL_HEIGHT; index++){
|
||||
*(__IO uint16_t *) (BANK0_LCD_D) = color;
|
||||
}
|
||||
}else if((0x9320 == device_code) || (0x9300 == device_code)){ //ILI9320
|
||||
lcd_register_write(0x20, 0);
|
||||
lcd_register_write(0x21, 0);
|
||||
lcd_command_write(0x22);
|
||||
for(index=0; index<LCD_PIXEL_WIDTH*LCD_PIXEL_HEIGHT; index++){
|
||||
*(__IO uint16_t *) (BANK0_LCD_D) = color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief set the point according to the specified position and color
|
||||
\param[in] x: the row-coordinate
|
||||
\param[in] y: the column-coordinate
|
||||
\param[in] point: specified color of the point
|
||||
\param[out] none
|
||||
\retval none
|
||||
*/
|
||||
void lcd_point_set(uint16_t x,uint16_t y,uint16_t point)
|
||||
{
|
||||
if ((x > LCD_PIXEL_HEIGHT)||(y > LCD_PIXEL_WIDTH)){
|
||||
return;
|
||||
}
|
||||
if(0x8989 == device_code){ // SSD1289
|
||||
lcd_cursor_set(x,y);
|
||||
lcd_gram_write_prepare();
|
||||
lcd_gram_write(point);
|
||||
}else if((0x9320 == device_code) || (0x9300 == device_code)){ //ILI9320
|
||||
lcd_register_write(0x20, x);
|
||||
lcd_register_write(0x21, y);
|
||||
lcd_register_write(0x22, point);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief get point GRAM according to the specified position
|
||||
\param[in] x: the row-coordinate
|
||||
\param[in] y: the column-coordinate
|
||||
\param[out] none
|
||||
\retval GRAM value of point
|
||||
*/
|
||||
uint16_t lcd_point_get(uint16_t x,uint16_t y)
|
||||
{
|
||||
uint16_t data;
|
||||
|
||||
if ((x > LCD_PIXEL_HEIGHT)||(y > LCD_PIXEL_WIDTH)){
|
||||
return 0;
|
||||
}
|
||||
|
||||
lcd_cursor_set(x,y);
|
||||
data = lcd_gram_read();
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief set window area
|
||||
\param[in] start_x: the start position of row-coordinate
|
||||
\param[in] start_y: the start position of column-coordinate
|
||||
\param[in] end_x: the end position of row-coordinate
|
||||
\param[in] end_y: the end position of column-coordinate
|
||||
\param[out] none
|
||||
\retval none
|
||||
*/
|
||||
void lcd_windows_set(uint16_t start_x,uint16_t start_y,uint16_t end_x,uint16_t end_y)
|
||||
{
|
||||
lcd_cursor_set(start_x, start_y);
|
||||
|
||||
lcd_register_write(0x0050, start_x);
|
||||
lcd_register_write(0x0052, start_y);
|
||||
lcd_register_write(0x0051, end_x);
|
||||
lcd_register_write(0x0053, end_y);
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief draw a horizontal line on LCD screen
|
||||
\param[in] x: the row-coordinate
|
||||
\param[in] start_y: the start column-coordinate
|
||||
\param[in] end_y: the end column-coordinate
|
||||
\param[in] color: specified color of the point
|
||||
\param[in] width: line width
|
||||
\param[out] none
|
||||
\retval none
|
||||
*/
|
||||
|
||||
void lcd_hline_draw(uint16_t x,uint16_t start_y,uint16_t end_y,uint16_t color,uint16_t width)
|
||||
{
|
||||
uint16_t i, y;
|
||||
|
||||
for (i = 0; i < width; i++) {
|
||||
uint16_t sx = x + i;
|
||||
|
||||
for (y = start_y; y < end_y; y++) {
|
||||
lcd_point_set(sx, y, color);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief draw a vertical line on LCD screen
|
||||
\param[in] start_x: the start column-coordinate
|
||||
\param[in] end_x: the end column-coordinate
|
||||
\param[in] y: the row-coordinate
|
||||
\param[in] color: specified color of the point
|
||||
\param[in] width: line width
|
||||
\param[out] none
|
||||
\retval none
|
||||
*/
|
||||
|
||||
void lcd_vline_draw(uint16_t start_x,uint16_t end_x,uint16_t y,uint16_t color,uint16_t width)
|
||||
{
|
||||
uint16_t i, x;
|
||||
|
||||
for (i = 0; i < width; i++) {
|
||||
uint16_t sy = y + i;
|
||||
|
||||
for (x = start_x; x < end_x; x++) {
|
||||
lcd_point_set(x, sy, color);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief draw a rectangle according to the specified position and color
|
||||
\param[in] start_x: the start position of row-coordinate
|
||||
\param[in] start_y: the start position of column-coordinate
|
||||
\param[in] end_x: the end position of row-coordinate
|
||||
\param[in] end_y: the end position of column-coordinate
|
||||
\param[in] point: specified color of the point
|
||||
\param[out] none
|
||||
\retval none
|
||||
*/
|
||||
void lcd_rectangle_draw(uint16_t start_x,uint16_t start_y,uint16_t end_x,uint16_t end_y,uint16_t point)
|
||||
{
|
||||
uint16_t x,y;
|
||||
x=start_x;
|
||||
y=start_y;
|
||||
/* draw four lines */
|
||||
for(x=start_x;x<end_x;x++){
|
||||
/* draw a point */
|
||||
lcd_point_set(x,y,point);
|
||||
}
|
||||
for(y=start_y;y<end_y;y++){
|
||||
lcd_point_set(x,y,point);
|
||||
}
|
||||
for(x=end_x;x>start_x;x--){
|
||||
lcd_point_set(x,y,point);
|
||||
}
|
||||
for(y=end_y;y>start_y;y--){
|
||||
lcd_point_set(x,y,point);
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief fill the specified color to a rectangle
|
||||
\param[in] start_x: the start position of row-coordinate
|
||||
\param[in] start_y: the start position of column-coordinate
|
||||
\param[in] end_x: the end position of row-coordinate
|
||||
\param[in] end_y: the end position of column-coordinate
|
||||
\param[in] color: specified color
|
||||
\param[out] none
|
||||
\retval none
|
||||
*/
|
||||
void lcd_rectangle_fill(uint16_t start_x,uint16_t start_y,uint16_t end_x,uint16_t end_y,uint16_t color)
|
||||
{
|
||||
uint16_t x, y;
|
||||
x = start_x;
|
||||
y = start_y;
|
||||
|
||||
for (x = start_x; x < end_x; x++) {
|
||||
for (y = start_y; y < end_y; y++) {
|
||||
lcd_point_set(x, y, color);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief draw a picture on LCD screen according to the specified position
|
||||
\param[in] start_x: the start position of row-coordinate
|
||||
\param[in] start_y: the start position of column-coordinate
|
||||
\param[in] end_x: the end position of row-coordinate
|
||||
\param[in] end_y: the end position of column-coordinate
|
||||
\param[in] pic: the picture pointer
|
||||
\param[out] none
|
||||
\retval none
|
||||
*/
|
||||
void lcd_picture_draw(uint16_t start_x,uint16_t start_y,uint16_t end_x,uint16_t end_y,uint16_t *pic)
|
||||
{
|
||||
uint32_t i, total;
|
||||
uint16_t *picturepointer = pic;
|
||||
uint16_t x,y;
|
||||
|
||||
x = start_x;
|
||||
y = start_y;
|
||||
|
||||
total = (end_x - start_x + 1) * (end_y - start_y + 1);
|
||||
|
||||
for(i = 0; i < total; i ++){
|
||||
/* set point according to the specified position and color */
|
||||
lcd_point_set(x,y,*picturepointer++);
|
||||
x++;
|
||||
if(x > end_x){
|
||||
y++;
|
||||
x = start_x;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief display a char on LCD screen according to the specified position
|
||||
\param[in] x: the start position of row-coordinate
|
||||
\param[in] y: the start position of column-coordinate
|
||||
\param[in] c: the char
|
||||
\param[in] char_color: the color of char
|
||||
\param[in] c_format: the structure of char format
|
||||
font: CHAR_FONT_8_16 or CHAR_FONT_16_24
|
||||
direction: CHAR_DIRECTION_HORIZONTAL or CHAR_DIRECTION_VERTICAL
|
||||
char_color: the color of char
|
||||
bk_color: the color of background
|
||||
\param[out] none
|
||||
\retval none
|
||||
*/
|
||||
void lcd_char_display(uint16_t x,uint16_t y,uint8_t c,char_format_struct c_format)
|
||||
{
|
||||
uint16_t i = 0, j = 0;
|
||||
uint8_t temp_char = 0;
|
||||
uint16_t temp_char_16 = 0;
|
||||
|
||||
if(CHAR_FONT_8_16 == c_format.font){ /* 8x16 ASCII */
|
||||
for (i = 0; i < 16; i++) {
|
||||
temp_char = ascii_8x16[((c - 0x20) * 16) + i];
|
||||
if(CHAR_DIRECTION_HORIZONTAL == c_format.direction){
|
||||
for (j = 0; j < 8; j++) {
|
||||
if (((temp_char >> (7 - j)) & 0x01) == 0x01) {
|
||||
/* set point of char */
|
||||
lcd_point_set(x - i, y + j, c_format.char_color);
|
||||
} else {
|
||||
/* set point of background */
|
||||
lcd_point_set(x - i, y + j, c_format.bk_color);
|
||||
}
|
||||
}
|
||||
}else{
|
||||
for (j = 0; j < 8; j++) {
|
||||
if (((temp_char >> (7 - j)) & 0x01) == 0x01) {
|
||||
/* set point of char */
|
||||
lcd_point_set(x + j, y + i, c_format.char_color);
|
||||
} else {
|
||||
/* set point of background */
|
||||
lcd_point_set(x + j, y + i, c_format.bk_color);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}else if(CHAR_FONT_16_24 == c_format.font){ /* 16x24 ASCII */
|
||||
for (i = 0; i < 24; i++) {
|
||||
temp_char_16 = ASCII_Table_16x24[((c - 0x20) * 24) + i];
|
||||
if(CHAR_DIRECTION_HORIZONTAL == c_format.direction){
|
||||
for (j = 0; j < 16; j++) {
|
||||
if (((temp_char_16 >> j) & 0x01) == 0x01) {
|
||||
/* set point of char */
|
||||
lcd_point_set(x - i, y + j, c_format.char_color);
|
||||
} else {
|
||||
/* set point of background */
|
||||
lcd_point_set(x - i, y + j, c_format.bk_color);
|
||||
}
|
||||
}
|
||||
}else{
|
||||
for (j = 0; j < 16; j++) {
|
||||
if (((temp_char_16 >> j) & 0x01) == 0x01) {
|
||||
/* set point of char */
|
||||
lcd_point_set(x + j, y + i, c_format.char_color);
|
||||
} else {
|
||||
/* set point of background */
|
||||
lcd_point_set(x + j, y + i, c_format.bk_color);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
711
board/GigaDevice_GD32VF103C_EVAL/BSP/Src/lcd_font.c
Normal file
711
board/GigaDevice_GD32VF103C_EVAL/BSP/Src/lcd_font.c
Normal file
@@ -0,0 +1,711 @@
|
||||
/*!
|
||||
\file lcd_font.c
|
||||
\brief text fonts driver
|
||||
|
||||
\version 2019-06-05, V1.0.0, demo for GD32VF103
|
||||
*/
|
||||
|
||||
/*
|
||||
Copyright (c) 2019, GigaDevice Semiconductor Inc.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
3. Neither the name of the copyright holder nor the names of its contributors
|
||||
may be used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "lcd_font.h"
|
||||
|
||||
unsigned char const ascii_8x16[1536] = {
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x18,0x3C,0x3C,0x3C,0x18,0x18,0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00,
|
||||
0x00,0x66,0x66,0x66,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x6C,0x6C,0xFE,0x6C,0x6C,0x6C,0xFE,0x6C,0x6C,0x00,0x00,0x00,0x00,
|
||||
0x18,0x18,0x7C,0xC6,0xC2,0xC0,0x7C,0x06,0x86,0xC6,0x7C,0x18,0x18,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0xC2,0xC6,0x0C,0x18,0x30,0x60,0xC6,0x86,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x38,0x6C,0x6C,0x38,0x76,0xDC,0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00,
|
||||
0x00,0x30,0x30,0x30,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x0C,0x18,0x30,0x30,0x30,0x30,0x30,0x30,0x18,0x0C,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x30,0x18,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x18,0x30,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x66,0x3C,0xFF,0x3C,0x66,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x7E,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x30,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x02,0x06,0x0C,0x18,0x30,0x60,0xC0,0x80,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x7C,0xC6,0xC6,0xCE,0xD6,0xD6,0xE6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x18,0x38,0x78,0x18,0x18,0x18,0x18,0x18,0x18,0x7E,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x7C,0xC6,0x06,0x0C,0x18,0x30,0x60,0xC0,0xC6,0xFE,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x7C,0xC6,0x06,0x06,0x3C,0x06,0x06,0x06,0xC6,0x7C,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x0C,0x1C,0x3C,0x6C,0xCC,0xFE,0x0C,0x0C,0x0C,0x1E,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0xFE,0xC0,0xC0,0xC0,0xFC,0x0E,0x06,0x06,0xC6,0x7C,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x38,0x60,0xC0,0xC0,0xFC,0xC6,0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0xFE,0xC6,0x06,0x06,0x0C,0x18,0x30,0x30,0x30,0x30,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x7C,0xC6,0xC6,0xC6,0x7C,0xC6,0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x7C,0xC6,0xC6,0xC6,0x7E,0x06,0x06,0x06,0x0C,0x78,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x18,0x18,0x30,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x06,0x0C,0x18,0x30,0x60,0x30,0x18,0x0C,0x06,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x60,0x30,0x18,0x0C,0x06,0x0C,0x18,0x30,0x60,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x7C,0xC6,0xC6,0x0C,0x18,0x18,0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x7C,0xC6,0xC6,0xDE,0xDE,0xDE,0xDC,0xC0,0x7C,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x10,0x38,0x6C,0xC6,0xC6,0xFE,0xC6,0xC6,0xC6,0xC6,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0xFC,0x66,0x66,0x66,0x7C,0x66,0x66,0x66,0x66,0xFC,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x3C,0x66,0xC2,0xC0,0xC0,0xC0,0xC0,0xC2,0x66,0x3C,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0xF8,0x6C,0x66,0x66,0x66,0x66,0x66,0x66,0x6C,0xF8,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0xFE,0x66,0x62,0x68,0x78,0x68,0x60,0x62,0x66,0xFE,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0xFE,0x66,0x62,0x68,0x78,0x68,0x60,0x60,0x60,0xF0,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x3C,0x66,0xC2,0xC0,0xC0,0xDE,0xC6,0xC6,0x66,0x3A,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xFE,0xC6,0xC6,0xC6,0xC6,0xC6,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x3C,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x1E,0x0C,0x0C,0x0C,0x0C,0x0C,0xCC,0xCC,0xCC,0x78,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0xE6,0x66,0x6C,0x6C,0x78,0x78,0x6C,0x66,0x66,0xE6,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0xF0,0x60,0x60,0x60,0x60,0x60,0x60,0x62,0x66,0xFE,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0xC6,0xEE,0xFE,0xFE,0xD6,0xC6,0xC6,0xC6,0xC6,0xC6,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0xC6,0xE6,0xF6,0xFE,0xDE,0xCE,0xC6,0xC6,0xC6,0xC6,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x38,0x6C,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0x6C,0x38,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0xFC,0x66,0x66,0x66,0x7C,0x60,0x60,0x60,0x60,0xF0,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x7C,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xD6,0xDE,0x7C,0x0C,0x0E,0x00,0x00,
|
||||
0x00,0x00,0xFC,0x66,0x66,0x66,0x7C,0x6C,0x66,0x66,0x66,0xE6,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x7C,0xC6,0xC6,0x60,0x38,0x0C,0x06,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x7E,0x7E,0x5A,0x18,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0x6C,0x38,0x10,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xD6,0xD6,0xFE,0x6C,0x6C,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0xC6,0xC6,0x6C,0x6C,0x38,0x38,0x6C,0x6C,0xC6,0xC6,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x66,0x66,0x66,0x66,0x3C,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0xFE,0xC6,0x86,0x0C,0x18,0x30,0x60,0xC2,0xC6,0xFE,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x3C,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x3C,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x80,0xC0,0xE0,0x70,0x38,0x1C,0x0E,0x06,0x02,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x00,0x00,0x00,0x00,
|
||||
0x10,0x38,0x6C,0xC6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,
|
||||
0x30,0x30,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x78,0x0C,0x7C,0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0xE0,0x60,0x60,0x78,0x6C,0x66,0x66,0x66,0x66,0xDC,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xC0,0xC0,0xC0,0xC6,0x7C,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x1C,0x0C,0x0C,0x3C,0x6C,0xCC,0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xFE,0xC0,0xC0,0xC6,0x7C,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x38,0x6C,0x64,0x60,0xF0,0x60,0x60,0x60,0x60,0xF0,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x76,0xCC,0xCC,0xCC,0xCC,0xCC,0x7C,0x0C,0xCC,0x78,0x00,
|
||||
0x00,0x00,0xE0,0x60,0x60,0x6C,0x76,0x66,0x66,0x66,0x66,0xE6,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x18,0x18,0x00,0x38,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x06,0x06,0x00,0x0E,0x06,0x06,0x06,0x06,0x06,0x06,0x66,0x66,0x3C,0x00,
|
||||
0x00,0x00,0xE0,0x60,0x60,0x66,0x6C,0x78,0x78,0x6C,0x66,0xE6,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x38,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0xEC,0xFE,0xD6,0xD6,0xD6,0xD6,0xD6,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0xDC,0x66,0x66,0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xC6,0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0xDC,0x66,0x66,0x66,0x66,0x66,0x7C,0x60,0x60,0xF0,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x76,0xCC,0xCC,0xCC,0xCC,0xCC,0x7C,0x0C,0x0C,0x1E,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0xDC,0x76,0x62,0x60,0x60,0x60,0xF0,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0x60,0x38,0x0C,0xC6,0x7C,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x10,0x30,0x30,0xFC,0x30,0x30,0x30,0x30,0x36,0x1C,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x3C,0x18,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0xC6,0xC6,0xC6,0xD6,0xD6,0xFE,0x6C,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0xC6,0x6C,0x38,0x38,0x38,0x6C,0xC6,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0x7E,0x06,0x0C,0xF8,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0xFE,0xCC,0x18,0x30,0x60,0xC6,0xFE,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x0E,0x18,0x18,0x18,0x70,0x18,0x18,0x18,0x18,0x0E,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x18,0x18,0x18,0x18,0x00,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x70,0x18,0x18,0x18,0x0E,0x18,0x18,0x18,0x18,0x70,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x76,0xDC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x10,0x38,0x6C,0xC6,0xC6,0xC6,0xFE,0x00,0x00,0x00,0x00,0x00
|
||||
};
|
||||
|
||||
|
||||
|
||||
/* ASCII Table: each character is 16 column (16dots large) and 24 raw (24 dots high) */
|
||||
const uint16_t ASCII_Table_16x24[] =
|
||||
{
|
||||
/**
|
||||
* @brief Space ' '
|
||||
*/
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief '!'
|
||||
*/
|
||||
0x0000, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
|
||||
0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0000, 0x0000,
|
||||
0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief '"'
|
||||
*/
|
||||
0x0000, 0x0000, 0x00CC, 0x00CC, 0x00CC, 0x00CC, 0x00CC, 0x00CC,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief '#'
|
||||
*/
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0C60, 0x0C60,
|
||||
0x0C60, 0x0630, 0x0630, 0x1FFE, 0x1FFE, 0x0630, 0x0738, 0x0318,
|
||||
0x1FFE, 0x1FFE, 0x0318, 0x0318, 0x018C, 0x018C, 0x018C, 0x0000,
|
||||
/**
|
||||
* @brief '$'
|
||||
*/
|
||||
0x0000, 0x0080, 0x03E0, 0x0FF8, 0x0E9C, 0x1C8C, 0x188C, 0x008C,
|
||||
0x0098, 0x01F8, 0x07E0, 0x0E80, 0x1C80, 0x188C, 0x188C, 0x189C,
|
||||
0x0CB8, 0x0FF0, 0x03E0, 0x0080, 0x0080, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief '%'
|
||||
*/
|
||||
0x0000, 0x0000, 0x0000, 0x180E, 0x0C1B, 0x0C11, 0x0611, 0x0611,
|
||||
0x0311, 0x0311, 0x019B, 0x018E, 0x38C0, 0x6CC0, 0x4460, 0x4460,
|
||||
0x4430, 0x4430, 0x4418, 0x6C18, 0x380C, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief '&'
|
||||
*/
|
||||
0x0000, 0x01E0, 0x03F0, 0x0738, 0x0618, 0x0618, 0x0330, 0x01F0,
|
||||
0x00F0, 0x00F8, 0x319C, 0x330E, 0x1E06, 0x1C06, 0x1C06, 0x3F06,
|
||||
0x73FC, 0x21F0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief '''
|
||||
*/
|
||||
0x0000, 0x0000, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief '('
|
||||
*/
|
||||
0x0000, 0x0200, 0x0300, 0x0180, 0x00C0, 0x00C0, 0x0060, 0x0060,
|
||||
0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030,
|
||||
0x0060, 0x0060, 0x00C0, 0x00C0, 0x0180, 0x0300, 0x0200, 0x0000,
|
||||
/**
|
||||
* @brief ')'
|
||||
*/
|
||||
0x0000, 0x0020, 0x0060, 0x00C0, 0x0180, 0x0180, 0x0300, 0x0300,
|
||||
0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600,
|
||||
0x0300, 0x0300, 0x0180, 0x0180, 0x00C0, 0x0060, 0x0020, 0x0000,
|
||||
/**
|
||||
* @brief '*'
|
||||
*/
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00C0, 0x00C0,
|
||||
0x06D8, 0x07F8, 0x01E0, 0x0330, 0x0738, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief '+'
|
||||
*/
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0180, 0x0180,
|
||||
0x0180, 0x0180, 0x0180, 0x3FFC, 0x3FFC, 0x0180, 0x0180, 0x0180,
|
||||
0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief ','
|
||||
*/
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0180, 0x0180, 0x0100, 0x0100, 0x0080, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief '-'
|
||||
*/
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x07E0, 0x07E0, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief '.'
|
||||
*/
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief '/'
|
||||
*/
|
||||
0x0000, 0x0C00, 0x0C00, 0x0600, 0x0600, 0x0600, 0x0300, 0x0300,
|
||||
0x0300, 0x0380, 0x0180, 0x0180, 0x0180, 0x00C0, 0x00C0, 0x00C0,
|
||||
0x0060, 0x0060, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief '0'
|
||||
*/
|
||||
0x0000, 0x03E0, 0x07F0, 0x0E38, 0x0C18, 0x180C, 0x180C, 0x180C,
|
||||
0x180C, 0x180C, 0x180C, 0x180C, 0x180C, 0x180C, 0x0C18, 0x0E38,
|
||||
0x07F0, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief '1'
|
||||
*/
|
||||
0x0000, 0x0100, 0x0180, 0x01C0, 0x01F0, 0x0198, 0x0188, 0x0180,
|
||||
0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
|
||||
0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief '2'
|
||||
*/
|
||||
0x0000, 0x03E0, 0x0FF8, 0x0C18, 0x180C, 0x180C, 0x1800, 0x1800,
|
||||
0x0C00, 0x0600, 0x0300, 0x0180, 0x00C0, 0x0060, 0x0030, 0x0018,
|
||||
0x1FFC, 0x1FFC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief '3'
|
||||
*/
|
||||
0x0000, 0x01E0, 0x07F8, 0x0E18, 0x0C0C, 0x0C0C, 0x0C00, 0x0600,
|
||||
0x03C0, 0x07C0, 0x0C00, 0x1800, 0x1800, 0x180C, 0x180C, 0x0C18,
|
||||
0x07F8, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief '4'
|
||||
*/
|
||||
0x0000, 0x0C00, 0x0E00, 0x0F00, 0x0F00, 0x0D80, 0x0CC0, 0x0C60,
|
||||
0x0C60, 0x0C30, 0x0C18, 0x0C0C, 0x3FFC, 0x3FFC, 0x0C00, 0x0C00,
|
||||
0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief '5'
|
||||
*/
|
||||
0x0000, 0x0FF8, 0x0FF8, 0x0018, 0x0018, 0x000C, 0x03EC, 0x07FC,
|
||||
0x0E1C, 0x1C00, 0x1800, 0x1800, 0x1800, 0x180C, 0x0C1C, 0x0E18,
|
||||
0x07F8, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief '6'
|
||||
*/
|
||||
0x0000, 0x07C0, 0x0FF0, 0x1C38, 0x1818, 0x0018, 0x000C, 0x03CC,
|
||||
0x0FEC, 0x0E3C, 0x1C1C, 0x180C, 0x180C, 0x180C, 0x1C18, 0x0E38,
|
||||
0x07F0, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief '7'
|
||||
*/
|
||||
0x0000, 0x1FFC, 0x1FFC, 0x0C00, 0x0600, 0x0600, 0x0300, 0x0380,
|
||||
0x0180, 0x01C0, 0x00C0, 0x00E0, 0x0060, 0x0060, 0x0070, 0x0030,
|
||||
0x0030, 0x0030, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief '8'
|
||||
*/
|
||||
0x0000, 0x03E0, 0x07F0, 0x0E38, 0x0C18, 0x0C18, 0x0C18, 0x0638,
|
||||
0x07F0, 0x07F0, 0x0C18, 0x180C, 0x180C, 0x180C, 0x180C, 0x0C38,
|
||||
0x0FF8, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief '9'
|
||||
*/
|
||||
0x0000, 0x03E0, 0x07F0, 0x0E38, 0x0C1C, 0x180C, 0x180C, 0x180C,
|
||||
0x1C1C, 0x1E38, 0x1BF8, 0x19E0, 0x1800, 0x0C00, 0x0C00, 0x0E1C,
|
||||
0x07F8, 0x01F0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief ':'
|
||||
*/
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0180, 0x0180,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief ';'
|
||||
*/
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0180, 0x0180,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0180, 0x0180, 0x0100, 0x0100, 0x0080, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief '<'
|
||||
*/
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x1000, 0x1C00, 0x0F80, 0x03E0, 0x00F8, 0x0018, 0x00F8, 0x03E0,
|
||||
0x0F80, 0x1C00, 0x1000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief '='
|
||||
*/
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x1FF8, 0x0000, 0x0000, 0x0000, 0x1FF8, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief '>'
|
||||
*/
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0008, 0x0038, 0x01F0, 0x07C0, 0x1F00, 0x1800, 0x1F00, 0x07C0,
|
||||
0x01F0, 0x0038, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief '?'
|
||||
*/
|
||||
0x0000, 0x03E0, 0x0FF8, 0x0C18, 0x180C, 0x180C, 0x1800, 0x0C00,
|
||||
0x0600, 0x0300, 0x0180, 0x00C0, 0x00C0, 0x00C0, 0x0000, 0x0000,
|
||||
0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief '@'
|
||||
*/
|
||||
0x0000, 0x0000, 0x07E0, 0x1818, 0x2004, 0x29C2, 0x4A22, 0x4411,
|
||||
0x4409, 0x4409, 0x4409, 0x2209, 0x1311, 0x0CE2, 0x4002, 0x2004,
|
||||
0x1818, 0x07E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'A'
|
||||
*/
|
||||
0x0000, 0x0380, 0x0380, 0x06C0, 0x06C0, 0x06C0, 0x0C60, 0x0C60,
|
||||
0x1830, 0x1830, 0x1830, 0x3FF8, 0x3FF8, 0x701C, 0x600C, 0x600C,
|
||||
0xC006, 0xC006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'B'
|
||||
*/
|
||||
0x0000, 0x03FC, 0x0FFC, 0x0C0C, 0x180C, 0x180C, 0x180C, 0x0C0C,
|
||||
0x07FC, 0x0FFC, 0x180C, 0x300C, 0x300C, 0x300C, 0x300C, 0x180C,
|
||||
0x1FFC, 0x07FC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'C'
|
||||
*/
|
||||
0x0000, 0x07C0, 0x1FF0, 0x3838, 0x301C, 0x700C, 0x6006, 0x0006,
|
||||
0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x6006, 0x700C, 0x301C,
|
||||
0x1FF0, 0x07E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'D'
|
||||
*/
|
||||
0x0000, 0x03FE, 0x0FFE, 0x0E06, 0x1806, 0x1806, 0x3006, 0x3006,
|
||||
0x3006, 0x3006, 0x3006, 0x3006, 0x3006, 0x1806, 0x1806, 0x0E06,
|
||||
0x0FFE, 0x03FE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'E'
|
||||
*/
|
||||
0x0000, 0x3FFC, 0x3FFC, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C,
|
||||
0x1FFC, 0x1FFC, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C,
|
||||
0x3FFC, 0x3FFC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'F'
|
||||
*/
|
||||
0x0000, 0x3FF8, 0x3FF8, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
|
||||
0x1FF8, 0x1FF8, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
|
||||
0x0018, 0x0018, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'G'
|
||||
*/
|
||||
0x0000, 0x0FE0, 0x3FF8, 0x783C, 0x600E, 0xE006, 0xC007, 0x0003,
|
||||
0x0003, 0xFE03, 0xFE03, 0xC003, 0xC007, 0xC006, 0xC00E, 0xF03C,
|
||||
0x3FF8, 0x0FE0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'H'
|
||||
*/
|
||||
0x0000, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C,
|
||||
0x3FFC, 0x3FFC, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C,
|
||||
0x300C, 0x300C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'I'
|
||||
*/
|
||||
0x0000, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
|
||||
0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
|
||||
0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'J'
|
||||
*/
|
||||
0x0000, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600,
|
||||
0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0618, 0x0618, 0x0738,
|
||||
0x03F0, 0x01E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'K'
|
||||
*/
|
||||
0x0000, 0x3006, 0x1806, 0x0C06, 0x0606, 0x0306, 0x0186, 0x00C6,
|
||||
0x0066, 0x0076, 0x00DE, 0x018E, 0x0306, 0x0606, 0x0C06, 0x1806,
|
||||
0x3006, 0x6006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'L'
|
||||
*/
|
||||
0x0000, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
|
||||
0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
|
||||
0x1FF8, 0x1FF8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'M'
|
||||
*/
|
||||
0x0000, 0xE00E, 0xF01E, 0xF01E, 0xF01E, 0xD836, 0xD836, 0xD836,
|
||||
0xD836, 0xCC66, 0xCC66, 0xCC66, 0xC6C6, 0xC6C6, 0xC6C6, 0xC6C6,
|
||||
0xC386, 0xC386, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'N'
|
||||
*/
|
||||
0x0000, 0x300C, 0x301C, 0x303C, 0x303C, 0x306C, 0x306C, 0x30CC,
|
||||
0x30CC, 0x318C, 0x330C, 0x330C, 0x360C, 0x360C, 0x3C0C, 0x3C0C,
|
||||
0x380C, 0x300C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'O'
|
||||
*/
|
||||
0x0000, 0x07E0, 0x1FF8, 0x381C, 0x700E, 0x6006, 0xC003, 0xC003,
|
||||
0xC003, 0xC003, 0xC003, 0xC003, 0xC003, 0x6006, 0x700E, 0x381C,
|
||||
0x1FF8, 0x07E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'P'
|
||||
*/
|
||||
0x0000, 0x0FFC, 0x1FFC, 0x380C, 0x300C, 0x300C, 0x300C, 0x300C,
|
||||
0x180C, 0x1FFC, 0x07FC, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C,
|
||||
0x000C, 0x000C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'Q'
|
||||
*/
|
||||
0x0000, 0x07E0, 0x1FF8, 0x381C, 0x700E, 0x6006, 0xE003, 0xC003,
|
||||
0xC003, 0xC003, 0xC003, 0xC003, 0xE007, 0x6306, 0x3F0E, 0x3C1C,
|
||||
0x3FF8, 0xF7E0, 0xC000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'R'
|
||||
*/
|
||||
0x0000, 0x0FFE, 0x1FFE, 0x3806, 0x3006, 0x3006, 0x3006, 0x3806,
|
||||
0x1FFE, 0x07FE, 0x0306, 0x0606, 0x0C06, 0x1806, 0x1806, 0x3006,
|
||||
0x3006, 0x6006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'S'
|
||||
*/
|
||||
0x0000, 0x03E0, 0x0FF8, 0x0C1C, 0x180C, 0x180C, 0x000C, 0x001C,
|
||||
0x03F8, 0x0FE0, 0x1E00, 0x3800, 0x3006, 0x3006, 0x300E, 0x1C1C,
|
||||
0x0FF8, 0x07E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'T'
|
||||
*/
|
||||
0x0000, 0x7FFE, 0x7FFE, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
|
||||
0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
|
||||
0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'U'
|
||||
*/
|
||||
0x0000, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C,
|
||||
0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x1818,
|
||||
0x1FF8, 0x07E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'V'
|
||||
*/
|
||||
0x0000, 0x6003, 0x3006, 0x3006, 0x3006, 0x180C, 0x180C, 0x180C,
|
||||
0x0C18, 0x0C18, 0x0E38, 0x0630, 0x0630, 0x0770, 0x0360, 0x0360,
|
||||
0x01C0, 0x01C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'W'
|
||||
*/
|
||||
0x0000, 0x6003, 0x61C3, 0x61C3, 0x61C3, 0x3366, 0x3366, 0x3366,
|
||||
0x3366, 0x3366, 0x3366, 0x1B6C, 0x1B6C, 0x1B6C, 0x1A2C, 0x1E3C,
|
||||
0x0E38, 0x0E38, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'X'
|
||||
*/
|
||||
0x0000, 0xE00F, 0x700C, 0x3018, 0x1830, 0x0C70, 0x0E60, 0x07C0,
|
||||
0x0380, 0x0380, 0x03C0, 0x06E0, 0x0C70, 0x1C30, 0x1818, 0x300C,
|
||||
0x600E, 0xE007, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'Y'
|
||||
*/
|
||||
0x0000, 0xC003, 0x6006, 0x300C, 0x381C, 0x1838, 0x0C30, 0x0660,
|
||||
0x07E0, 0x03C0, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
|
||||
0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'Z'
|
||||
*/
|
||||
0x0000, 0x7FFC, 0x7FFC, 0x6000, 0x3000, 0x1800, 0x0C00, 0x0600,
|
||||
0x0300, 0x0180, 0x00C0, 0x0060, 0x0030, 0x0018, 0x000C, 0x0006,
|
||||
0x7FFE, 0x7FFE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief '['
|
||||
*/
|
||||
0x0000, 0x03E0, 0x03E0, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060,
|
||||
0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060,
|
||||
0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x03E0, 0x03E0, 0x0000,
|
||||
/**
|
||||
* @brief '\'
|
||||
*/
|
||||
0x0000, 0x0030, 0x0030, 0x0060, 0x0060, 0x0060, 0x00C0, 0x00C0,
|
||||
0x00C0, 0x01C0, 0x0180, 0x0180, 0x0180, 0x0300, 0x0300, 0x0300,
|
||||
0x0600, 0x0600, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief ']'
|
||||
*/
|
||||
0x0000, 0x03E0, 0x03E0, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
|
||||
0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
|
||||
0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x03E0, 0x03E0, 0x0000,
|
||||
/**
|
||||
* @brief '^'
|
||||
*/
|
||||
0x0000, 0x0000, 0x01C0, 0x01C0, 0x0360, 0x0360, 0x0360, 0x0630,
|
||||
0x0630, 0x0C18, 0x0C18, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief '_'
|
||||
*/
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief '''
|
||||
*/
|
||||
0x0000, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'a'
|
||||
*/
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03F0, 0x07F8,
|
||||
0x0C1C, 0x0C0C, 0x0F00, 0x0FF0, 0x0CF8, 0x0C0C, 0x0C0C, 0x0F1C,
|
||||
0x0FF8, 0x18F0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'b'
|
||||
*/
|
||||
0x0000, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x03D8, 0x0FF8,
|
||||
0x0C38, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x0C38,
|
||||
0x0FF8, 0x03D8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'c'
|
||||
*/
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03C0, 0x07F0,
|
||||
0x0E30, 0x0C18, 0x0018, 0x0018, 0x0018, 0x0018, 0x0C18, 0x0E30,
|
||||
0x07F0, 0x03C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'd'
|
||||
*/
|
||||
0x0000, 0x1800, 0x1800, 0x1800, 0x1800, 0x1800, 0x1BC0, 0x1FF0,
|
||||
0x1C30, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1C30,
|
||||
0x1FF0, 0x1BC0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'e'
|
||||
*/
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03C0, 0x0FF0,
|
||||
0x0C30, 0x1818, 0x1FF8, 0x1FF8, 0x0018, 0x0018, 0x1838, 0x1C30,
|
||||
0x0FF0, 0x07C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'f'
|
||||
*/
|
||||
0x0000, 0x0F80, 0x0FC0, 0x00C0, 0x00C0, 0x00C0, 0x07F0, 0x07F0,
|
||||
0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,
|
||||
0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'g'
|
||||
*/
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0DE0, 0x0FF8,
|
||||
0x0E18, 0x0C0C, 0x0C0C, 0x0C0C, 0x0C0C, 0x0C0C, 0x0C0C, 0x0E18,
|
||||
0x0FF8, 0x0DE0, 0x0C00, 0x0C0C, 0x061C, 0x07F8, 0x01F0, 0x0000,
|
||||
/**
|
||||
* @brief 'h'
|
||||
*/
|
||||
0x0000, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x07D8, 0x0FF8,
|
||||
0x1C38, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818,
|
||||
0x1818, 0x1818, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'i'
|
||||
*/
|
||||
0x0000, 0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x00C0, 0x00C0,
|
||||
0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,
|
||||
0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'j'
|
||||
*/
|
||||
0x0000, 0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x00C0, 0x00C0,
|
||||
0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,
|
||||
0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00F8, 0x0078, 0x0000,
|
||||
/**
|
||||
* @brief 'k'
|
||||
*/
|
||||
0x0000, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x0C0C, 0x060C,
|
||||
0x030C, 0x018C, 0x00CC, 0x006C, 0x00FC, 0x019C, 0x038C, 0x030C,
|
||||
0x060C, 0x0C0C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'l'
|
||||
*/
|
||||
0x0000, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,
|
||||
0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,
|
||||
0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'm'
|
||||
*/
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3C7C, 0x7EFF,
|
||||
0xE3C7, 0xC183, 0xC183, 0xC183, 0xC183, 0xC183, 0xC183, 0xC183,
|
||||
0xC183, 0xC183, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'n'
|
||||
*/
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0798, 0x0FF8,
|
||||
0x1C38, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818,
|
||||
0x1818, 0x1818, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'o'
|
||||
*/
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03C0, 0x0FF0,
|
||||
0x0C30, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x0C30,
|
||||
0x0FF0, 0x03C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'p'
|
||||
*/
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03D8, 0x0FF8,
|
||||
0x0C38, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x0C38,
|
||||
0x0FF8, 0x03D8, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0000,
|
||||
/**
|
||||
* @brief 'q'
|
||||
*/
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1BC0, 0x1FF0,
|
||||
0x1C30, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1C30,
|
||||
0x1FF0, 0x1BC0, 0x1800, 0x1800, 0x1800, 0x1800, 0x1800, 0x0000,
|
||||
/**
|
||||
* @brief 'r'
|
||||
*/
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x07B0, 0x03F0,
|
||||
0x0070, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030,
|
||||
0x0030, 0x0030, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 's'
|
||||
*/
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03E0, 0x03F0,
|
||||
0x0E38, 0x0C18, 0x0038, 0x03F0, 0x07C0, 0x0C00, 0x0C18, 0x0E38,
|
||||
0x07F0, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 't'
|
||||
*/
|
||||
0x0000, 0x0000, 0x0080, 0x00C0, 0x00C0, 0x00C0, 0x07F0, 0x07F0,
|
||||
0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,
|
||||
0x07C0, 0x0780, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'u'
|
||||
*/
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1818, 0x1818,
|
||||
0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1C38,
|
||||
0x1FF0, 0x19E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'v'
|
||||
*/
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x180C, 0x0C18,
|
||||
0x0C18, 0x0C18, 0x0630, 0x0630, 0x0630, 0x0360, 0x0360, 0x0360,
|
||||
0x01C0, 0x01C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'w'
|
||||
*/
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x41C1, 0x41C1,
|
||||
0x61C3, 0x6363, 0x6363, 0x6363, 0x3636, 0x3636, 0x3636, 0x1C1C,
|
||||
0x1C1C, 0x1C1C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'x'
|
||||
*/
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x381C, 0x1C38,
|
||||
0x0C30, 0x0660, 0x0360, 0x0360, 0x0360, 0x0360, 0x0660, 0x0C30,
|
||||
0x1C38, 0x381C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief 'y'
|
||||
*/
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3018, 0x1830,
|
||||
0x1830, 0x1870, 0x0C60, 0x0C60, 0x0CE0, 0x06C0, 0x06C0, 0x0380,
|
||||
0x0380, 0x0380, 0x0180, 0x0180, 0x01C0, 0x00F0, 0x0070, 0x0000,
|
||||
/**
|
||||
* @brief 'z'
|
||||
*/
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1FFC, 0x1FFC,
|
||||
0x0C00, 0x0600, 0x0300, 0x0180, 0x00C0, 0x0060, 0x0030, 0x0018,
|
||||
0x1FFC, 0x1FFC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief '{'
|
||||
*/
|
||||
0x0000, 0x0300, 0x0180, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,
|
||||
0x00C0, 0x0060, 0x0060, 0x0030, 0x0060, 0x0040, 0x00C0, 0x00C0,
|
||||
0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x0180, 0x0300, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief '|'
|
||||
*/
|
||||
0x0000, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
|
||||
0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
|
||||
0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0000,
|
||||
/**
|
||||
* @brief '}'
|
||||
*/
|
||||
0x0000, 0x0060, 0x00C0, 0x01C0, 0x0180, 0x0180, 0x0180, 0x0180,
|
||||
0x0180, 0x0300, 0x0300, 0x0600, 0x0300, 0x0100, 0x0180, 0x0180,
|
||||
0x0180, 0x0180, 0x0180, 0x0180, 0x00C0, 0x0060, 0x0000, 0x0000,
|
||||
/**
|
||||
* @brief '~'
|
||||
*/
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x10F0, 0x1FF8, 0x0F08, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
};
|
@@ -1,7 +1,16 @@
|
||||
#include "mcu_init.h"
|
||||
|
||||
uint16_t a1=20;
|
||||
uint16_t b1=10;
|
||||
|
||||
|
||||
char_format_struct char_format;
|
||||
|
||||
|
||||
void board_init() {
|
||||
|
||||
uint16_t i;
|
||||
uint8_t led_string[14]="TencentOS tiny";
|
||||
SystemInit();
|
||||
|
||||
rcu_periph_clock_enable(RCU_GPIOC);
|
||||
@@ -12,4 +21,33 @@ void board_init() {
|
||||
|
||||
gpio_bit_reset(GPIOC, GPIO_PIN_0 | GPIO_PIN_2);
|
||||
gpio_bit_reset(GPIOE, GPIO_PIN_0 | GPIO_PIN_1);
|
||||
|
||||
exmc_lcd_init();
|
||||
touch_panel_gpio_configure();
|
||||
|
||||
lcd_init();
|
||||
|
||||
/* clear the LCD screen */
|
||||
lcd_clear(LCD_COLOR_WHITE);
|
||||
|
||||
/* draw the picture of Gigadevice logo */
|
||||
/* if you don't want to draw the picture, you should modify the macro on
|
||||
the line 422th of picture.c file and comment the next line */
|
||||
lcd_picture_draw(0,100,240-1,100+55-1,(uint16_t *)(gImage_logo + BMP_HEADSIZE));
|
||||
|
||||
lcd_picture_draw(60,210,60+120-1,210+95-1,(uint16_t *)(picture + BMP_HEADSIZE));
|
||||
|
||||
/* draw a rectangle */
|
||||
//lcd_rectangle_draw(10,10,230,310,LCD_COLOR_BLUE);
|
||||
|
||||
/* configure char format */
|
||||
char_format.char_color = LCD_COLOR_BLUE;
|
||||
char_format.bk_color = LCD_COLOR_WHITE;
|
||||
char_format.direction = CHAR_DIRECTION_VERTICAL;
|
||||
char_format.font = CHAR_FONT_8_16;
|
||||
|
||||
/* draw character on LCD screen */
|
||||
for (i = 0; i < 14; i++){
|
||||
lcd_char_display((a1+35+8*i), b1+20, *(led_string+i), char_format);
|
||||
}
|
||||
}
|
||||
|
3529
board/GigaDevice_GD32VF103C_EVAL/BSP/Src/picture.c
Normal file
3529
board/GigaDevice_GD32VF103C_EVAL/BSP/Src/picture.c
Normal file
File diff suppressed because it is too large
Load Diff
433
board/GigaDevice_GD32VF103C_EVAL/BSP/Src/touch_panel.c
Normal file
433
board/GigaDevice_GD32VF103C_EVAL/BSP/Src/touch_panel.c
Normal file
@@ -0,0 +1,433 @@
|
||||
/*!
|
||||
\file touch_panel.c
|
||||
\brief LCD touch panel functions
|
||||
|
||||
\version 2019-06-05, V1.0.0, demo for GD32VF103
|
||||
*/
|
||||
|
||||
/*
|
||||
Copyright (c) 2019, GigaDevice Semiconductor Inc.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
3. Neither the name of the copyright holder nor the names of its contributors
|
||||
may be used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "gd32vf103.h"
|
||||
#include "touch_panel.h"
|
||||
#include "math.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
/* number of filter reads */
|
||||
#define FILTER_READ_TIMES 5
|
||||
/* lost value of filter */
|
||||
#define FILTER_LOST_VAL 1
|
||||
/* error range of AD sample value */
|
||||
#define AD_ERR_RANGE 6
|
||||
|
||||
|
||||
uint16_t touch_ad_x=0,touch_ad_y=0;
|
||||
|
||||
/* set or reset touch screen chip select pin */
|
||||
static void spi_cs(uint8_t a);
|
||||
/* set or reset SPI MOSI pin */
|
||||
static void spi_mosi(uint8_t a);
|
||||
/* set or reset touch screen clock SPI SCK pin */
|
||||
static void spi_clk(uint8_t a);
|
||||
/* get SPI MISO pin input status */
|
||||
static FlagStatus spi_miso(void);
|
||||
/* SPI delay function */
|
||||
static void spi_delay(uint16_t i);
|
||||
|
||||
/*!
|
||||
\brief touch panel gpio configure
|
||||
\param[in] none
|
||||
\param[out] none
|
||||
\retval none
|
||||
*/
|
||||
void touch_panel_gpio_configure(void)
|
||||
{
|
||||
/* GPIO clock enable */
|
||||
rcu_periph_clock_enable(RCU_GPIOA);
|
||||
rcu_periph_clock_enable(RCU_GPIOE);
|
||||
|
||||
/* SCK(PA5) pin configure */
|
||||
gpio_init(SPI_SCK_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, SPI_SCK_PIN);
|
||||
/* MOSI(PA7) pin configure */
|
||||
gpio_init(SPI_MOSI_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, SPI_MOSI_PIN);
|
||||
/* MISO(PA6) pins configure */
|
||||
gpio_init(SPI_MISO_PORT, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, SPI_MISO_PIN);
|
||||
|
||||
/* Chip select(SPI-Touch) PE4 pin configure */
|
||||
gpio_init(SPI_TOUCH_CS_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, SPI_TOUCH_CS_PIN);
|
||||
|
||||
/* Touch pen IRQ pin configure */
|
||||
gpio_init(TOUCH_PEN_INT_PORT, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, TOUCH_PEN_INT_PIN);
|
||||
|
||||
/* Set chip select pin high */
|
||||
SPI_TOUCH_CS_HIGH();
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
\brief set or reset touch screen chip select pin
|
||||
\param[in] a: specified the low or high level of chip select pin output
|
||||
\param[out] none
|
||||
\retval none
|
||||
*/
|
||||
static void spi_cs(uint8_t a)
|
||||
{
|
||||
if(a){
|
||||
SPI_TOUCH_CS_HIGH();
|
||||
}else{
|
||||
SPI_TOUCH_CS_LOW();
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief set or reset SPI MOSI pin
|
||||
\param[in] a: specified the low or high level of SPI MOSI pin output
|
||||
\param[out] none
|
||||
\retval none
|
||||
*/
|
||||
static void spi_mosi(uint8_t a)
|
||||
{
|
||||
if(a){
|
||||
SPI_MOSI_HIGH();
|
||||
}else{
|
||||
SPI_MOSI_LOW();
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief set or reset touch screen clock SPI SCK pin
|
||||
\param[in] a: specified the low or high level of SPI SCK pin output
|
||||
\param[out] none
|
||||
\retval none
|
||||
*/
|
||||
static void spi_clk(uint8_t a)
|
||||
{
|
||||
if(a){
|
||||
SPI_SCK_HIGH();
|
||||
}else{
|
||||
SPI_SCK_LOW();
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief get SPI MISO pin input status
|
||||
\param[in] none
|
||||
\param[out] none
|
||||
\retval input status of gpio pin: SET or RESET
|
||||
*/
|
||||
static FlagStatus spi_miso(void)
|
||||
{
|
||||
return SPI_MISO_READ();
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief SPI delay function
|
||||
\param[in] none
|
||||
\param[out] none
|
||||
\retval none
|
||||
*/
|
||||
static void spi_delay(uint16_t i)
|
||||
{
|
||||
uint16_t k;
|
||||
for (k=0;k<i;k++);
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief touch start
|
||||
\param[in] none
|
||||
\param[out] none
|
||||
\retval none
|
||||
*/
|
||||
void touch_start(void)
|
||||
{
|
||||
spi_clk(0);
|
||||
spi_cs(1);
|
||||
spi_mosi(1);
|
||||
spi_clk(1);
|
||||
spi_cs(0);
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief write data to touch screen
|
||||
\param[in] d: the data to be written
|
||||
\param[out] none
|
||||
\retval none
|
||||
*/
|
||||
void touch_write(uint8_t d)
|
||||
{
|
||||
uint8_t buf, i ;
|
||||
spi_clk(0);
|
||||
for( i = 0; i < 8; i++){
|
||||
buf = ((d >> (7-i)) & 0x1);
|
||||
spi_mosi(buf);
|
||||
spi_clk(0);
|
||||
spi_clk(1);
|
||||
spi_clk(0);
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief read the touch AD value
|
||||
\param[in] None
|
||||
\param[out] none
|
||||
\retval the value of touch AD
|
||||
*/
|
||||
uint16_t touch_read(void)
|
||||
{
|
||||
uint16_t buf ;
|
||||
uint8_t i ;
|
||||
|
||||
buf=0;
|
||||
for( i = 0; i < 12; i++){
|
||||
buf = buf << 1 ;
|
||||
spi_clk(1);
|
||||
spi_clk(0);
|
||||
if(RESET != spi_miso()){
|
||||
buf = buf + 1 ;
|
||||
}
|
||||
}
|
||||
return( buf );
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief read the touch pen interrupt request signal
|
||||
\param[in] none
|
||||
\param[out] none
|
||||
\retval the status of touch pen: SET or RESET
|
||||
\arg SET: touch pen is inactive
|
||||
\arg RESET: touch pen is active
|
||||
*/
|
||||
FlagStatus touch_pen_irq(void)
|
||||
{
|
||||
return TOUCH_PEN_INT_READ();
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief get the AD sample value of touch location at X coordinate
|
||||
\param[in] none
|
||||
\param[out] none
|
||||
\retval channel X+ AD sample value
|
||||
*/
|
||||
uint16_t touch_ad_x_get(void)
|
||||
{
|
||||
if (RESET != touch_pen_irq()){
|
||||
/* touch pen is inactive */
|
||||
return 0;
|
||||
}
|
||||
touch_start();
|
||||
touch_write(0x00);
|
||||
touch_write(CH_X);
|
||||
return (touch_read());
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief get the AD sample value of touch location at Y coordinate
|
||||
\param[in] none
|
||||
\param[out] none
|
||||
\retval channel Y+ AD sample value
|
||||
*/
|
||||
uint16_t touch_ad_y_get(void)
|
||||
{
|
||||
if (RESET != touch_pen_irq()){
|
||||
/* touch pen is inactive */
|
||||
return 0;
|
||||
}
|
||||
touch_start();
|
||||
touch_write(0x00);
|
||||
touch_write(CH_Y);
|
||||
return (touch_read());
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief get channel X+ AD average sample value
|
||||
\param[in] none
|
||||
\param[out] none
|
||||
\retval channel X+ AD average sample value
|
||||
*/
|
||||
uint16_t touch_average_ad_x_get(void)
|
||||
{
|
||||
uint8_t i;
|
||||
uint16_t temp=0;
|
||||
for (i=0;i<8;i++){
|
||||
temp+=touch_ad_x_get();
|
||||
spi_delay(1000);
|
||||
}
|
||||
temp>>=3;
|
||||
|
||||
return temp;
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief get channel Y+ AD average sample value
|
||||
\param[in] none
|
||||
\param[out] none
|
||||
\retval channel Y+ AD average sample value
|
||||
*/
|
||||
uint16_t touch_average_ad_y_get(void)
|
||||
{
|
||||
uint8_t i;
|
||||
uint16_t temp=0;
|
||||
for (i=0;i<8;i++){
|
||||
temp+=touch_ad_y_get();
|
||||
spi_delay(1000);
|
||||
}
|
||||
temp>>=3;
|
||||
|
||||
return temp;
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief get X coordinate value of touch point on LCD screen
|
||||
\param[in] adx : channel X+ AD average sample value
|
||||
\param[out] none
|
||||
\retval X coordinate value of touch point
|
||||
*/
|
||||
uint16_t touch_coordinate_x_get(uint16_t adx)
|
||||
{
|
||||
uint16_t sx = 0;
|
||||
uint32_t
|
||||
r = adx - AD_Left;
|
||||
r *= LCD_X - 1;
|
||||
sx = r / (AD_Right - AD_Left);
|
||||
if (sx <= 0 || sx > LCD_X)
|
||||
return 0;
|
||||
return sx;
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief get Y coordinate value of touch point on LCD screen
|
||||
\param[in] ady : channel Y+ AD average sample value
|
||||
\param[out] none
|
||||
\retval Y coordinate value of touch point
|
||||
*/
|
||||
uint16_t touch_coordinate_y_get(uint16_t ady)
|
||||
{
|
||||
uint16_t sy = 0;
|
||||
uint32_t
|
||||
r = ady - AD_Top;
|
||||
r *= LCD_Y - 1;
|
||||
sy = r / (AD_Bottom - AD_Top);
|
||||
if (sy <= 0 || sy > LCD_Y)
|
||||
return 0;
|
||||
return sy;
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief get a value (X or Y) for several times. Order these values,
|
||||
remove the lowest and highest and obtain the average value
|
||||
\param[in] channel_select: select channel X or Y
|
||||
\arg CH_X: channel X
|
||||
\arg CH_Y: channel Y
|
||||
\param[out] none
|
||||
\retval a value(X or Y) of touch point
|
||||
*/
|
||||
uint16_t touch_data_filter(uint8_t channel_select)
|
||||
{
|
||||
uint16_t i=0, j=0;
|
||||
uint16_t buf[FILTER_READ_TIMES];
|
||||
uint16_t sum=0;
|
||||
uint16_t temp=0;
|
||||
/* Read data in FILTER_READ_TIMES times */
|
||||
for(i=0; i < FILTER_READ_TIMES; i++){
|
||||
if (CH_X == channel_select){
|
||||
buf[i] = touch_ad_x_get();
|
||||
}else{ /* CH_Y == channel_select */
|
||||
buf[i] = touch_ad_y_get();
|
||||
}
|
||||
}
|
||||
/* Sort in ascending sequence */
|
||||
for(i = 0; i < FILTER_READ_TIMES - 1; i++){
|
||||
for(j = i + 1; j < FILTER_READ_TIMES; j++){
|
||||
if(buf[i] > buf[j]){
|
||||
temp = buf[i];
|
||||
buf[i] = buf[j];
|
||||
buf[j] = temp;
|
||||
}
|
||||
}
|
||||
}
|
||||
sum = 0;
|
||||
for(i = FILTER_LOST_VAL; i < FILTER_READ_TIMES - FILTER_LOST_VAL; i++){
|
||||
sum += buf[i];
|
||||
}
|
||||
temp = sum / (FILTER_READ_TIMES - 2 * FILTER_LOST_VAL);
|
||||
|
||||
return temp;
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief get the AD sample value of touch location.
|
||||
get the sample value for several times,order these values,remove the lowest and highest and obtain the average value
|
||||
\param[in] channel_select: select channel X or Y
|
||||
\param[out] none
|
||||
\arg ad_x: channel X AD sample value
|
||||
\arg ad_y: channel Y AD sample value
|
||||
\retval ErrStatus: SUCCESS or ERROR
|
||||
*/
|
||||
ErrStatus touch_ad_xy_get(uint16_t *ad_x, uint16_t *ad_y)
|
||||
{
|
||||
uint16_t ad_x1=0, ad_y1=0, ad_x2=0, ad_y2=0;
|
||||
|
||||
ad_x1 = touch_data_filter(CH_X);
|
||||
ad_y1 = touch_data_filter(CH_Y);
|
||||
ad_x2 = touch_data_filter(CH_X);
|
||||
ad_y2 = touch_data_filter(CH_Y);
|
||||
|
||||
if((abs(ad_x1 - ad_x2) > AD_ERR_RANGE) || (abs(ad_y1 - ad_y2) > AD_ERR_RANGE)){
|
||||
return ERROR;
|
||||
}
|
||||
*ad_x = (ad_x1 + ad_x2) / 2;
|
||||
*ad_y = (ad_y1 + ad_y2) / 2;
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief detect the touch event
|
||||
\param[in] none
|
||||
\param[out] none
|
||||
\retval ErrStatus: SUCCESS or ERROR
|
||||
*/
|
||||
ErrStatus touch_scan(void)
|
||||
{
|
||||
uint8_t invalid_count = 0;
|
||||
if (RESET == touch_pen_irq()){ /* touch pen is active */
|
||||
while((SUCCESS != touch_ad_xy_get(&touch_ad_x, &touch_ad_y))&& (invalid_count < 20)){
|
||||
invalid_count++;
|
||||
}
|
||||
|
||||
if(invalid_count >= 20){
|
||||
touch_ad_x = 0;
|
||||
touch_ad_y = 0;
|
||||
return ERROR;
|
||||
}
|
||||
}else{
|
||||
touch_ad_x = 0;
|
||||
touch_ad_y = 0;
|
||||
return ERROR;
|
||||
}
|
||||
return SUCCESS;
|
||||
}
|
Reference in New Issue
Block a user