diff --git a/.mxproject b/.mxproject
index b7a94751c8391ea6d776f49c08bcf0c41079a908..d3136ee059579a79eaed8af3f589d4c2aa9383ce 100644
--- a/.mxproject
+++ b/.mxproject
@@ -9,20 +9,20 @@ CDefines=USE_HAL_DRIVER;STM32F413xx;USE_HAL_DRIVER;USE_HAL_DRIVER;
 [PreviousGenFiles]
 AdvancedFolderStructure=true
 HeaderFileListSize=4
-HeaderFiles#0=C:/Users/TiSpOkEs/STM32Cube/CubeMX_Projects/F413_FreeRTOS_LED_Matrix_Game/Core/Inc/FreeRTOSConfig.h
-HeaderFiles#1=C:/Users/TiSpOkEs/STM32Cube/CubeMX_Projects/F413_FreeRTOS_LED_Matrix_Game/Core/Inc/stm32f4xx_it.h
-HeaderFiles#2=C:/Users/TiSpOkEs/STM32Cube/CubeMX_Projects/F413_FreeRTOS_LED_Matrix_Game/Core/Inc/stm32f4xx_hal_conf.h
-HeaderFiles#3=C:/Users/TiSpOkEs/STM32Cube/CubeMX_Projects/F413_FreeRTOS_LED_Matrix_Game/Core/Inc/main.h
+HeaderFiles#0=D:/tmp/Projekte/LEDMatrixGame/LED_Matrix_Game/Core/Inc/FreeRTOSConfig.h
+HeaderFiles#1=D:/tmp/Projekte/LEDMatrixGame/LED_Matrix_Game/Core/Inc/stm32f4xx_it.h
+HeaderFiles#2=D:/tmp/Projekte/LEDMatrixGame/LED_Matrix_Game/Core/Inc/stm32f4xx_hal_conf.h
+HeaderFiles#3=D:/tmp/Projekte/LEDMatrixGame/LED_Matrix_Game/Core/Inc/main.h
 HeaderFolderListSize=1
-HeaderPath#0=C:/Users/TiSpOkEs/STM32Cube/CubeMX_Projects/F413_FreeRTOS_LED_Matrix_Game/Core/Inc
+HeaderPath#0=D:/tmp/Projekte/LEDMatrixGame/LED_Matrix_Game/Core/Inc
 HeaderFiles=;
 SourceFileListSize=5
-SourceFiles#0=C:/Users/TiSpOkEs/STM32Cube/CubeMX_Projects/F413_FreeRTOS_LED_Matrix_Game/Core/Src/freertos.c
-SourceFiles#1=C:/Users/TiSpOkEs/STM32Cube/CubeMX_Projects/F413_FreeRTOS_LED_Matrix_Game/Core/Src/stm32f4xx_it.c
-SourceFiles#2=C:/Users/TiSpOkEs/STM32Cube/CubeMX_Projects/F413_FreeRTOS_LED_Matrix_Game/Core/Src/stm32f4xx_hal_msp.c
-SourceFiles#3=C:/Users/TiSpOkEs/STM32Cube/CubeMX_Projects/F413_FreeRTOS_LED_Matrix_Game/Core/Src/stm32f4xx_hal_timebase_tim.c
-SourceFiles#4=C:/Users/TiSpOkEs/STM32Cube/CubeMX_Projects/F413_FreeRTOS_LED_Matrix_Game/Core/Src/main.c
+SourceFiles#0=D:/tmp/Projekte/LEDMatrixGame/LED_Matrix_Game/Core/Src/freertos.c
+SourceFiles#1=D:/tmp/Projekte/LEDMatrixGame/LED_Matrix_Game/Core/Src/stm32f4xx_it.c
+SourceFiles#2=D:/tmp/Projekte/LEDMatrixGame/LED_Matrix_Game/Core/Src/stm32f4xx_hal_msp.c
+SourceFiles#3=D:/tmp/Projekte/LEDMatrixGame/LED_Matrix_Game/Core/Src/stm32f4xx_hal_timebase_tim.c
+SourceFiles#4=D:/tmp/Projekte/LEDMatrixGame/LED_Matrix_Game/Core/Src/main.c
 SourceFolderListSize=1
-SourcePath#0=C:/Users/TiSpOkEs/STM32Cube/CubeMX_Projects/F413_FreeRTOS_LED_Matrix_Game/Core/Src
+SourcePath#0=D:/tmp/Projekte/LEDMatrixGame/LED_Matrix_Game/Core/Src
 SourceFiles=;
 
diff --git a/Core/Inc/main.h b/Core/Inc/main.h
index 40b2ab9b8b57ea90cb4002c414ec893b07f247fd..671c2492c4aa2f13ad4ea8b4ddcbd078d7a6043d 100644
--- a/Core/Inc/main.h
+++ b/Core/Inc/main.h
@@ -60,9 +60,23 @@ void Error_Handler(void);
 /* USER CODE END EFP */
 
 /* Private defines -----------------------------------------------------------*/
+#define LCD_D7_Pin GPIO_PIN_2
+#define LCD_D7_GPIO_Port GPIOE
+#define LCD_D4_Pin GPIO_PIN_4
+#define LCD_D4_GPIO_Port GPIOE
+#define LCD_D5_Pin GPIO_PIN_5
+#define LCD_D5_GPIO_Port GPIOE
+#define LCD_D6_Pin GPIO_PIN_6
+#define LCD_D6_GPIO_Port GPIOE
 #define USER_Btn_Pin GPIO_PIN_13
 #define USER_Btn_GPIO_Port GPIOC
 #define USER_Btn_EXTI_IRQn EXTI15_10_IRQn
+#define LCD_RS_Pin GPIO_PIN_7
+#define LCD_RS_GPIO_Port GPIOF
+#define LCD_RW_Pin GPIO_PIN_8
+#define LCD_RW_GPIO_Port GPIOF
+#define LCD_E_Pin GPIO_PIN_9
+#define LCD_E_GPIO_Port GPIOF
 #define MCO_Pin GPIO_PIN_0
 #define MCO_GPIO_Port GPIOH
 #define Matrix_Pin GPIO_PIN_0
diff --git a/Core/Src/main.c b/Core/Src/main.c
index df8f91238cc68fb3a900719c0be02ff7e991085d..118bfd8d95ae0e1e959f90456af0e9a17f82b3a7 100644
--- a/Core/Src/main.c
+++ b/Core/Src/main.c
@@ -26,7 +26,6 @@
 #include "ws2812b.h"
 #include "queue.h"
 #include "semphr.h"
-
 /* USER CODE END Includes */
 
 /* Private typedef -----------------------------------------------------------*/
@@ -73,6 +72,13 @@ const osThreadAttr_t Task3_attributes = {
   .stack_size = 128 * 4,
   .priority = (osPriority_t) osPriorityNormal,
 };
+/* Definitions for Task4 */
+osThreadId_t Task4Handle;
+const osThreadAttr_t Task4_attributes = {
+  .name = "Task4",
+  .stack_size = 128 * 4,
+  .priority = (osPriority_t) osPriorityLow,
+};
 /* Definitions for toLEDMatrix */
 osMessageQueueId_t toLEDMatrixHandle;
 const osMessageQueueAttr_t toLEDMatrix_attributes = {
@@ -83,29 +89,27 @@ osMessageQueueId_t fromLEDMatrixHandle;
 const osMessageQueueAttr_t fromLEDMatrix_attributes = {
   .name = "fromLEDMatrix"
 };
-
-/* Definition for DisplayQueue */
-osMessageQueueId_t toDisplayQueue;
+/* Definitions for toDisplayQueue */
+osMessageQueueId_t toDisplayQueueHandle;
 const osMessageQueueAttr_t toDisplayQueue_attributes = {
-	.name = "toDisplay"
+  .name = "toDisplayQueue"
 };
-
-/* Definitions for mySem */
-osSemaphoreId_t mySemHandle;
-const osSemaphoreAttr_t mySem_attributes = {
-  .name = "mySem"
-};
-
-
 /* USER CODE BEGIN PV */
+SemaphoreHandle_t SemLevelsHandle;
+SemaphoreHandle_t SemBtn1Handle;
+SemaphoreHandle_t SemBtn2Handle;
+SemaphoreHandle_t SemBtn3Handle;
+SemaphoreHandle_t SemBtn4Handle;
+SemaphoreHandle_t SemStartGameHandle;
+
 typedef enum { false, true } bool;
 typedef struct matrix_s {
 	bool isRunning;
 	bool hasLost;
-	
 	// 0 = off, 1 = 1st row. 2 = 2nd row. 4 = 3rd row, 8 = 4th row
 	// example: 0xA = 0b1010 = new Element in 2nd and 4th row
 	uint8_t nextLED; // 0..0xFF
+	uint16_t delay;
 } matrix_s;
 
 /* USER CODE END PV */
@@ -117,17 +121,23 @@ static void MX_DMA_Init(void);
 static void MX_USART3_UART_Init(void);
 static void MX_USB_OTG_FS_PCD_Init(void);
 static void MX_TIM2_Init(void);
-void Task01(void *argument);
+void Levels(void *argument);
 void Task02(void *argument);
 void Validate(void *argument);
-
+void Display(void *argument);
 
 /* USER CODE BEGIN PFP */
+extern int rand(void);
 extern TIM_HandleTypeDef htim7;
-	SemaphoreHandle_t SemBtn1;
-	SemaphoreHandle_t SemBtn2;
-	SemaphoreHandle_t SemBtn3;
-	SemaphoreHandle_t SemBtn4;
+
+void lcd_init(void);
+void lcd_put_cur(int, int);
+void lcd_send_data(char);
+void ldc_send_cmd(char);
+void send_to_lcd(char,int);
+void lcd_send_string(char*);
+void lcd_clear(void);
+
 /* USER CODE END PFP */
 
 /* Private user code ---------------------------------------------------------*/
@@ -169,6 +179,20 @@ int main(void)
   MX_TIM2_Init();
   /* USER CODE BEGIN 2 */
 	
+
+//	lcd_init();
+//	lcd_clear();
+//	lcd_put_cur(0, 0);
+//  lcd_send_string("HELLO ");
+// // lcd_send_string("WORLD ");
+// // lcd_send_string("FROM");
+// // HAL_Delay(1000);
+//  lcd_put_cur(1, 0);
+//  lcd_send_string("CONTROLLERSTECH");
+//	lcd_clear();
+ // HAL_Delay(2000);
+ // lcd_clear();
+
   /* USER CODE END 2 */
 
   /* Init scheduler */
@@ -178,17 +202,25 @@ int main(void)
   /* add mutexes, ... */
   /* USER CODE END RTOS_MUTEX */
 
-  /* Create the semaphores(s) */
-  /* creation of mySem */
-  mySemHandle = osSemaphoreNew(1, 1, &mySem_attributes);
-
   /* USER CODE BEGIN RTOS_SEMAPHORES */
   /* add semaphores, ... */
+	  /* creation of SemLevels */
+  SemLevelsHandle = xSemaphoreCreateBinary();
+
+  /* creation of SemBtn1 */
+  SemBtn1Handle = xSemaphoreCreateBinary();
+
+  /* creation of SemBtn2 */
+  SemBtn2Handle = xSemaphoreCreateBinary();
 
-			SemBtn1 = xSemaphoreCreateBinary();
-			SemBtn2 = xSemaphoreCreateBinary(); 
-			SemBtn3	= xSemaphoreCreateBinary(); 
-			SemBtn4 = xSemaphoreCreateBinary(); 
+  /* creation of SemBtn3 */
+  SemBtn3Handle = xSemaphoreCreateBinary();
+
+  /* creation of SemBtn4 */
+  SemBtn4Handle = xSemaphoreCreateBinary();
+
+  /* creation of SemStartGame */
+  SemStartGameHandle = xSemaphoreCreateBinary();
 
   /* USER CODE END RTOS_SEMAPHORES */
 
@@ -202,9 +234,9 @@ int main(void)
 
   /* creation of fromLEDMatrix */
   fromLEDMatrixHandle = osMessageQueueNew (16, sizeof(matrix_s), &fromLEDMatrix_attributes);
-	
-	/* creation of toDisplay Queue */
-	toDisplayQueue = osMessageQueueNew(16, 8, &toDisplayQueue_attributes);
+
+  /* creation of toDisplayQueue */
+  toDisplayQueueHandle = osMessageQueueNew (16, sizeof(uint16_t), &toDisplayQueue_attributes);
 
   /* USER CODE BEGIN RTOS_QUEUES */
   /* add queues, ... */
@@ -212,13 +244,16 @@ int main(void)
 
   /* Create the thread(s) */
   /* creation of Task1 */
-  Task1Handle = osThreadNew(Task01, NULL, &Task1_attributes);
+  Task1Handle = osThreadNew(Levels, NULL, &Task1_attributes);
 
   /* creation of Task2 */
   Task2Handle = osThreadNew(Task02, NULL, &Task2_attributes);
 
   /* creation of Task3 */
-  Task3Handle = osThreadNew(Validate, NULL, &Task3_attributes);
+//  Task3Handle = osThreadNew(Validate, NULL, &Task3_attributes);
+
+//  /* creation of Task4 */
+//  Task4Handle = osThreadNew(Display, NULL, &Task4_attributes);
 
   /* USER CODE BEGIN RTOS_THREADS */
   /* add threads, ... */
@@ -243,6 +278,8 @@ int main(void)
 
     /* USER CODE BEGIN 3 */
   }
+	
+	
   /* USER CODE END 3 */
 }
 
@@ -451,13 +488,21 @@ static void MX_GPIO_Init(void)
   GPIO_InitTypeDef GPIO_InitStruct = {0};
 
   /* GPIO Ports Clock Enable */
+  __HAL_RCC_GPIOE_CLK_ENABLE();
   __HAL_RCC_GPIOC_CLK_ENABLE();
+  __HAL_RCC_GPIOF_CLK_ENABLE();
   __HAL_RCC_GPIOH_CLK_ENABLE();
   __HAL_RCC_GPIOA_CLK_ENABLE();
   __HAL_RCC_GPIOB_CLK_ENABLE();
   __HAL_RCC_GPIOD_CLK_ENABLE();
   __HAL_RCC_GPIOG_CLK_ENABLE();
 
+  /*Configure GPIO pin Output Level */
+  HAL_GPIO_WritePin(GPIOE, LCD_D7_Pin|LCD_D4_Pin|LCD_D5_Pin|LCD_D6_Pin, GPIO_PIN_RESET);
+
+  /*Configure GPIO pin Output Level */
+  HAL_GPIO_WritePin(GPIOF, LCD_RS_Pin|LCD_RW_Pin|LCD_E_Pin, GPIO_PIN_RESET);
+
   /*Configure GPIO pin Output Level */
   HAL_GPIO_WritePin(GPIOB, LED_green_Pin|LED_red_Pin|LED_blue_Pin, GPIO_PIN_RESET);
 
@@ -467,12 +512,26 @@ static void MX_GPIO_Init(void)
   /*Configure GPIO pin Output Level */
   HAL_GPIO_WritePin(GPIOC, LED1_Pin|LED2_Pin|LED3_Pin|LED4_Pin, GPIO_PIN_RESET);
 
+  /*Configure GPIO pins : LCD_D7_Pin LCD_D4_Pin LCD_D5_Pin LCD_D6_Pin */
+  GPIO_InitStruct.Pin = LCD_D7_Pin|LCD_D4_Pin|LCD_D5_Pin|LCD_D6_Pin;
+  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+  GPIO_InitStruct.Pull = GPIO_NOPULL;
+  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+  HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
+
   /*Configure GPIO pin : USER_Btn_Pin */
   GPIO_InitStruct.Pin = USER_Btn_Pin;
   GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
   GPIO_InitStruct.Pull = GPIO_NOPULL;
   HAL_GPIO_Init(USER_Btn_GPIO_Port, &GPIO_InitStruct);
 
+  /*Configure GPIO pins : LCD_RS_Pin LCD_RW_Pin LCD_E_Pin */
+  GPIO_InitStruct.Pin = LCD_RS_Pin|LCD_RW_Pin|LCD_E_Pin;
+  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+  GPIO_InitStruct.Pull = GPIO_NOPULL;
+  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+  HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
+
   /*Configure GPIO pins : LED_green_Pin LED_red_Pin LED_blue_Pin */
   GPIO_InitStruct.Pin = LED_green_Pin|LED_red_Pin|LED_blue_Pin;
   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
@@ -519,34 +578,131 @@ static void MX_GPIO_Init(void)
 }
 
 /* USER CODE BEGIN 4 */
+
+void send_to_lcd (char data, int rs)
+{
+    HAL_GPIO_WritePin(LCD_RS_GPIO_Port, LCD_RS_Pin, rs);  // rs = 1 for data, rs=0 for command
+    /* write the data to the respective pin */
+    HAL_GPIO_WritePin(LCD_D7_GPIO_Port, LCD_D7_Pin, ((data>>3)&0x01));
+    HAL_GPIO_WritePin(LCD_D6_GPIO_Port, LCD_D6_Pin, ((data>>2)&0x01));
+    HAL_GPIO_WritePin(LCD_D5_GPIO_Port, LCD_D5_Pin, ((data>>1)&0x01));
+    HAL_GPIO_WritePin(LCD_D4_GPIO_Port, LCD_D4_Pin, ((data>>0)&0x01));
+    /* Toggle EN PIN to send the data
+     * if the HCLK > 100 MHz, use the  20 us delay
+     * if the LCD still doesn't work, increase the delay to 50, 80 or 100..
+     */
+    HAL_GPIO_WritePin(LCD_E_GPIO_Port, LCD_E_Pin, 1);
+		vTaskDelay(20);
+    HAL_GPIO_WritePin(LCD_E_GPIO_Port, LCD_E_Pin, 0);
+		vTaskDelay(20);
+}
+	
+void lcd_send_cmd (char cmd)
+{
+    char datatosend;
+    /* send upper nibble first */
+    datatosend = ((cmd>>4)&0x0f);
+    send_to_lcd(datatosend,0);  // RS must be while sending command
+    /* send Lower Nibble */
+    datatosend = ((cmd)&0x0f);
+    send_to_lcd(datatosend, 0);
+}
+
+void lcd_send_data (char data)
+{
+    char datatosend;
+   
+    /* send higher nibble */
+    datatosend = ((data>>4)&0x0f);
+    send_to_lcd(datatosend, 1);  // rs =1 for sending data
+    /* send Lower nibble */
+    datatosend = ((data)&0x0f);
+    send_to_lcd(datatosend, 1);
+}
+
+void lcd_init (void)
+{
+    // 4 bit initialisation
+    HAL_Delay(50);  // wait for >40ms
+    lcd_send_cmd (0x30);
+    HAL_Delay(5);  // wait for >4.1ms
+    lcd_send_cmd (0x30);
+    HAL_Delay(1);  // wait for >100us
+    lcd_send_cmd (0x30);
+    HAL_Delay(10);
+    lcd_send_cmd (0x20);  // 4bit mode
+    HAL_Delay(10);
+
+  // dislay initialisation
+    lcd_send_cmd (0x28); // Function set --> DL=0 (4 bit mode), N = 1 (2 line display) F = 0 (5x8 characters)
+    HAL_Delay(1);
+    lcd_send_cmd (0x08); //Display on/off control --> D=0,C=0, B=0  ---> display off
+    HAL_Delay(1);
+    lcd_send_cmd (0x01);  // clear display
+    HAL_Delay(1);
+    HAL_Delay(1);
+    lcd_send_cmd (0x06); //Entry mode set --> I/D = 1 (increment cursor) & S = 0 (no shift)
+    HAL_Delay(1);
+    lcd_send_cmd (0x0C); //Display on/off control --> D = 1, C and B = 0. (Cursor and blink, last two bits)
+}
+
+void lcd_put_cur(int row, int col)
+{
+    switch (row)
+    {
+        case 0:
+            col |= 0x80;
+            break;
+        case 1:
+            col |= 0xC0;
+            break;
+    }
+
+    lcd_send_cmd (col);
+}
+
+void lcd_send_string (char *str)
+{
+	while (*str) lcd_send_data (*str++);
+}
+
+void lcd_clear (void)
+{
+	lcd_send_cmd(0x01);
+	HAL_Delay(2);
+}
+
+
 void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
 {	
   if(GPIO_Pin == btn1)
   {
 		HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_8);
-		xSemaphoreGive(SemBtn1);
+		xSemaphoreGiveFromISR(SemBtn1Handle, NULL);
     //HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
   }
 	else if(GPIO_Pin == btn2)
   {
 		HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_9);
-		xSemaphoreGive(SemBtn2);
+		xSemaphoreGiveFromISR(SemBtn2Handle, NULL);
     //HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_7);
   }
 	else if(GPIO_Pin == btn3)
   {
 		HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_10);
-		xSemaphoreGive(SemBtn3);
+		xSemaphoreGiveFromISR(SemBtn3Handle, NULL);
     //HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_14);
   }
 	else if(GPIO_Pin == btn4)
   {
 		HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_11);
-		xSemaphoreGive(SemBtn4);
+		xSemaphoreGiveFromISR(SemBtn4Handle, NULL);
 //	    HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0|GPIO_PIN_7|GPIO_PIN_14);
   }
-	else if(GPIO_Pin == GPIO_PIN_13)
+		else if(GPIO_Pin == USER_Btn_Pin)
   {
+		xSemaphoreGiveFromISR(SemStartGameHandle, NULL);
+//	    HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0|GPIO_PIN_7|GPIO_PIN_14);
 	    //HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0|GPIO_PIN_7|GPIO_PIN_14, GPIO_PIN_RESET);
 		//HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11);
 		HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_9);
@@ -555,24 +711,90 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
 
 /* USER CODE END 4 */
 
-/* USER CODE BEGIN Header_Task01 */
+/* USER CODE BEGIN Header_Levels */
 /**
   * @brief  Function implementing the Task1 thread.
   * @param  argument: Not used
   * @retval None
   */
-uint32_t x = 0u;
-/* USER CODE END Header_Task01 */
-void Task01(void *argument)
+/* USER CODE END Header_Levels */
+void Levels(void *argument)
 {
   /* USER CODE BEGIN 5 */
+	matrix_s sendQueue;
+	int random;
+	int rand1;
+	int rand2;
+	int rand3;
+	int counter=0;
+	int number;
   /* Infinite loop */
   for(;;)
   {
-		//LED3toggle();
-		osDelay(1000);
-		osDelay(1);
-  }
+		if( xSemaphoreTake( SemLevelsHandle, ( TickType_t ) 1000 ) == pdTRUE )
+        {
+					number=0;
+					if (counter <= 7)
+					{
+						random = 0;
+					}
+					else if(counter <=15)
+					{
+						random =(rand()%2);
+					}
+					else if(counter <=20)
+					{
+						random =(rand()%3);
+					}
+					else 
+					{
+						random =(rand()%4);
+					}
+				
+					counter ++;
+					
+					if(random ==0)
+					{
+						rand1 =(rand()%4);
+						number ^=(1 <<rand1);			
+					}
+					else if (random ==1)
+					{
+						rand1 =(rand()%4);
+						rand2 =(rand()%3);
+						if (rand1 == rand2 & rand1 !=3)
+						{
+							rand2 ++;
+						}
+						else{
+							rand2 --;
+						}		
+						number ^=(1 <<rand1);	
+						number ^=(1 <<rand2);				
+					}
+					else if(random ==2)
+					{
+						rand1 =(rand()%4);
+						for(int i =0; i<4; i++)
+						{
+							if (i!= rand1)	
+							{
+								number ^=(1 <<i);	
+							}				
+						}
+					}
+					else
+					{
+						number=15;
+					}	
+					
+					sendQueue.nextLED=number;
+					sendQueue.isRunning = true;
+					sendQueue.hasLost = false;
+					sendQueue.delay = 750;
+					xQueueSend( toLEDMatrixHandle, &sendQueue, ( TickType_t ) 0 );		
+				}  
+		}
   /* USER CODE END 5 */
 }
 
@@ -587,94 +809,144 @@ void Task02(void *argument)
 {
   /* USER CODE BEGIN Task02 */
 
-	uint32_t colors[] = {
-	WHITE
-	,BLUE
-	,PURPLE
-	,RED
-	,GREEN
-	,ORANGE
-	,TURQUOISE
-	,YELLOW
+	// init constants & variables
+	enum ROW { ROW1, ROW2, ROW3, ROW4 };
+	const uint8_t ROWS = 4;
+	const uint8_t FIELDS = 16; // 4 rows and 4 columns = 16
+		uint32_t colors[] = {
+		WHITE
+		,BLUE
+		,PURPLE
+		,RED
+		,GREEN
+		,ORANGE
+		,TURQUOISE
+		,YELLOW
+	};
+	uint32_t led_matrix[] = { 
+		0,0,0,0,
+		0,0,0,0,
+		0,0,0,0,
+		0,0,0,0
 	};
-	uint8_t num_colors = sizeof(colors) / sizeof(uint32_t);
+
+	uint8_t num_colors = sizeof(colors) / sizeof(uint32_t) - sizeof(uint32_t);
 	LED led = *get_instance();
 	const uint8_t gameRowXOR = 0xf;
-
-	/* Infinite loop */
+	uint16_t delay = 500;
+	bool isRunning = false;
+	bool scrollOut = false;
+	uint8_t scrollCounter = 0;
 
 	// init Matrix
-	//LED_set_all_RGB_t(BLACK, 1);
-	//LED_init();
-	HAL_Delay(200);
-	led.LED_set_all_RGB_32(TURQUOISE, 1);
-//	HAL_Delay(2000);
-		//LED_set_all_off(1);
-	vTaskDelay(2000);
-	led.LED_set_all_off(1);
-	vTaskDelay(200);
-
-	led.LED_set_RGB(num_colors-1,10,10,10);
-	led.LED_transmit();
-	vTaskDelay(2000);
-	//LED_set_all_RGB_32(BLUE, 1);
-
-
-	uint8_t delay = 250;
-	while(1){
-		for(uint8_t row = 0; row < NUM_LED; row=row+16) {
-			for(uint8_t i = row, index=0; i < row+8/*NUM_LED >> 3*/; i=i+1,index++){ // gameRow is first index of specific row
-				led.LED_set_all_off(1);
-				led.LED_set_RGB_32(i  , BLUE | GREEN | RED);
-				led.LED_set_RGB_32(i ^ gameRowXOR,  BLUE | GREEN | RED);
-				if (i > row && i < row+8) {
-					led.LED_set_RGB_32(i-1  , PURPLE /*colors[index+1]*/);
-					led.LED_set_RGB_32((i-1) ^ gameRowXOR, PURPLE /*colors[index+1]*/);	
+	const uint8_t say_hi[] = {1,2,3,6,9,10,11,12,14,15};
+	const uint8_t say_hi_length = sizeof(say_hi) / sizeof(uint8_t) - sizeof(uint8_t);
+	for(uint8_t i=0; i <= say_hi_length-3; i++) led_matrix[say_hi[i]] = TURQUOISE;
+	for(uint8_t i=say_hi_length-2; i <= say_hi_length; i++) led_matrix[say_hi[i]] = RED;
+
+	/* Infinite loop */
+	while(1) {
+
+		// set led matrix to current colors
+		led.LED_set_all_off(0);
+		uint8_t LEDMatrixIndex = 0;
+		for(uint8_t cube = 0; cube < FIELDS;) {
+				for(uint8_t column = 0; column <= 6; column+=2) {
+					led.LED_set_RGB_32(LEDMatrixIndex  						  , led_matrix[cube]);
+					led.LED_set_RGB_32(LEDMatrixIndex ^ gameRowXOR  , led_matrix[cube]);
+					led.LED_set_RGB_32(LEDMatrixIndex+1  					  , led_matrix[cube]);
+					led.LED_set_RGB_32(LEDMatrixIndex+1 ^ gameRowXOR, led_matrix[cube]);
+					cube++;
+					LEDMatrixIndex += 2;
 				}
+				LEDMatrixIndex += 8;
+		}
 		led.LED_transmit();
-		vTaskDelay(--delay);
-	}
-}
-	vTaskDelay(2000);
-	break;
-}
-
-	matrix_s sendQueue;
-	sendQueue.isRunning = true;
-//	osMessageQueuePut(toLEDMatrixHandle, testQueue, 1, 1
-	xQueueSend(toLEDMatrixHandle, &sendQueue, (portTickType) 1);
-	matrix_s recvQueue;
-	if (xQueueReceive(toLEDMatrixHandle, &recvQueue, (portTickType) 10 ) == true)
-	{
-		if (recvQueue.isRunning == true) {
-			led.LED_set_all_RGB_32(YELLOW, 1);
-			while (1) { }
+		// end set colors
+
+		// try to take Semaphore from IRQ if user pressed USER_BTN to start game
+		if ( scrollOut || xSemaphoreTake( SemStartGameHandle, ( TickType_t ) 10 ) == pdTRUE ) {
+			//scroll out "Hi"
+			scrollOut = true;
+			scrollCounter++;
+			if (scrollCounter > 5) {
+				isRunning = true;
+				// release Levels Semaphore
+				xSemaphoreGive( SemLevelsHandle );
+			}
 		}
-	}
-	
-	for(int j = 0; j < NUM_LED; j++){
-	for(uint_fast8_t i = j; i< NUM_LED-j; i=i+8){ // TODO! DEBUGGEN!
+		// end take sem from IRQ
 		
-		led.LED_set_RGB_32(i  , RED 	);
-		led.LED_set_RGB_32(i+1, WHITE 	);
-		led.LED_set_RGB_32(i+2, PURPLE  );
-		led.LED_set_RGB_32(i+3, BLACK 		);
-		led.LED_set_RGB_32(i+4, GREEN 	);
-		led.LED_set_RGB_32(i+5, BLUE 		);
-	  led.LED_set_RGB_32(i+6, ORANGE  );	
-	  led.LED_set_RGB_32(i+7, TURQUOISE);
-	}
-	led.LED_transmit();
-	vTaskDelay(100);
-}
-	while(1){
-	for(int i=0;i<num_colors;i++){
-		led.LED_set_all_RGB_32(colors[i],1);
-		vTaskDelay(5);
-		led.LED_set_all_off(1);
-		vTaskDelay(5);
+		if (isRunning) {
+			// check matrix if set a color
+			// 3,7,11,15 = last elements in each row
+			uint8_t activeLEDs = 0;
+			if (led_matrix[3] > 0) activeLEDs += 1;
+			if (led_matrix[7] > 0) activeLEDs += 2;
+			if (led_matrix[11] > 0) activeLEDs += 4;
+			if (led_matrix[15] > 0) activeLEDs += 8;
+			if (activeLEDs > 0) xQueueSend(fromLEDMatrixHandle, &activeLEDs, (portTickType) 1);
+			// end check last row
+		}
+		
+		if (isRunning || scrollOut) {
+			// shift matrix to next LED in each row after vTaskDelay
+			for(uint8_t row = 0; row < FIELDS; row+=ROWS) {
+				for(uint8_t i = row+ROW4; i > row; i--) {
+					led_matrix[i] = led_matrix[i-1];
+					//if (i%1 == 0) 
+						led_matrix[i-1] = OFF;
+				}
+			}
+			// end shifting down
+		}
+		
+		if (isRunning) {
+			// checking queue for new incoming elements			
+			matrix_s recvQueue;
+			if (xQueueReceive(toLEDMatrixHandle, &recvQueue, (portTickType) 10 ) == true)
+			{
+				// player lost, showing "ToT", reseting values
+				if (recvQueue.hasLost) {
+					const uint8_t say_tot[] = {
+						1,9,10,11,12,13,14,17, // 8
+						20,21,25,28,35,38,42,  // 7
+						43,46,49,50,51,52,53,54,62}; // 9
+					led.LED_set_all_off(0);
+					const uint8_t say_tot_length = sizeof(say_tot) / sizeof(uint8_t) - sizeof(uint8_t);
+					for(uint8_t i=0; i < 8; i++) led.LED_set_RGB_32(say_tot[i], TURQUOISE);
+					for(uint8_t i=15; i <= say_tot_length; i++) led.LED_set_RGB_32(say_tot[i], RED);
+					for(uint8_t i=8; i < 8+8; i++) led.LED_set_RGB_32(say_tot[i], YELLOW);
+					led.LED_transmit();
+
+					isRunning = false;
+					delay = 250;
+					for(uint8_t i = 0; i < FIELDS; i++) led_matrix[i] = 0; // Reset game table
+					xSemaphoreGive( SemStartGameHandle );
+				}
+				// end "hasLost"
+				
+				// set color if received a specific 1-bit
+				// first in row: 0, 4, 8, 12
+				if (recvQueue.nextLED > 0) {
+					for(uint8_t i=ROW1; i <= ROW4; i++) {
+							uint8_t checkBit = 1 << i;
+							if ((recvQueue.nextLED & checkBit) == checkBit) {
+								// select a random color from color_array
+								uint32_t newColor = colors[rand() % num_colors];
+								led_matrix[i*4] = newColor;
+							}
+					}
+					delay = recvQueue.delay;
+				}
+				// end set nextLED
+				xSemaphoreGive( SemLevelsHandle );
+			}
+			// end queue check
+		}
+		// end isRunning
+		vTaskDelay(delay);
 	}
-}
   /* USER CODE END Task02 */
 }
 
@@ -706,125 +978,141 @@ void Validate(void *argument)
 				points = 5 * i % 11;
 				vTaskDelay(points * 50);
 				
-				if(xSemaphoreTake(SemBtn1,10))
+				if(xSemaphoreTake(SemBtn1Handle,10))
 					B1 = true;
-				if(xSemaphoreTake(SemBtn2,10))
+				if(xSemaphoreTake(SemBtn2Handle,10))
 					B2 = true;
-				if(xSemaphoreTake(SemBtn3,10))
+				if(xSemaphoreTake(SemBtn3Handle,10))
 					B3 = true;
-				if(xSemaphoreTake(SemBtn4,10))
+				if(xSemaphoreTake(SemBtn4Handle,10))
 					B4 = true;
 				
 				switch(recv) 
 				{
-					case 1: 
+					case 1:
 					{
 						if(B1 && !B2 && !B3 && !B4)
 						{
-							xQueueSend(toDisplayQueue, &points, (portTickType)1); // Punkte ans Display senden  
-						}						
+							xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden  
+						}
+						break;
 					}
 					case 2: 
 					{
 						if(!B1 && B2 && !B3 && !B4)
 						{
-							xQueueSend(toDisplayQueue, &points, (portTickType)1); // Punkte ans Display senden 
-						}		
+							xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden 
+						}
+						break;
 					}
 					case 3: 
 					{
 						if(B1 && B2 && !B3 && !B4)
 						{
-							xQueueSend(toDisplayQueue, &points, (portTickType)1); // Punkte ans Display senden  
-						}	
+							xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden  
+						}
+						break;
 					}
 					case 4: 
 					{
 						if(!B1 && !B2 && B3 && !B4)
 						{
-							xQueueSend(toDisplayQueue, &points, (portTickType)1); // Punkte ans Display senden 
-						}	
+							xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden 
+						}
+						break;
 					}
 					case 5: 
 					{
 						if(B1 && !B2 && B3 && !B4)
 						{
-							xQueueSend(toDisplayQueue, &points, (portTickType)1); // Punkte ans Display senden 
-						}	
+							xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden 
+						}
+						break;
 					}
 					case 6: 
 					{
 						if(!B1 && B2 && B3 && !B4)
 						{
-							xQueueSend(toDisplayQueue, &points, (portTickType)1); // Punkte ans Display senden 
-						}	
+							xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden 
+						}
+						break;
 					}
 					case 7: 
 					{
 						if(B1 && B2 && B3 && !B4)
 						{
-							xQueueSend(toDisplayQueue, &points, (portTickType)1); // Punkte ans Display senden 
-						}	
+							xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden 
+						}
+						break;
 					}
 					case 8: 
 					{
 						if(!B1 && !B2 && !B3 && B4)
 						{
-							xQueueSend(toDisplayQueue, &points, (portTickType)1); // Punkte ans Display senden 
-						}	
+							xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden 
+						}
+						break;
 					}
 					case 9: 
 					{
 						if(B1 && !B2 && !B3 && B4)
 						{
-							xQueueSend(toDisplayQueue, &points, (portTickType)1); // Punkte ans Display senden 
-						}	
+							xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden 
+						}
+						break;
 					}
 					case 10: 
 					{
 						if(!B1 && B2 && !B3 && B4)
 						{
-							xQueueSend(toDisplayQueue, &points, (portTickType)1); // Punkte ans Display senden 
-						}	
+							xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden 
+						}
+						break;
 					}
 					case 11: 
 					{
 						if(B1 && B2 && !B3 && B4)
 						{
-							xQueueSend(toDisplayQueue, &points, (portTickType)1); // Punkte ans Display senden 
-						}	
+							xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden 
+						}
+						break;
 					}
 					case 12: 
 					{
 						if(!B1 && !B2 && B3 && B4)
 						{
-							xQueueSend(toDisplayQueue, &points, (portTickType)1); // Punkte ans Display senden 
+							xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden 
 						}	
+						break;
 					}
 					case 13: 
 					{
 						if(B1 && !B2 && B3 && B4)
 						{
-							xQueueSend(toDisplayQueue, &points, (portTickType)1); // Punkte ans Display senden 
+							xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden 
 						}	
+						break;
 					}
 					case 14: 
 					{
 						if(!B1 && B2 && B3 && B4)
 						{
-							xQueueSend(toDisplayQueue, &points, (portTickType)1); // Punkte ans Display senden 
+							xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden 
 						}	
+						break;
 					}
 					case 15: 
 					{
 						if(B1 && B2 && B3 && B4)
 						{
-							xQueueSend(toDisplayQueue, &points, (portTickType)1); // Punkte ans Display senden 
+							xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden 
 						}	
+						break;
 					}
 					default: 
 					{
-						 xQueueSend(toDisplayQueue, "Dead", (portTickType)1); // Punkte ans Display senden  
+						 xQueueSend(toDisplayQueueHandle, 0, (portTickType)1); // Punkte ans Display senden  
+						break;
 					}
 				}
 			}
@@ -833,6 +1121,41 @@ void Validate(void *argument)
   /* USER CODE END Validate */
 }
 
+/* USER CODE BEGIN Header_Display */
+/**
+* @brief Function implementing the Task04 thread.
+* @param argument: Not used
+* @retval None
+*/
+/* USER CODE END Header_Display */
+void Display(void *argument)
+{
+  /* USER CODE BEGIN Display */
+  /* Infinite loop */
+  for(;;)
+  { 
+		int rec = 1; // Initialisierung mit 1 damit am Anfang nicht die Todesnachricht ausgegeben wird
+		int points = 0;
+		char punkte[] = "1000";
+    if(xQueueReceive(toDisplayQueueHandle, &rec , (portTickType)0) == true)
+		{
+			points += rec;
+			punkte[0] = points / 100;
+			punkte[1] = (points %100) / 10;
+			punkte[2] = points % 10;
+		}
+	//	LCD_init();
+	//	LCD_setCursor(0,0);
+		
+	//	LCD_print(punkte);
+		if(rec == 0)
+		{
+	//		LCD_print("You are dead");
+		}
+  }
+  /* USER CODE END Display */
+}
+
  /**
   * @brief  Period elapsed callback in non blocking mode
   * @note   This function is called  when TIM7 interrupt took place, inside
@@ -865,6 +1188,7 @@ void Error_Handler(void)
   __disable_irq();
   while (1)
   {
+		
   }
   /* USER CODE END Error_Handler_Debug */
 }
diff --git a/F413_FreeRTOS_LED_Matrix_Game.ioc b/F413_FreeRTOS_LED_Matrix_Game.ioc
index 79812ed7e595125c7521b96681f62a98fe2eabc5..3a25561d109294828e0b73ea8af163418255c7f2 100644
--- a/F413_FreeRTOS_LED_Matrix_Game.ioc
+++ b/F413_FreeRTOS_LED_Matrix_Game.ioc
@@ -11,11 +11,10 @@ Dma.TIM2_CH1.0.PeriphDataAlignment=DMA_PDATAALIGN_WORD
 Dma.TIM2_CH1.0.PeriphInc=DMA_PINC_DISABLE
 Dma.TIM2_CH1.0.Priority=DMA_PRIORITY_VERY_HIGH
 Dma.TIM2_CH1.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode
-FREERTOS.BinarySemaphores01=mySem,Dynamic,NULL
 FREERTOS.FootprintOK=true
-FREERTOS.IPParameters=Tasks01,BinarySemaphores01,FootprintOK,configUSE_PREEMPTION,configUSE_OS2_TIMER,Queues01
-FREERTOS.Queues01=toLEDMatrix,16,matrix_s,0,Dynamic,NULL,NULL;fromLEDMatrix,16,matrix_s,0,Dynamic,NULL,NULL
-FREERTOS.Tasks01=Task1,24,128,Task01,Default,NULL,Dynamic,NULL,NULL;Task2,24,128,Task02,Default,NULL,Dynamic,NULL,NULL;Task3,24,128,Task03,Default,NULL,Dynamic,NULL,NULL
+FREERTOS.IPParameters=Tasks01,FootprintOK,configUSE_PREEMPTION,configUSE_OS2_TIMER,Queues01
+FREERTOS.Queues01=toLEDMatrix,16,matrix_s,0,Dynamic,NULL,NULL;fromLEDMatrix,16,matrix_s,0,Dynamic,NULL,NULL;toDisplayQueue,16,uint16_t,0,Dynamic,NULL,NULL
+FREERTOS.Tasks01=Task1,24,128,Levels,Default,NULL,Dynamic,NULL,NULL;Task2,24,128,Task02,Default,NULL,Dynamic,NULL,NULL;Task3,24,128,Validate,Default,NULL,Dynamic,NULL,NULL;Task4,8,128,Display,Default,NULL,Dynamic,NULL,NULL
 FREERTOS.configUSE_OS2_TIMER=1
 FREERTOS.configUSE_PREEMPTION=1
 File.Version=6
@@ -33,39 +32,46 @@ Mcu.IP7=USB_OTG_FS
 Mcu.IPNb=8
 Mcu.Name=STM32F413Z(G-H)Tx
 Mcu.Package=LQFP144
-Mcu.Pin0=PC13
-Mcu.Pin1=PC14-OSC32_IN
-Mcu.Pin10=PG6
-Mcu.Pin11=PG7
-Mcu.Pin12=PC8
-Mcu.Pin13=PC9
-Mcu.Pin14=PA8
-Mcu.Pin15=PA9
-Mcu.Pin16=PA10
-Mcu.Pin17=PA11
-Mcu.Pin18=PA12
-Mcu.Pin19=PA13
-Mcu.Pin2=PC15-OSC32_OUT
-Mcu.Pin20=PA14
-Mcu.Pin21=PC10
-Mcu.Pin22=PC11
-Mcu.Pin23=PD4
-Mcu.Pin24=PD5
-Mcu.Pin25=PD6
-Mcu.Pin26=PD7
-Mcu.Pin27=PB3
-Mcu.Pin28=PB7
-Mcu.Pin29=VP_FREERTOS_VS_CMSIS_V2
-Mcu.Pin3=PH0 - OSC_IN
-Mcu.Pin30=VP_SYS_VS_tim7
-Mcu.Pin31=VP_TIM2_VS_ClockSourceINT
-Mcu.Pin4=PH1 - OSC_OUT
-Mcu.Pin5=PA0
-Mcu.Pin6=PB0
-Mcu.Pin7=PB14
-Mcu.Pin8=PD8
-Mcu.Pin9=PD9
-Mcu.PinsNb=32
+Mcu.Pin0=PE2
+Mcu.Pin1=PE4
+Mcu.Pin10=PH0 - OSC_IN
+Mcu.Pin11=PH1 - OSC_OUT
+Mcu.Pin12=PA0
+Mcu.Pin13=PB0
+Mcu.Pin14=PB14
+Mcu.Pin15=PD8
+Mcu.Pin16=PD9
+Mcu.Pin17=PG6
+Mcu.Pin18=PG7
+Mcu.Pin19=PC8
+Mcu.Pin2=PE5
+Mcu.Pin20=PC9
+Mcu.Pin21=PA8
+Mcu.Pin22=PA9
+Mcu.Pin23=PA10
+Mcu.Pin24=PA11
+Mcu.Pin25=PA12
+Mcu.Pin26=PA13
+Mcu.Pin27=PA14
+Mcu.Pin28=PC10
+Mcu.Pin29=PC11
+Mcu.Pin3=PE6
+Mcu.Pin30=PD4
+Mcu.Pin31=PD5
+Mcu.Pin32=PD6
+Mcu.Pin33=PD7
+Mcu.Pin34=PB3
+Mcu.Pin35=PB7
+Mcu.Pin36=VP_FREERTOS_VS_CMSIS_V2
+Mcu.Pin37=VP_SYS_VS_tim7
+Mcu.Pin38=VP_TIM2_VS_ClockSourceINT
+Mcu.Pin4=PC13
+Mcu.Pin5=PC14-OSC32_IN
+Mcu.Pin6=PC15-OSC32_OUT
+Mcu.Pin7=PF7
+Mcu.Pin8=PF8
+Mcu.Pin9=PF9
+Mcu.PinsNb=39
 Mcu.ThirdPartyNb=0
 Mcu.UserConstants=
 Mcu.UserName=STM32F413ZHTx
@@ -205,6 +211,34 @@ PD9.GPIO_Label=STLK_TX [STM32F103CBT6_PA2]
 PD9.Locked=true
 PD9.Mode=Asynchronous
 PD9.Signal=USART3_RX
+PE2.GPIOParameters=GPIO_Label
+PE2.GPIO_Label=LCD_D7
+PE2.Locked=true
+PE2.Signal=GPIO_Output
+PE4.GPIOParameters=GPIO_Label
+PE4.GPIO_Label=LCD_D4
+PE4.Locked=true
+PE4.Signal=GPIO_Output
+PE5.GPIOParameters=GPIO_Label
+PE5.GPIO_Label=LCD_D5
+PE5.Locked=true
+PE5.Signal=GPIO_Output
+PE6.GPIOParameters=GPIO_Label
+PE6.GPIO_Label=LCD_D6
+PE6.Locked=true
+PE6.Signal=GPIO_Output
+PF7.GPIOParameters=GPIO_Label
+PF7.GPIO_Label=LCD_RS
+PF7.Locked=true
+PF7.Signal=GPIO_Output
+PF8.GPIOParameters=GPIO_Label
+PF8.GPIO_Label=LCD_RW
+PF8.Locked=true
+PF8.Signal=GPIO_Output
+PF9.GPIOParameters=GPIO_Label
+PF9.GPIO_Label=LCD_E
+PF9.Locked=true
+PF9.Signal=GPIO_Output
 PG6.GPIOParameters=GPIO_Label
 PG6.GPIO_Label=USB_PowerSwitchOn [STMPS2151STR_EN]
 PG6.Locked=true
diff --git a/MDK-ARM/F413_FreeRTOS_LED_Matrix_Game.uvguix.Annika b/MDK-ARM/F413_FreeRTOS_LED_Matrix_Game.uvguix.Annika
index b137e5c9955c2a2141d1adbf3474d7da5dff0210..6b18d7f98ae575ec42e4b53d3cbba841e92f5d15 100644
--- a/MDK-ARM/F413_FreeRTOS_LED_Matrix_Game.uvguix.Annika
+++ b/MDK-ARM/F413_FreeRTOS_LED_Matrix_Game.uvguix.Annika
@@ -15,7 +15,7 @@
     <View>
       <WinId>38003</WinId>
       <ViewName>Registers</ViewName>
-      <TableColWidths>115 67</TableColWidths>
+      <TableColWidths>120 120</TableColWidths>
     </View>
     <View>
       <WinId>346</WinId>
@@ -93,8 +93,8 @@
       <flags>2</flags>
       <showCmd>3</showCmd>
       <MinPosition>
-        <xPos>-32000</xPos>
-        <yPos>-32000</yPos>
+        <xPos>-1</xPos>
+        <yPos>-1</yPos>
       </MinPosition>
       <MaxPosition>
         <xPos>-1</xPos>
@@ -111,7 +111,7 @@
       <RegID>0</RegID>
       <MDITabState>
         <Len>342</Len>
-        <Data>0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000200000000000000010000003D443A5C746D705C50726F6A656B74655C4C45444D617472697847616D655C4C45445F4D61747269785F47616D655C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF3D443A5C746D705C50726F6A656B74655C4C45444D617472697847616D655C4C45445F4D61747269785F47616D655C436F72655C496E635C6D61696E2E6800000000066D61696E2E6800000000FFDC7800FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000C40000006600000000060000B3020000</Data>
+        <Data>0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000200000000000000010000003D443A5C746D705C50726F6A656B74655C4C45444D617472697847616D655C4C45445F4D61747269785F47616D655C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF3D443A5C746D705C50726F6A656B74655C4C45444D617472697847616D655C4C45445F4D61747269785F47616D655C436F72655C496E635C6D61696E2E6800000000066D61696E2E6800000000FFDC7800FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000FE0000006600000000060000B2020000</Data>
       </MDITabState>
     </MDIClientArea>
     <ViewEx>
@@ -150,7 +150,7 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>0300000066000000BD00000083020000</Data>
+          <Data>0300000066000000F700000082020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
@@ -170,7 +170,7 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>0300000066000000BD00000083020000</Data>
+          <Data>0300000066000000F700000082020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
@@ -450,7 +450,7 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>0300000066000000BD00000083020000</Data>
+          <Data>0300000066000000F700000082020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
@@ -470,7 +470,7 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>0300000066000000BD00000083020000</Data>
+          <Data>0300000066000000F700000082020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
@@ -490,7 +490,7 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>00000000B4020000000600000E030000</Data>
+          <Data>00000000B3020000000600000E030000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
@@ -530,7 +530,7 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03000000B7020000FD050000F5020000</Data>
+          <Data>03000000B6020000FD050000F5020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
@@ -1150,7 +1150,7 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>0300000066000000BD00000083020000</Data>
+          <Data>0300000066000000F700000082020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
@@ -1170,7 +1170,7 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03000000B7020000FD050000F5020000</Data>
+          <Data>03000000B6020000FD050000F5020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
@@ -1190,7 +1190,7 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03000000B7020000FD050000F5020000</Data>
+          <Data>03000000B6020000FD050000F5020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
@@ -1250,7 +1250,7 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03000000B7020000FD050000F5020000</Data>
+          <Data>03000000B6020000FD050000F5020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
@@ -1270,7 +1270,7 @@
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03000000B7020000FD050000F5020000</Data>
+          <Data>03000000B6020000FD050000F5020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
@@ -1799,14 +1799,14 @@
       </Window>
       <DockMan>
         <Len>3312</Len>
-        <Data>000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFC4000000BD00000070040000C1000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000C40000006600000070040000D4000000C40000004F00000070040000BD0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFFAC0300004F000000B0030000A5010000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000B00300006600000070040000BC010000B00300004F00000070040000A501000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFC00000004F000000C40000009C020000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000C0000000B3020000000000004F000000C00000009C0200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000091010000700400009501000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB0900000180008000000000000000000000AC010000700400002E0200000000000095010000700400001702000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFF38020000950100003C0200001702000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF000000009C02000000060000A0020000010000000100001004000000010000000000000000000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF010000779400000180008000000100000000000000B7020000000600002503000000000000A0020000000600000E0300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000</Data>
+        <Data>000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFC4000000BD00000070040000C1000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000C40000006600000070040000D4000000C40000004F00000070040000BD0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFFAC0300004F000000B0030000A5010000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000B00300006600000070040000BC010000B00300004F00000070040000A501000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFFA0000004F000000FE0000009B0200000100000002000010040000000100000042FFFFFF37050000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000FA000000B2020000000000004F000000FA0000009B0200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000091010000700400009501000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB0900000180008000000000000000000000AC010000700400002E0200000000000095010000700400001702000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFF38020000950100003C0200001702000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF000000009B020000000600009F02000001000000010000100400000001000000B8FDFFFF6C000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF010000779400000180008000000100000000000000B60200000006000025030000000000009F020000000600000E0300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000</Data>
       </DockMan>
       <ToolBar>
         <RegID>59392</RegID>
         <Name>File</Name>
         <Buttons>
-          <Len>2591</Len>
-          <Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000000460000000000000000000000000000000001000000010000000180FE880000000000004500000000000000000000000000000000010000000100000001800B810000000000001300000000000000000000000000000000010000000100000001800C810000000000001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000065461736B303396000000000000000400065461736B30330856616C69646174650B6D7953656D48616E646C650373656D00000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000</Data>
+          <Len>2550</Len>
+          <Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000046D79536596000000000000000100046D79536500000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000</Data>
         </Buttons>
         <OriginalItems>
           <Len>1423</Len>
@@ -1865,18 +1865,18 @@
       <ActiveTab>0</ActiveTab>
       <Doc>
         <Name>../Core/Src/main.c</Name>
-        <ColumnNumber>11</ColumnNumber>
-        <TopLine>357</TopLine>
-        <CurrentLine>726</CurrentLine>
+        <ColumnNumber>1</ColumnNumber>
+        <TopLine>637</TopLine>
+        <CurrentLine>677</CurrentLine>
         <Folding>1</Folding>
-        <ContractedFolders>240,248,253,299,305,364,397,431,449,566,586</ContractedFolders>
+        <ContractedFolders>64,71,78,85,90</ContractedFolders>
         <PaneID>0</PaneID>
       </Doc>
       <Doc>
         <Name>../Core/Inc/main.h</Name>
-        <ColumnNumber>48</ColumnNumber>
-        <TopLine>111</TopLine>
-        <CurrentLine>133</CurrentLine>
+        <ColumnNumber>52</ColumnNumber>
+        <TopLine>123</TopLine>
+        <CurrentLine>140</CurrentLine>
         <Folding>1</Folding>
         <ContractedFolders></ContractedFolders>
         <PaneID>0</PaneID>
diff --git a/MDK-ARM/F413_FreeRTOS_LED_Matrix_Game.uvoptx b/MDK-ARM/F413_FreeRTOS_LED_Matrix_Game.uvoptx
index 5455992632e731e6bcbfd4f10bd6664875b41a1c..b3afcc6824590ad8b92ee06cc511c0ddf1fd53f2 100644
--- a/MDK-ARM/F413_FreeRTOS_LED_Matrix_Game.uvoptx
+++ b/MDK-ARM/F413_FreeRTOS_LED_Matrix_Game.uvoptx
@@ -152,7 +152,7 @@
         <Bp>
           <Number>0</Number>
           <Type>0</Type>
-          <LineNumber>561</LineNumber>
+          <LineNumber>45</LineNumber>
           <EnabledFlag>1</EnabledFlag>
           <Address>0</Address>
           <ByteObject>0</ByteObject>
@@ -168,7 +168,7 @@
         <Bp>
           <Number>1</Number>
           <Type>0</Type>
-          <LineNumber>547</LineNumber>
+          <LineNumber>561</LineNumber>
           <EnabledFlag>1</EnabledFlag>
           <Address>0</Address>
           <ByteObject>0</ByteObject>
@@ -184,7 +184,7 @@
         <Bp>
           <Number>2</Number>
           <Type>0</Type>
-          <LineNumber>560</LineNumber>
+          <LineNumber>547</LineNumber>
           <EnabledFlag>1</EnabledFlag>
           <Address>0</Address>
           <ByteObject>0</ByteObject>
@@ -200,7 +200,7 @@
         <Bp>
           <Number>3</Number>
           <Type>0</Type>
-          <LineNumber>556</LineNumber>
+          <LineNumber>560</LineNumber>
           <EnabledFlag>1</EnabledFlag>
           <Address>0</Address>
           <ByteObject>0</ByteObject>
@@ -216,6 +216,22 @@
         <Bp>
           <Number>4</Number>
           <Type>0</Type>
+          <LineNumber>556</LineNumber>
+          <EnabledFlag>1</EnabledFlag>
+          <Address>0</Address>
+          <ByteObject>0</ByteObject>
+          <HtxType>0</HtxType>
+          <ManyObjects>0</ManyObjects>
+          <SizeOfObject>0</SizeOfObject>
+          <BreakByAccess>0</BreakByAccess>
+          <BreakIfRCount>0</BreakIfRCount>
+          <Filename>../Core/Src/main.c</Filename>
+          <ExecCommand></ExecCommand>
+          <Expression></Expression>
+        </Bp>
+        <Bp>
+          <Number>5</Number>
+          <Type>0</Type>
           <LineNumber>277</LineNumber>
           <EnabledFlag>1</EnabledFlag>
           <Address>0</Address>
@@ -356,7 +372,7 @@
 
   <Group>
     <GroupName>Application/User/Core</GroupName>
-    <tvExp>1</tvExp>
+    <tvExp>0</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
@@ -436,7 +452,7 @@
 
   <Group>
     <GroupName>Drivers/STM32F4xx_HAL_Driver</GroupName>
-    <tvExp>1</tvExp>
+    <tvExp>0</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
@@ -672,7 +688,7 @@
 
   <Group>
     <GroupName>Drivers/CMSIS</GroupName>
-    <tvExp>1</tvExp>
+    <tvExp>0</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
diff --git a/MDK-ARM/F413_FreeRTOS_LED_Matrix_Game.uvprojx b/MDK-ARM/F413_FreeRTOS_LED_Matrix_Game.uvprojx
index f92f6d4ca07211edbda149be7e1cb4c821447524..244e387ad0fe3151a3ef2ff57ef8ca1a379a11ba 100644
--- a/MDK-ARM/F413_FreeRTOS_LED_Matrix_Game.uvprojx
+++ b/MDK-ARM/F413_FreeRTOS_LED_Matrix_Game.uvprojx
@@ -339,7 +339,7 @@
               <MiscControls></MiscControls>
               <Define>USE_HAL_DRIVER,STM32F413xx</Define>
               <Undefine></Undefine>
-              <IncludePath>../Core/Inc;                                                                  ../Drivers/STM32F4xx_HAL_Driver/Inc;                                                                  ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy;                                                                  ../Middlewares/Third_Party/FreeRTOS/Source/include;                                                                  ../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2;                                                                  ../Middlewares/Third_Party/FreeRTOS/Source/portable/RVDS/ARM_CM4F;                                                                  ../Drivers/CMSIS/Device/ST/STM32F4xx/Include;                                                                  ../Drivers/CMSIS/Include</IncludePath>
+              <IncludePath>../Core/Inc;                                                                      ../Drivers/STM32F4xx_HAL_Driver/Inc;                                                                      ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy;                                                                      ../Middlewares/Third_Party/FreeRTOS/Source/include;                                                                      ../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2;                                                                      ../Middlewares/Third_Party/FreeRTOS/Source/portable/RVDS/ARM_CM4F;                                                                      ../Drivers/CMSIS/Device/ST/STM32F4xx/Include;                                                                      ../Drivers/CMSIS/Include</IncludePath>
             </VariousControls>
           </Cads>
           <Aads>