Index: yc_qr/YC_QRDecode.h
===================================================================
--- /YC3121_SDK/fw/sdk/yc_qr/YC_QRDecode.h	(nonexistent)
+++ /YC3121_SDK/fw/sdk/yc_qr/YC_QRDecode.h	(working copy)
@@ -0,0 +1,16 @@
+#ifndef __YC_QRDECODE_H__
+#define __YC_QRDECODE_H__
+#include "yc3121.h"
+#include "YC_QRDecode_TypeDef.h"
+
+/*
+ * @brief:YC_QRDecode
+ * @param:QRDecode_Config_CB
+ * @param:len:  message len
+ * @param:buf:  message
+ * @return:  yc_qr_return_type_ENUM
+ */
+yc_qr_return_type_ENUM YC_QRDecode(QRDecode_Config_CB *p_QRDecode_Config,uint32_t *len, uint8_t *buf);
+
+
+#endif
Index: yc_qr/YC_QRDecode_TypeDef.h
===================================================================
--- /YC3121_SDK/fw/sdk/yc_qr/YC_QRDecode_TypeDef.h	(nonexistent)
+++ /YC3121_SDK/fw/sdk/yc_qr/YC_QRDecode_TypeDef.h	(working copy)
@@ -0,0 +1,82 @@
+#ifndef __QRDECODE_TYPEDEF_H__
+#define __QRDECODE_TYPEDEF_H__
+
+#define CAMERA_SETPARA_NUM_MAX  (100)
+
+typedef struct _keyboard_config_CB_
+{
+    unsigned char mode;	//0: T KeyBoard 1:Matrix KeyBoard 2:powerKey exit
+		unsigned char line_num;
+		unsigned char col_num;
+		unsigned char cancel_position;//bit0-3:cancel key input io line number;bit4-7:cancel key out io line number
+    unsigned char line1;
+    unsigned char line2;
+    unsigned char line3;
+    unsigned char line4;
+    unsigned char line5;
+    unsigned char line6;
+    unsigned char line7;
+    unsigned char line8;
+    unsigned char line9;
+    unsigned char line10;
+} keyboard_config_CB;
+
+typedef struct _lcd_config_CB_
+{
+    Boolean is_tft;
+    Boolean is_init_lcd;
+    unsigned char lcd_pin_rst;
+    unsigned char lcd_pin_cs;
+    unsigned char lcd_pin_clk;
+    unsigned char lcd_pin_mosi;
+    unsigned char lcd_pin_a0;
+    unsigned char lcd_pin_bl;     //bit7=1:  high light          =0:  low  light
+} lcd_config_CB;
+
+typedef enum {UNKNOW =0,GC6153 = 1, BF3A02 = 2} camera_type_ENUM;
+typedef enum {CAMERA_LCD = 0, CAMERA_TFT = 1} camera_disp_ENUM;
+
+typedef struct _camera_setpara_CB_
+{
+    unsigned char camera_setpara_num;
+    unsigned char camera_setpara[CAMERA_SETPARA_NUM_MAX][2];
+}camera_setpara_CB;
+
+typedef struct _camera_config_CB_
+{
+    unsigned char freq_mclk;
+    camera_type_ENUM camera_type;
+    unsigned char pin_sda;
+    unsigned char pin_scl;
+    unsigned char pin_reset;
+    unsigned char pin_pwdn;
+    unsigned char pin_mclk;
+    unsigned char pin_pclk;
+    unsigned char pin_data;
+    unsigned char pin_cs;
+    camera_setpara_CB camera_setparaCB;
+} camera_config_CB;
+
+typedef struct _QRDecode_Config_CB_
+{
+    lcd_config_CB      lcd_configCB;
+    keyboard_config_CB keyboard_configCB;
+    camera_config_CB   camera_configCB;
+    unsigned int       flash_backup_addr;
+	unsigned char      timeout;				//unit:  s
+} QRDecode_Config_CB;
+
+typedef enum {
+QR_CANCEL = 0,
+QR_SUCCESS = 1,
+QR_CAMERA_PWM_INIT_FAIL = -1,
+QR_CAMERA_IIC_INIT_FAIL = -2,
+QR_CAMERA_OPEN_FAIL = -3,
+QR_CAMERA_READ_FAIL = -4,
+QR_KEY_PARA_FAIL = -5,
+QR_CANCEL_KEY= -6,
+QR_CANCEL_TIMEOUT= -7,
+}yc_qr_return_type_ENUM;
+
+
+#endif
Index: yc_qr/YC_QRDecode_lib.lib
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: yc_qr/YC_QRDecode_lib.lib
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: yc_st7789.h
===================================================================
--- /YC3121_SDK/fw/sdk/yc_st7789.h	(nonexistent)
+++ /YC3121_SDK/fw/sdk/yc_st7789.h	(working copy)
@@ -0,0 +1,89 @@
+/*
+File Name    : yc_st7789v2.c
+Author       : Yichip
+Version      : V1.0
+Date         : 2020/1/14
+Description  : st7789v2 lcd encapsulation.
+*/
+
+#ifndef __YC_ST7789_H__
+#define __YC_ST7789_H__
+
+#include <yc_gpio.h>
+#include <yc_timer.h>
+#include <yc_spi.h>
+#include "font.h"
+#include "board_config.h"
+
+#define TFT_COL 320
+#define TFT_ROW 240
+
+#define BLACK   0x0000 //黑色
+#define WHITE   0xFFFF //白色
+#define RED     0xF800 //红色
+#define GREEN   0x07E0 //绿色
+#define BLUE    0x001F //蓝色
+#define GRAY    0xDEDB //灰色15%
+#define LGRAY   0xC618 //灰色25%
+#define DGRAY   0x7BEF //深灰色
+#define NAVY    0x000F //深蓝色
+#define DGREEN  0x03E0 //深绿色
+#define DCYAN   0x03EF //深青色
+#define MAROON  0x7800 //深红色
+#define PURPLE  0x780F //紫色
+#define OLIVE   0x7BE0 //橄榄绿
+#define CYAN    0x07FF //青色
+#define MAGENTA 0xF81F //品红
+#define YELLOW  0xFFE0 //黄色
+
+typedef struct
+{
+    SPIx_TypeDef SPIx;
+    uint16_t IO_TFT_SDA_PIN;
+    GPIO_TypeDef IO_TFT_SDA_Port;
+    uint16_t IO_TFT_SCL_PIN;
+    GPIO_TypeDef IO_TFT_SCL_Port;
+    uint16_t IO_TFT_A0_PIN;
+    GPIO_TypeDef IO_TFT_A0_Port;
+    uint16_t IO_TFT_RES_PIN;
+    GPIO_TypeDef IO_TFT_RES_Port;
+    uint16_t	IO_TFT_CS_PIN;
+    GPIO_TypeDef IO_TFT_CS_Port;
+    uint16_t IO_TFT_BL_PIN;
+    GPIO_TypeDef IO_TFT_BL_Port;
+} St7789TFT_InitTypedef;
+
+/* TFT液晶屏控制IO初始化 */
+void ST7789_TFT_GpioInit(St7789TFT_InitTypedef *St7789TFT_InitStruct);
+
+/* 液晶屏驱动初始化 */
+void ST7789_TFT_Init(void);
+
+/* 画块函数 */
+void ST7789_TFT_Draw_Piece(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t Color);
+
+/* ASCII字符显示 */
+void ST7789_TFT_ShowChar(uint16_t x, uint16_t y, uint16_t num, uint16_t size, uint16_t mode, uint16_t BL_color, uint16_t P_color);
+
+/* ASCII字符串显示 */
+void ST7789_TFT_ShowString(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint8_t *p, uint16_t size, uint16_t mode, uint16_t BL_color, uint16_t P_color);
+
+/* 汉字显示 */
+void ST7789_TFT_ShowChinese(uint16_t x, uint16_t y, const uint8_t *ch, uint8_t size, uint8_t n, uint8_t mode, uint16_t BL_color, uint16_t P_color);
+
+/* 图片显示 */
+void ST7789_TFT_Picture(uint16_t Stratx, uint16_t Starty, const uint8_t *pic);
+void ST7789_TFT_Picture_CamRow(uint8_t *pic, uint8_t y);
+void ST7789_TFT_Picture_Cam(uint8_t *pic);
+
+/* 图片显示快速 */
+void ST7789_TFT_Picture_Q(uint16_t Stratx, uint16_t Starty, const uint8_t *pic);
+
+void ST7789_TFT_Clear_White(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);
+void ST7789_TFT_Clear_Gary(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);
+void St7899_tft_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color);
+void St7789_tft_DrawRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color);
+void St7789_tft_RectangleFill(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color);
+void St7789_tft_DrawCircle(uint16_t y0, uint16_t x0, uint8_t r, uint16_t c);
+
+#endif
Index: yc_st7789.c
===================================================================
--- /YC3121_SDK/fw/sdk/yc_st7789.c	(nonexistent)
+++ /YC3121_SDK/fw/sdk/yc_st7789.c	(working copy)
@@ -0,0 +1,695 @@
+/*
+File Name    : yc_st7789.c
+Author       : Yichip
+Version      : V1.0
+Date         : 2020/3/24
+Description  : st7789 lcd encapsulation.
+*/
+
+#include "yc_st7789.h"
+
+void ST7789_TFT_GpioInit(St7789TFT_InitTypedef *St7789TFT_InitStruct)
+{
+    SPI_InitTypeDef SPI_InitStruct;
+
+    SPI_InitStruct.BaudRatePrescaler = SPI_BaudRatePrescaler_1;
+    SPI_InitStruct.CPHA = SPI_CPHA_First_Edge;
+    SPI_InitStruct.CPOL = SPI_CPOL_Low;
+    SPI_InitStruct.Mode =  SPI_Mode_Master;
+    SPI_InitStruct.RW_Delay = 1;
+
+    GPIO_Config(St7789TFT_InitStruct->IO_TFT_SCL_Port, St7789TFT_InitStruct->IO_TFT_SCL_PIN, SPID1_SCK);
+    GPIO_Config(St7789TFT_InitStruct->IO_TFT_CS_Port, St7789TFT_InitStruct->IO_TFT_CS_PIN, SPID1_NCS);
+    GPIO_Config(St7789TFT_InitStruct->IO_TFT_SDA_Port, St7789TFT_InitStruct->IO_TFT_SDA_PIN, SPID1_MOSI);
+    SPI_Init(St7789TFT_InitStruct->SPIx, &SPI_InitStruct);
+}
+
+/**************************************************************
+函数名称 : st7789_tft_write_reg
+函数功能 : 向TFT驱动芯片写一个命令
+输入参数 : reg：要写入的命令
+返回值   : 无
+备注     : ST7789_TFT_A0_PIN为0时表示写命令
+**************************************************************/
+static void st7789_tft_write_reg(uint8_t reg)
+{
+    GPIO_Config(ST7789_TFT_A0_PORT, ST7789_TFT_A0_PIN, OUTPUT_LOW);
+    SPI_SendData(ST7789VTFTSPI, reg);
+}
+
+/**************************************************************
+函数名称 : st7789_tft_write_data
+函数功能 : 向TFT驱动芯片写一个uint8_t数据
+输入参数 : data：要写入的数据
+返回值   : 无
+备注     : ST7789_TFT_A0_PIN为1时表示写数据
+**************************************************************/
+static void st7789_tft_write_data(uint8_t data)
+{
+    GPIO_Config(ST7789_TFT_A0_PORT, ST7789_TFT_A0_PIN, OUTPUT_HIGH);
+    SPI_SendData(ST7789VTFTSPI, data);
+}
+
+/**************************************************************
+函数名称 : st7789_tft_write_buff
+函数功能 : 向TFT驱动芯片写一组数据
+输入参数 : buff：要写入的数据首地址
+输入参数 : led：要写入的数据长度
+返回值   : 无
+备注     : ST7789_TFT_A0_PIN为1时表示写数据
+**************************************************************/
+static void st7789_tft_write_buff(uint8_t *buff, int len)
+{
+    GPIO_Config(ST7789_TFT_A0_PORT, ST7789_TFT_A0_PIN, OUTPUT_HIGH);
+    SPI_SendBuff(ST7789VTFTSPI, buff, len);
+}
+
+/**************************************************************
+函数名称 : st7789_tft_write_ram
+函数功能 : 使能写入数据到RAM
+输入参数 : 无
+返回值   : 无
+备注     : 无
+**************************************************************/
+static void st7789_tft_write_ram(void)
+{
+    st7789_tft_write_reg(0x2C);
+}
+
+/**************************************************************
+函数名称 : st7789_tft_display_on
+函数功能 : 打开显示
+输入参数 : 无
+返回值   : 无
+备注     : 无
+**************************************************************/
+static void st7789_tft_display_on(void)
+{
+    st7789_tft_write_reg(0x29);
+}
+
+/**************************************************************
+函数名称 : st7789_tft_display_off
+函数功能 : 关闭显示
+输入参数 : 无
+返回值   : 无
+备注     : 无
+**************************************************************/
+static void st7789_tft_display_off(void)
+{
+    st7789_tft_write_reg(0x28);
+}
+
+static void TFT_WR_DATA(uint16_t da)
+{
+    unsigned char data[2];
+
+    data[0] = (da >> 8);
+    data[1] = da & 0xFF;
+
+    st7789_tft_write_buff(data, 2);
+}
+/**************************************************************
+函数功能:  设置光标的位置
+**************************************************************/
+void St7789_tft_SetCursor(uint16_t x, uint16_t y)
+{
+    st7789_tft_write_reg(0x2A); //设置X坐标
+    TFT_WR_DATA(x);  //写入X
+    st7789_tft_write_reg(0x2B);    //设置Y坐标
+    TFT_WR_DATA(y);   //写入Y
+
+}
+/**************************************************************
+函数名称 : st7789_tft_address_set
+函数功能 : 设置坐标
+输入参数 : x1,y1：起始地址，x2,y2：终点地址
+返回值   : 无
+备注     : 无
+**************************************************************/
+static void st7789_tft_address_set(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
+{
+    st7789_tft_write_reg(0x2A);
+    TFT_WR_DATA(x1);
+    TFT_WR_DATA(x2);
+    st7789_tft_write_reg(0x2B);
+    TFT_WR_DATA(y1);
+    TFT_WR_DATA(y2);
+}
+
+static void st7789_tft_clear(uint16_t Color)
+{
+    uint16_t i, j;
+
+    st7789_tft_display_off();
+    st7789_tft_address_set(0, 0, TFT_COL - 1, TFT_ROW - 1);
+    st7789_tft_write_ram();
+
+    for (i = 0; i < TFT_COL; i++)
+    {
+        for (j = 0; j < TFT_ROW; j++)
+        {
+            TFT_WR_DATA(Color);
+        }
+    }
+    st7789_tft_display_on();
+}
+
+/**************************************************************
+函数名称 : st7789_tft_draw_point
+函数功能 : TFT画一个点
+输入参数 : x,y	--> 画点坐标，color --> 点的颜色
+返回值   : 无
+备注     : 无
+**************************************************************/
+static void st7789_tft_draw_point(uint16_t x, uint16_t y, uint16_t color)
+{
+    st7789_tft_address_set(x, y, x, y);
+//	St7789_tft_SetCursor(x,y);
+    st7789_tft_write_ram();
+    TFT_WR_DATA(color);
+}
+
+void ST7789_TFT_Draw_Piece(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t Color)
+{
+    uint16_t i, j;
+
+    st7789_tft_address_set(x1, y1, x2, y2);
+    st7789_tft_write_ram();
+
+    for (i = x1; i < x2; i++)
+    {
+        for (j = y1; j < y2; j++)
+        {
+            TFT_WR_DATA(Color);
+        }
+    }
+}
+/**************************************************************
+函数功能：画直线
+参    数：
+x1,y1:起点坐标
+x2,y2:终点坐标
+**************************************************************/
+void St7899_tft_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color)
+{
+    uint16_t t;
+    int xerr = 0, yerr = 0, delta_x, delta_y, distance;
+    int incx, incy, uRow, uCol;
+    delta_x = x2 - x1; //计算坐标增量
+    delta_y = y2 - y1;
+    uRow = x1;
+    uCol = y1;
+    if (delta_x > 0)
+        incx = 1; //设置单步方向
+    else if (delta_x == 0)
+        incx = 0;//垂直线
+    else
+    {
+        incx = - 1;
+        delta_x = - delta_x;
+    }
+    if (delta_y > 0)
+        incy = 1;
+    else if (delta_y == 0)
+        incy = 0;//水平线
+    else
+    {
+        incy = - 1;
+        delta_y = - delta_y;
+    }
+    if (delta_x > delta_y)
+        distance = delta_x; //选取基本增量坐标轴
+    else
+        distance = delta_y;
+    for (t = 0; t <= distance + 1; t++)//画线输出
+    {
+        st7789_tft_draw_point(uRow, uCol, color);//画点
+        xerr += delta_x;
+        yerr += delta_y;
+        if (xerr > distance)
+        {
+            xerr -= distance;
+            uRow += incx;
+        }
+        if (yerr > distance)
+        {
+            yerr -= distance;
+            uCol += incy;
+        }
+    }
+}
+
+/**************************************************************
+函数功能：画矩形
+参    数：(x1,y1),(x2,y2):矩形的对角坐标
+**************************************************************/
+void St7789_tft_DrawRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color)
+{
+    St7899_tft_DrawLine(x1, y1, x2, y1, color);
+    St7899_tft_DrawLine(x1, y1, x1, y2, color);
+    St7899_tft_DrawLine(x1, y2, x2, y2, color);
+    St7899_tft_DrawLine(x2, y1, x2, y2, color);
+}
+
+/**************************************************************
+函数功能：矩形填充
+参    数：(x1,y1),(x2,y2):矩形的对角坐标
+**************************************************************/
+void St7789_tft_RectangleFill(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color)
+{
+    uint32_t i, j;
+    for (i = y1; i <= y2; i++) //以高度为准
+    {
+        St7789_tft_SetCursor(x1, i); //设置光标的位置
+        st7789_tft_write_ram();  //表示写GRAM  就是颜色数据
+        for (j = x1; j <= x2; j++)
+        {
+            TFT_WR_DATA(color); //写入颜色
+        }
+    }
+}
+
+/**************************************************************
+函数功能：在指定位置画一个指定大小的圆
+参    数：
+		(x,y):中心点
+		r    :半径
+**************************************************************/
+void St7789_tft_DrawCircle(uint16_t x0, uint16_t y0, uint8_t r, uint16_t c)
+{
+    int a, b;
+    int di;
+    a = 0;
+    b = r;
+    di = 3 - (r << 1);//判断下个点位置的标志
+    while (a <= b)
+    {
+        st7789_tft_draw_point(x0 + a, y0 - b, c);             //5
+        st7789_tft_draw_point(x0 + b, y0 - a, c);             //0
+        st7789_tft_draw_point(x0 + b, y0 + a, c);             //4
+        st7789_tft_draw_point(x0 + a, y0 + b, c);             //6
+        st7789_tft_draw_point(x0 - a, y0 + b, c);             //1
+        st7789_tft_draw_point(x0 - b, y0 + a, c);
+        st7789_tft_draw_point(x0 - a, y0 - b, c);             //2
+        st7789_tft_draw_point(x0 - b, y0 - a, c);             //7
+        a++;
+        if (di < 0)
+            di += 4 * a + 6;	//Bresenham画圆算法
+        else
+        {
+            di += 10 + 4 * (a - b);
+            b--;
+        }
+    }
+}
+
+void ST7789_TFT_Init(void)
+{
+    GPIO_Config(ST7789_TFT_RST_PORT, ST7789_TFT_RST_PIN, OUTPUT_LOW);
+    delay_ms(20);
+    GPIO_Config(ST7789_TFT_RST_PORT, ST7789_TFT_RST_PIN, OUTPUT_HIGH);
+    delay_ms(20);
+
+    //--------------------------------------Display Setting------------------------------------------//
+    /* Memory Data Access Control：横屏显示 */
+    st7789_tft_write_reg(0x36);
+    st7789_tft_write_data(0xA0);
+
+    /* Column Address Set: 0~319 */
+    st7789_tft_write_reg(0x2A);
+    st7789_tft_write_data(0x00);//列起始地址
+    st7789_tft_write_data(0x00);
+    st7789_tft_write_data(0x00);//列结束地址
+    st7789_tft_write_data(0x3F);
+
+    /* Row Address Set: 0~239 */
+    st7789_tft_write_reg(0x2B);
+    st7789_tft_write_data(0x00);//行起始地址
+    st7789_tft_write_data(0x00);
+    st7789_tft_write_data(0x01);//行结束地址
+    st7789_tft_write_data(0xEF);
+
+    /* Frame Rate Control in Normal Mode: 58M */
+    st7789_tft_write_reg(0xC6);
+    st7789_tft_write_data(0x10);
+
+    /*  Interface Pixel Format: RGB */
+    st7789_tft_write_reg(0x3A);
+    st7789_tft_write_data(0x05);
+
+    st7789_tft_write_reg(0xCF);
+    st7789_tft_write_data(0x00);
+    st7789_tft_write_data(0xC1);
+    st7789_tft_write_data(0X30);
+
+    st7789_tft_write_reg(0xED);
+    st7789_tft_write_data(0x64);
+    st7789_tft_write_data(0x03);
+    st7789_tft_write_data(0X12);
+    st7789_tft_write_data(0X81);
+
+    st7789_tft_write_reg(0xE8);
+    st7789_tft_write_data(0x85);
+    st7789_tft_write_data(0x10);
+    st7789_tft_write_data(0x78);
+
+    st7789_tft_write_reg(0xCB);
+    st7789_tft_write_data(0x39);
+    st7789_tft_write_data(0x2C);
+    st7789_tft_write_data(0x00);
+    st7789_tft_write_data(0x34);
+    st7789_tft_write_data(0x02);
+
+    st7789_tft_write_reg(0xF7);
+    st7789_tft_write_data(0x20);
+
+    st7789_tft_write_reg(0xEA);
+    st7789_tft_write_data(0x00);
+    st7789_tft_write_data(0x00);
+
+    /* LCM Control */
+    st7789_tft_write_reg(0xC0);
+    st7789_tft_write_data(0x21);
+
+    /* ID code Setting */
+    st7789_tft_write_reg(0xC1);
+    st7789_tft_write_data(0x12);
+
+    /* VCOM Offset Set */
+    st7789_tft_write_reg(0xC5);
+    st7789_tft_write_data(0x32);
+    st7789_tft_write_data(0x3C);
+
+    /* CABC Control */
+    st7789_tft_write_reg(0xC7);
+    st7789_tft_write_data(0XC1);
+
+    /* RGB Interface Control */
+    st7789_tft_write_reg(0xB1);
+    st7789_tft_write_data(0x00);
+    st7789_tft_write_data(0x18);
+
+    /* Gamma Set */
+    st7789_tft_write_reg(0x26);
+    st7789_tft_write_data(0x01);
+
+    /* Positive Voltage Gamma Control */
+    st7789_tft_write_reg(0xE0);
+    st7789_tft_write_data(0x0F);
+    st7789_tft_write_data(0x20);
+    st7789_tft_write_data(0x1E);
+    st7789_tft_write_data(0x09);
+    st7789_tft_write_data(0x12);
+    st7789_tft_write_data(0x0B);
+    st7789_tft_write_data(0x50);
+    st7789_tft_write_data(0XBA);
+    st7789_tft_write_data(0x44);
+    st7789_tft_write_data(0x09);
+    st7789_tft_write_data(0x14);
+    st7789_tft_write_data(0x05);
+    st7789_tft_write_data(0x23);
+    st7789_tft_write_data(0x21);
+    st7789_tft_write_data(0x00);
+
+    /* Negative Voltage Gamma Control */
+    st7789_tft_write_reg(0XE1);
+    st7789_tft_write_data(0x00);
+    st7789_tft_write_data(0x19);
+    st7789_tft_write_data(0x19);
+    st7789_tft_write_data(0x00);
+    st7789_tft_write_data(0x12);
+    st7789_tft_write_data(0x07);
+    st7789_tft_write_data(0x2D);
+    st7789_tft_write_data(0x28);
+    st7789_tft_write_data(0x3F);
+    st7789_tft_write_data(0x02);
+    st7789_tft_write_data(0x0A);
+    st7789_tft_write_data(0x08);
+    st7789_tft_write_data(0x25);
+    st7789_tft_write_data(0x2D);
+    st7789_tft_write_data(0x0F);
+
+    /* Sleep Out */
+    st7789_tft_write_reg(0x11);
+    delay_ms(20); //Delay 20ms
+
+    /* Display On */
+    st7789_tft_clear(WHITE);
+    st7789_tft_write_reg(0x29);
+
+    GPIO_Config(ST7789_TFT_BL_PORT, ST7789_TFT_BL_PIN, OUTPUT_HIGH);
+}
+
+/**************************************************************
+函数名称 : ST7789_TFT_ShowChar
+函数功能 : lcd显示一个字符
+输入参数 : x,y:起始坐标
+          num:要显示的字符:" "--->"~"
+          size:字体大小
+          mode:叠加方式(1)还是非叠加方式(0)
+返回值   : 无
+备注     : 无
+**************************************************************/
+void ST7789_TFT_ShowChar(uint16_t x, uint16_t y, uint16_t num, uint16_t size, uint16_t mode, uint16_t BL_color, uint16_t P_color)
+{
+    uint16_t temp, t1, t;
+    uint16_t y0 = y;
+    uint16_t csize = ((size / 8) + ((size % 8) ? 1 : 0)) * (size / 2); /* 得到字体一个字符对应点阵集所占的字节数	 */
+
+    num = num - ' ';/* 得到偏移后的值（ASCII字库是从空格开始取模，所以-' '就是对应字符的字库） */
+
+    for (t = 0; t < csize; t++)/*遍历打印所有像素点到LCD */
+    {
+        if (16 == size)
+        {
+            temp = asc2_1608[num][t];/* 调用1608字体 */
+        }
+        else if (24 == size)
+        {
+            temp = asc2_2412[num][t];/* 调用2412字体 */
+        }
+        else if (32 == size)
+        {
+            temp = asc2_3216[num][t];/* 调用3216数码管字体 */
+        }
+        else
+        {
+            return;/* 没有找到对应的字库 */
+        }
+        for (t1 = 0; t1 < 8; t1++)/* 打印一个像素点到液晶 */
+        {
+            if (temp & 0x80)
+            {
+                st7789_tft_draw_point(x, y, P_color);//字色
+            }
+            else if (0 == mode)
+            {
+                st7789_tft_draw_point(x, y, BL_color);//背景色
+            }
+            temp <<= 1;
+            y++;
+
+            if (y >= TFT_ROW)
+            {
+                return;/* 超区域了 */
+            }
+            if ((y - y0) == size)
+            {
+                y = y0;
+                x++;
+                if (x >= TFT_COL)
+                {
+                    return;/* 超区域了 */
+                }
+                break;
+            }
+        }
+    }
+}
+
+/**************************************************************
+函数名称 : ST7789_TFT_ShowString
+函数功能 : lcd显示字符串
+输入参数 : x,y:起始坐标
+          width,height：区域大小
+          *p:字符串起始地址
+          size:字体大小
+          mode:叠加方式(1)还是非叠加方式(0)
+返回值  : 无
+备注    : 无
+**************************************************************/
+void ST7789_TFT_ShowString(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint8_t *p, uint16_t size, uint16_t mode, uint16_t BL_color, uint16_t P_color)
+{
+    uint16_t x0 = x;
+    uint16_t len = 0;
+    uint16_t WxDxH = 0;
+    width += x;
+    height += y;
+
+    WxDxH = size / 2;
+//	if (width > 320)
+//	{
+//		len = (320-x)/size/2;
+//		ST7789_TFT_ShowString(x, height, len*(height-y), 16, p+(12-len+1), 32, 1, WHITE, OLIVE);
+//	}
+
+    if (width > 320)
+    {
+        len = (320 - x) / WxDxH;
+        ST7789_TFT_ShowString(x, height + 8, (width - x) - (len * WxDxH), height - y, p + len, size, mode, BL_color, P_color);
+    }
+    MyPrintf("%d\r\n", len);
+
+    while ((*p <= '~') && (*p >= ' ')) /* 判断是不是非法字符! */
+    {
+        if (x >= width)
+        {
+            x = x0;
+            y += size;
+        }
+        if (y >= height)
+        {
+            break;
+        }
+        ST7789_TFT_ShowChar(x, y, *p, size, mode, BL_color, P_color);
+        x += WxDxH;
+        p++;
+    }
+}
+
+/**************************************************************
+函数名称 : ST7789_TFT_ShowChinese
+函数功能 : TFT显示字符串
+输入参数 : x,y:起始坐标
+          *ch:汉字字符串起始地址
+          size:字体大小
+          n:汉字个数
+          mode:叠加方式(1)还是非叠加方式(0)
+返回值   : 无
+备注     : 无
+**************************************************************/
+void ST7789_TFT_ShowChinese(uint16_t x, uint16_t y, const uint8_t *ch, uint8_t size, uint8_t n, uint8_t mode, uint16_t BL_color, uint16_t P_color)
+{
+    uint32_t temp, t, t1;
+    uint16_t y0 = y;
+    uint32_t csize = ((size / 8) + ((size % 8) ? 1 : 0)) * (size) * n;	/* 得到字体字符对应点阵集所占的字节数 */
+
+    for (t = 0; t < csize; t++)
+    {
+        temp = ch[t];	/* 得到点阵数据 */
+
+        for (t1 = 0; t1 < 8; t1++)
+        {
+            if (temp & 0x80)
+            {
+                st7789_tft_draw_point(x, y, P_color);
+            }
+            else if (mode == 0)
+            {
+                st7789_tft_draw_point(x, y, BL_color);
+            }
+            temp <<= 1;
+            y++;
+            if ((y - y0) == size)
+            {
+                y = y0;
+                x++;
+                break;
+            }
+        }
+    }
+}
+
+void ST7789_TFT_Picture(uint16_t Stratx, uint16_t Starty, const uint8_t *pic)
+{
+    uint32_t i = 8, len;
+    uint16_t temp, x, y, D_x = 0, D_y = 0;
+
+    x = (uint16_t)((pic[2] << 8) | pic[3]) - 1;
+    y = (uint16_t)((pic[4] << 8) | pic[5]) - 1;
+
+    len = 2 * (x + 1) * (y + 1);
+
+    while (i < (len + 8))
+    {
+        temp = (uint16_t)((pic[i] << 8) + pic[i + 1]);		//可以考虑用逻辑 或 操作替代
+        if (D_x > x)
+        {
+            D_x = 0;
+            D_y += 1;
+            // D_y+=2;
+            // i += x*2;
+        }
+        st7789_tft_draw_point(Stratx + D_x, Starty + D_y, temp);
+        D_x += 1;
+        i = i + 2;
+    }
+}
+
+void ST7789_TFT_Picture_Q(uint16_t Stratx, uint16_t Starty, const uint8_t *pic)
+{
+    //计算长宽数据及长度
+    uint32_t len, i = 8;
+    uint16_t x, y;
+    uint8_t temp[16];
+    uint8_t j = 0;
+
+    x = (uint16_t)((pic[2] << 8) | pic[3]) - 1;
+    y = (uint16_t)((pic[4] << 8) | pic[5]) - 1;
+    len = 2 * (x + 1) * (y + 1);
+
+    st7789_tft_address_set(Stratx, Starty, Stratx + x, Starty + y);
+    st7789_tft_write_reg(0x2C);
+
+    while (i < (len + 8))
+    {
+        j = 0;
+        while (j < 16)
+        {
+            temp[j++] = pic[i++];
+        }
+        st7789_tft_write_buff(temp, 16);
+    }
+}
+
+void ST7789_TFT_Clear_White(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
+{
+    uint16_t i, j;
+    uint8_t temp[16];
+
+    st7789_tft_address_set(x1, y1, x2, y2);
+    st7789_tft_write_reg(0x2C);
+
+    for (i = 0; i < 16; i++)
+        temp[i] = 0xff;
+
+    for (i = y1; i < y2; i++)
+    {
+        for (j = x1; j < x2; j++)
+        {
+            st7789_tft_write_buff(temp, 16);
+        }
+    }
+}
+
+void ST7789_TFT_Clear_Gary(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
+{
+    uint16_t i, j;
+    uint8_t temp[2];
+
+    st7789_tft_address_set(x1, y1, x2, y2);
+    st7789_tft_write_reg(0x2C);
+
+    temp[0] = 0xEF;
+    temp[1] = 0x5D;
+
+    for (i = y1; i < y2; i++)
+    {
+        for (j = x1; j < x2; j++)
+        {
+            st7789_tft_write_buff(temp, 2);
+        }
+    }
+}
+
Index: yc_touch.h
===================================================================
--- /YC3121_SDK/fw/sdk/yc_touch.h	(nonexistent)
+++ /YC3121_SDK/fw/sdk/yc_touch.h	(working copy)
@@ -0,0 +1,48 @@
+/*
+File Name    : yc_touch.h
+Author       : Yichip
+Version      : V1.0
+Date         : 2020/1/14
+Description  :
+*/
+#ifndef __YC_TOUCH_H__
+#define __YC_TOUCH_H__
+
+#include "yc_st7789.h"
+#include "yc_adc.h"
+#define X 0
+#define Y 1
+
+//extern struct TOUCH _touch;
+//extern struct TOUCH_PANEl _touchpanel;
+
+struct TOUCH
+{
+    uint16_t Adc_Max;
+    uint8_t PressAgainFalg;
+};
+
+
+//ŴϢĽṹ
+struct TOUCH_PANEl
+{
+    uint16_t x0; //߼x
+    uint16_t y0; //߼y
+    uint16_t ltx;  //ϸx
+    uint16_t lty;  //ϸy
+    uint16_t x;  //x
+    uint16_t y;  //y
+    uint16_t xbase; //x
+    uint16_t ybase; //y
+    uint16_t xlogic; //x߼
+    uint16_t ylogic; //y߼
+    uint16_t xfac;//X᷽
+    uint16_t yfac;//Y᷽
+};
+
+
+void TP_ReadXY(void);
+uint8_t TP_UpdateCoordVal(void);
+uint8_t TP_DetectPressing(void);
+
+#endif
Index: yc_touch.c
===================================================================
--- /YC3121_SDK/fw/sdk/yc_touch.c	(nonexistent)
+++ /YC3121_SDK/fw/sdk/yc_touch.c	(working copy)
@@ -0,0 +1,325 @@
+/*
+File Name    : yc_touch.c
+Author       : Yichip
+Version      : V1.0
+Date         : 2020/1/14
+Description  :
+*/
+#include "yc_touch.h"
+
+struct TOUCH _touch;
+struct TOUCH_PANEl _touchpanel;
+
+//058电签板
+//uint16_t TP_YHigh_Pin  = GPIO_Pin_10;
+//uint16_t TP_YLow_Pin   = GPIO_Pin_11;
+//uint16_t TP_XHigh_Pin  = GPIO_Pin_11;
+//uint16_t TP_XLow_Pin   = GPIO_Pin_10;
+
+//GPIO_TypeDef TP_YHigh_Port  = GPIOB;
+//GPIO_TypeDef TP_YLow_Port   = GPIOC;
+//GPIO_TypeDef TP_XHigh_Port  = GPIOB;
+//GPIO_TypeDef TP_XLow_Port   = GPIOC;
+
+//#define PRESS_DETECT_CHANNEL  ADC_CHANNEL_5 //需要选择配置上拉模式的GPIO对应通道，用于检测是否触摸
+//#define Y_DETECT_CHANNEL  	  ADC_CHANNEL_5 //Y轴AD检测通道
+//#define X_DETECT_CHANNEL  	  ADC_CHANNEL_6	//X轴AD检测通道
+
+//109电签板
+uint16_t TP_YHigh_Pin  = GPIO_Pin_4;
+uint16_t TP_YLow_Pin   = GPIO_Pin_12;
+uint16_t TP_XHigh_Pin  = GPIO_Pin_13;
+uint16_t TP_XLow_Pin   = GPIO_Pin_11;
+
+GPIO_TypeDef TP_YHigh_Port  = GPIOA;
+GPIO_TypeDef TP_YLow_Port   = GPIOC;
+GPIO_TypeDef TP_XHigh_Port  = GPIOA;
+GPIO_TypeDef TP_XLow_Port   = GPIOC;
+
+#define PRESS_DETECT_CHANNEL  ADC_CHANNEL_6 //需要选择配置上拉模式的GPIO对应通道，用于检测是否触摸
+#define Y_DETECT_CHANNEL  	  ADC_CHANNEL_6 //Y轴AD检测通道
+#define X_DETECT_CHANNEL  	  ADC_CHANNEL_7	//X轴AD检测通道
+
+
+/*
+函数功能:  得到逻辑坐标
+参数：		Y：纵轴
+			X：横轴
+返回值:  返回的逻辑坐标
+*/
+#define SAMP_CNT      8  //采样次数
+#define SAMP_CNT_DIV2 4   //采样数据中间值
+#define THRESHOLD 1  //滤波阈值
+
+#define Yad_min 0x480
+#define Xad_min 0x4a0
+
+uint16_t TP_GetCoordVal(uint8_t x_or_y)
+{
+    uint16_t CoordValAdc[SAMP_CNT] = {0}, CoordVal[SAMP_CNT] = {0}, tempxy = 0;
+    uint8_t i = 0, min = 0, j = 0;
+    if (x_or_y == X)
+    {
+        // 配置采样Y轴IO
+        GPIO_Config(TP_YLow_Port, TP_YLow_Pin, OUTPUT_LOW);
+        GPIO_Config(TP_XHigh_Port, TP_XHigh_Pin, ANALOG);
+        GPIO_Config(TP_XLow_Port, TP_XLow_Pin, ANALOG);
+        GPIO_Config(TP_YHigh_Port, TP_YHigh_Pin, OUTPUT_HIGH);
+
+        // 采样SAMP_CNT组数据，并计算出逻辑坐标
+        for (i = 0; i < SAMP_CNT; i++)
+        {
+            CoordValAdc[i] = ADC_GetResult(Y_DETECT_CHANNEL);
+            if (CoordValAdc[i] < Yad_min)CoordValAdc[i] = Yad_min;
+            CoordVal[i] = 320 - ((CoordValAdc[i] - Yad_min) * 0.36);
+            if (CoordVal[i] > 320) CoordVal[i] = 0;
+            delay_us(10);
+        }
+    }
+    else if (x_or_y == Y)
+    {
+        //配采样X轴IO
+        GPIO_Config(TP_YLow_Port, TP_YLow_Pin, ANALOG);
+        GPIO_Config(TP_XHigh_Port, TP_XHigh_Pin, OUTPUT_HIGH);
+        GPIO_Config(TP_XLow_Port, TP_XLow_Pin, OUTPUT_LOW);
+        GPIO_Config(TP_YHigh_Port, TP_YHigh_Pin, ANALOG);
+
+        //采样SAMP_CNT组数据，并计算出逻辑坐标
+        for (i = 0; i < SAMP_CNT; i++)
+        {
+            CoordValAdc[i] = ADC_GetResult(X_DETECT_CHANNEL);
+            if (CoordValAdc[i] < Xad_min)CoordValAdc[i] = Xad_min;
+            CoordVal[i] = 240 - (CoordValAdc[i] - Xad_min) * 0.28;
+            if (CoordVal[i] > 240) CoordVal[i] = 0;
+            delay_us(10);
+        }
+    }
+
+    //滤波
+    for (i = 0; i < SAMP_CNT - 1; i++)
+    {
+        min = i;
+        for (j = i + 1; j < SAMP_CNT; j++)
+        {
+            if (CoordVal[min] > CoordVal[j]) min = j;
+        }
+        tempxy = CoordVal[i];
+        CoordVal[i] = CoordVal[min];
+        CoordVal[min] = tempxy;
+    }
+
+    if ((CoordVal[SAMP_CNT_DIV2] - CoordVal[SAMP_CNT_DIV2 - 1]) > THRESHOLD) return 0;
+    tempxy = (CoordVal[SAMP_CNT_DIV2] + CoordVal[SAMP_CNT_DIV2 - 1]) / 2;
+    return tempxy;
+}
+
+/*
+函数功能: 检测触摸屏是否按下
+返回值:  0:按下
+		 1:未按下
+*/
+uint8_t TP_DetectPressing(void)
+{
+    uint16_t AdcPress = 0;
+    GPIO_Config(TP_YLow_Port, TP_YLow_Pin, OUTPUT_LOW);
+    GPIO_Config(TP_XHigh_Port, TP_XHigh_Pin, ANALOG);
+    GPIO_Config(TP_XLow_Port, TP_XLow_Pin, PULL_UP);
+    GPIO_Config(TP_YHigh_Port, TP_YHigh_Pin, OUTPUT_HIGH);
+    AdcPress = ADC_GetResult(PRESS_DETECT_CHANNEL);
+    if ((AdcPress + 3)  < _touch.Adc_Max)return 0;
+    else return 1;
+}
+/*
+函数功能:  由逻辑坐标得到物理坐标
+*/
+void TP_ReadXY(void)
+{
+    uint16_t diff_x = 0, diff_y = 0;
+
+    /*1. 得到逻辑坐标*/
+
+    _touchpanel.x0 = TP_GetCoordVal(X);
+    _touchpanel.y0 = TP_GetCoordVal(Y);
+
+
+
+    /*2. 得到物理坐标*/
+
+    if (_touchpanel.x0 > _touchpanel.xlogic)
+        _touchpanel.x = _touchpanel.xbase + ((_touchpanel.x0 - _touchpanel.xlogic) * 100) / _touchpanel.xfac;
+    else
+    {
+        diff_x = _touchpanel.xlogic - _touchpanel.x0;
+        if (diff_x < _touchpanel.xbase)
+            _touchpanel.x = _touchpanel.xbase - (diff_x * 100) / _touchpanel.xfac;
+        else
+            _touchpanel.x = 1;
+    }
+
+
+    if (_touchpanel.y0 > _touchpanel.ylogic)
+        _touchpanel.y = _touchpanel.ybase + ((_touchpanel.y0 - _touchpanel.ylogic) * 100) / _touchpanel.yfac;
+    else
+    {
+        diff_y = _touchpanel.ylogic - _touchpanel.y0 ;
+        if (diff_y < _touchpanel.ybase)
+            _touchpanel.y = _touchpanel.ybase - (diff_y * 100) / _touchpanel.yfac;
+        else
+        {
+            _touchpanel.y = 1;
+        }
+
+    }
+}
+
+/*
+函数功能:  触摸屏校准、更新坐标
+返回值:  0 ：校准失败
+		 1 ：校准成功
+*/
+#define UPDTATE_DIFFERENCE 20
+uint8_t TP_UpdateCoordVal(void)
+{
+    uint8_t cnt = 0, difference_x1 = 0, difference_x2 = 0, difference_y1 = 0, difference_y2 = 0;
+    uint32_t time_cnt = 0;
+    uint16_t x, y;
+    uint16_t x1, y1, x2, y2, x3, y3, x4, y4, x5, y5;
+
+    /*1. 判断是否校准过*/
+
+    //画第一个圆
+    St7789_tft_DrawCircle(30, 30, 20, RED);
+    while (1)
+    {
+        if (TP_DetectPressing() == 0) //表示触摸屏按下
+        {
+            x = TP_GetCoordVal(X);
+            y = TP_GetCoordVal(Y);
+            while (TP_DetectPressing() == 0) {} //等待松开
+            cnt++; //记录按下的次数
+        }
+        switch (cnt)
+        {
+        case 1:
+            x1 = x;
+            y1 = y;
+            //清除第一个圆
+            St7789_tft_DrawCircle(30, 30, 20, WHITE);
+            //画第二个圆
+            St7789_tft_DrawCircle(30, 240 - 30, 20, RED);
+            break;
+        case 2:
+            x2 = x;
+            y2 = y;
+            //清除第二个圆
+            St7789_tft_DrawCircle(30, 240 - 30, 20, WHITE);
+            //画第三个圆
+            St7789_tft_DrawCircle(320 - 30, 30, 20, RED);
+            break;
+        case 3:
+            x3 = x;
+            y3 = y;
+            //清除第三个圆
+            St7789_tft_DrawCircle(320 - 30, 30, 20, WHITE);
+            //画第四个圆
+            St7789_tft_DrawCircle(320 - 30, 240 - 30, 20, RED);
+            break;
+        case 4:
+            x4 = x;
+            y4 = y;
+            //清除第四个圆
+            St7789_tft_DrawCircle(320 - 30, 240 - 30, 20, WHITE);
+            //画第五个个圆
+            St7789_tft_DrawCircle(160, 120, 20, RED);
+            break;
+        case 5:
+            x5 = x;
+            y5 = y;
+            //清除第五个圆
+            St7789_tft_DrawCircle(160, 120, 20, WHITE);
+
+            //检测坐标差值
+            if (x2 > x1) difference_x1 = x2 - x1;
+            else difference_x1 = x1 - x2;
+            if (x3 > x4) difference_x2 = x3 - x4;
+            else difference_x2 = x4 - x3;
+
+            if (y3 > y1) difference_y1 = y3 - y1;
+            else difference_y1 = y1 - y3;
+            if (y2 > y4) difference_y2 = y2 - y4;
+            else difference_y2 = y4 - y2;
+
+            if ((difference_x1 < UPDTATE_DIFFERENCE) && (difference_x2 < UPDTATE_DIFFERENCE) \
+                    && (difference_y1 < UPDTATE_DIFFERENCE) && (difference_y2 < UPDTATE_DIFFERENCE))
+            {
+                //计算KX与Ky
+                _touchpanel.xfac = (((x3 - x1) * 100) / (320 - 30 - 30) + ((x4 - x2) * 100) / (320 - 30 - 30)) / 2;
+                _touchpanel.yfac = (((y2 - y1) * 100) / (240 - 30 - 30) + ((y4 - y3) * 100) / (240 - 30 - 30)) / 2;
+
+
+                // 以第一个圆的逻辑坐标 用Kx与ky计算出E点的逻辑坐标
+                x = x1 + (_touchpanel.xfac * (160 - 30)) / 100;
+                y = y1 + (_touchpanel.yfac * (120 - 30)) / 100;
+
+
+                // 比较触摸得到E点逻辑坐标与计算出E点逻辑坐标的差
+                if (x > x5) difference_x1 = x - x5;
+                else difference_x1 = x5 - x;
+                if (y > y5) difference_y1 = y - y5;
+                else difference_y1 = y5 - y;
+                if (difference_x1 < UPDTATE_DIFFERENCE && difference_y1 < UPDTATE_DIFFERENCE)
+                {
+                    //保存基坐标
+                    _touchpanel.xbase = 30;
+                    _touchpanel.ybase = 30;
+                    _touchpanel.xlogic = x1;
+                    _touchpanel.ylogic = y1;
+
+                    MyPrintf(" _touchpanel.xfac : %d \n",  _touchpanel.xfac);
+                    MyPrintf(" _touchpanel.yfac : %d \n",  _touchpanel.yfac);
+                    MyPrintf(" _touchpanel.ybase : %d \n",  _touchpanel.ybase);
+                    MyPrintf(" _touchpanel.ybase : %d \n",  _touchpanel.ybase);
+                    MyPrintf(" _touchpanel.xlogic : %d \n", _touchpanel.xlogic);
+                    MyPrintf(" _touchpanel.ylogic : %d \n", _touchpanel.ylogic);
+
+                    return 1;
+                }
+                else
+                {
+                    cnt = 0;
+                }
+            }
+            else
+            {
+                cnt = 0;
+            }
+            time_cnt++;
+            if (time_cnt >= 3)
+            {
+#if 1
+                _touchpanel.xfac = 102;
+                _touchpanel.yfac = 84;
+                _touchpanel.xbase = 30;
+                _touchpanel.ybase = 30;
+                _touchpanel.xlogic = 29;
+                _touchpanel.ylogic = 83;
+#else
+                _touchpanel.xfac = 96;
+                _touchpanel.yfac = 114;
+                _touchpanel.xbase = 30;
+                _touchpanel.ybase = 30;
+                _touchpanel.xlogic = 51;
+                _touchpanel.ylogic = 26;
+#endif
+
+                return 0;
+
+            }
+            St7789_tft_DrawCircle(30, 30, 20, RED);
+            break;
+
+        }
+
+    }
+    return 0;
+}
