亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mfcf31f.tmp

?? STM32,5110液晶顯示超聲波測距探魚器200KHz,帶電路圖,精確到厘米
?? TMP
?? 第 1 頁 / 共 2 頁
字號:
					((struct_HMI_Draw_Para_Pic *)HMI_Draw_Para)->width);
		}

	}
	else
	{	// In this way, every row need to manipulate
		memcpy(tempRow, NULL, HMI_WIDTH_PIX);
		// First Row
		temp_i = tempStartRowIndex;
		for (temp_n = ((struct_HMI_Draw_Para_Pic *)HMI_Draw_Para)->startX; 
					temp_n < ((struct_HMI_Draw_Para_Pic *)HMI_Draw_Para)->startX + ((struct_HMI_Draw_Para_Pic *)HMI_Draw_Para)->width;
					temp_n++)
		{
			tempRow[temp_n] = GRAM_ByteOr(&(sta_LCD_Graphic_BUF[temp_i][temp_n]), 0, 
																		(const_HMI_Pic_Entr[((struct_HMI_Draw_Para_Pic *)HMI_Draw_Para)->picID])[temp_i][temp_n], tempRowRemain_Start);	
		}
		// Middle rows, if it has
		if (tempRowNUM != 0)
		{
			for (temp_i = tempStartRowIndex + 1; temp_i <= tempLastRowIndex; temp_i++)
			{
				for (temp_n = ((struct_HMI_Draw_Para_Pic *)HMI_Draw_Para)->startX; 
							temp_n < ((struct_HMI_Draw_Para_Pic *)HMI_Draw_Para)->startX + ((struct_HMI_Draw_Para_Pic *)HMI_Draw_Para)->width;
							temp_n++)
				{
					tempRow[temp_n] = GRAM_ByteOr(&(sta_LCD_Graphic_BUF[temp_i][temp_n]), tempRow[temp_n], 
																				(const_HMI_Pic_Entr[((struct_HMI_Draw_Para_Pic *)HMI_Draw_Para)->picID])[temp_i][temp_n], tempRowRemain_Start);	
				}		
			}
		}
		// Last Row, if it has
		if (tempRowRemain_End != 0)
		{
			for (temp_n = ((struct_HMI_Draw_Para_Pic *)HMI_Draw_Para)->startX; 
						temp_n < ((struct_HMI_Draw_Para_Pic *)HMI_Draw_Para)->startX + ((struct_HMI_Draw_Para_Pic *)HMI_Draw_Para)->width;
						temp_n++)
			{
				tempRow[temp_n] = GRAM_ByteOr(&(sta_LCD_Graphic_BUF[temp_i][temp_n]), tempRow[temp_n], 
																			(const_HMI_Pic_Entr[((struct_HMI_Draw_Para_Pic *)HMI_Draw_Para)->picID])[temp_i][temp_n], tempRowRemain_Start);	
			}
		}
	}
	
	HMI_Data_TX(sta_LCD_Graphic_BUF[0], MAX_DISPLAY_BUF);
	return FINISHED;
}

WorkingStatus HMI_Draw_Pic(void *HMI_Draw_Para)
{
	if (FINISHED == HMI_Draw_Pic_CMD(HMI_Draw_Para))
	{
		if (FINISHED == HMI_Draw_Pic_Data(HMI_Draw_Para))
		{
			return FINISHED;
		}
	}
	return FINISHED;
}

ErrorStatus HMI_Display_Blank(void)
{
	struct_HMI_Queue *foundQueueSlot;
		// Fill in the HMI to do list queue with configuration task 
	foundQueueSlot = HMI_Find_Queue_Slot(HMI_TASK_TYPE_BUS);
//	sta_QueueIndex = foundQueueSlot - gHMI_Queue;	// sta_QueueIndex should start at gHMI_Queue (0), but ...
	foundQueueSlot->HMI_Func_Para = malloc(sizeof(struct_HMI_CMD_Para));
	if (NULL != foundQueueSlot->HMI_Func_Para)
	{
		foundQueueSlot->HMI_Function_Index = ENUM_HMI_CMD_STREAM;
		((struct_HMI_CMD_Para *)(foundQueueSlot->HMI_Func_Para))->DataList = (uint8_t *)const_HMI_Display_Blank;
		((struct_HMI_CMD_Para *)(foundQueueSlot->HMI_Func_Para))->DataLen = sizeof(const_HMI_Display_Blank);	//HMI_STARTUP_CONFIG_LEN;
	}
	else
	{
		FLAG_HEAP_FULL = SET;
		return ERROR;
	}
	return SUCCESS;
}

ErrorStatus HMI_StartUp_Logo(void)
{
	struct_HMI_Queue *foundQueueSlot;
	// And finally a logo task
	foundQueueSlot = HMI_Find_Queue_Slot(HMI_TASK_TYPE_BUS);
	foundQueueSlot->HMI_Func_Para = malloc(sizeof(struct_HMI_Draw_Para_Pic));
	if (NULL != foundQueueSlot->HMI_Func_Para)
	{
		foundQueueSlot->HMI_Function_Index = ENUM_HMI_DRAW_PIC_DATA;
		((struct_HMI_Draw_Para_Pic *)(foundQueueSlot->HMI_Func_Para))->picID = HMI_STARTUP_LOGO_ID;
		((struct_HMI_Draw_Para_Pic *)(foundQueueSlot->HMI_Func_Para))->startX = 0;
		((struct_HMI_Draw_Para_Pic *)(foundQueueSlot->HMI_Func_Para))->startY = 0;
		((struct_HMI_Draw_Para_Pic *)(foundQueueSlot->HMI_Func_Para))->width = HMI_WIDTH_PIX;
		((struct_HMI_Draw_Para_Pic *)(foundQueueSlot->HMI_Func_Para))->height = HMI_HEIGHT_PIX;
	}
	else
	{
		FLAG_HEAP_FULL = SET;
		return ERROR;
	}
	return SUCCESS;
}

ErrorStatus HMI_StartUp_BL_Test(void)
{
	struct_HMI_Queue *foundQueueSlot;
	// Add back light blink test task
	foundQueueSlot = HMI_Find_Queue_Slot(HMI_TASK_TYPE_NO_BUS);
	foundQueueSlot->HMI_Func_Para = malloc(sizeof(struct_HMI_BL_Test));
	if (NULL != foundQueueSlot->HMI_Func_Para)
	{
		foundQueueSlot->HMI_Function_Index = ENUM_BL_TEST;
		((struct_HMI_BL_Test *)(foundQueueSlot->HMI_Func_Para))->Interval = MAX_BL_TEST_BLINK_INTER;
		HMI_BL_Test_Stage = 0;
	}
	else
	{
		FLAG_HEAP_FULL = SET;
		return ERROR;
	}
	return SUCCESS;
}


WorkingStatus HMI_BL_Test(void *HMI_Draw_Para)
{
	static uint32_t sta_LastTime;
	
	if (0 == HMI_BL_Test_Stage)
	{
		sta_LastTime = gSystem_1ms_CNT;
		GPIO_ResetBits(LCD_BACKLIGHT_PORT, LCD_BACKLIGHT_PIN);
		HMI_BL_Test_Stage++;
	}
	else
	{
		if (((uint32_t)(gSystem_1ms_CNT - sta_LastTime)) > MAX_BL_TEST_BLINK_INTER)
		{
			sta_LastTime = gSystem_1ms_CNT;
			if (LSB_MASK & HMI_BL_Test_Stage)
			{
				GPIO_SetBits(LCD_BACKLIGHT_PORT, LCD_BACKLIGHT_PIN);
			}
			else
			{
				GPIO_ResetBits(LCD_BACKLIGHT_PORT, LCD_BACKLIGHT_PIN);
			}
			HMI_BL_Test_Stage++;
		}
	}
	
	if (HMI_BL_Test_Stage > MAX_BL_TEST_BLINK_NUM)
	{
		GPIO_ResetBits(LCD_BACKLIGHT_PORT, LCD_BACKLIGHT_PIN);
		return FINISHED;
	}
	else
	{
		return WORKING;
	}
}

// The one end with ex will NOT clear GRAM in STM32
// One task
void ClearScreen(uint8_t style)
{
	memcpy(sta_LCD_Graphic_BUF[0], NULL, MAX_DISPLAY_BUF);
	HMI_Display_Blank();
}

void HMI_Initial(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	uint8_t temp_QueueIndex;
	// Pull up RST Pin
	GPIO_SetBits(LCD_RST_PORT, LCD_RST_PIN);	
	// Empty the HMI to do list queue
	sta_QueueIndex = 0;
	sta_QueueIndex_NoBus = 0;
	Flag_HMI_General_G01 = 0;
	FLAG_HMI_QUEUE_FULL = RESET;
	for (temp_QueueIndex = 0; temp_QueueIndex < HMI_QUEUE_LEN; temp_QueueIndex++)
	{
		HMI_Queue_Slot_Free(gHMI_Queue + temp_QueueIndex);
	}
	
	for (temp_QueueIndex = 0; temp_QueueIndex < HMI_NO_BUS_QUEUE_LEN; temp_QueueIndex++)
	{
		HMI_Queue_Slot_Free(gHMI_Queue_NoBus + temp_QueueIndex);
	}

	HMI_StartUp_Config();
	HMI_StartUp_Logo();
	HMI_StartUp_BL_Test();
	
	// Return control to SPI
	GPIO_InitStructure.GPIO_Pin = LCD_MASTER_NSS_PIN;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_Init(LCD_MASTER_PORT, &GPIO_InitStructure);
	
		// Enter normal routine of executing the queue
	sta_HMI_StateMachine = HMI_STATE_EXE_QUEUE;

}

void HMI_Bus_Task_Executer(void)
{
	if (NULL != (*(gHMI_Queue + sta_QueueIndex)).HMI_Function_Index)
	{	// There is some task waiting for execution				
		// Execute them
		if (FINISHED == (*HMI_Function_Array[(*(gHMI_Queue + sta_QueueIndex)).HMI_Function_Index])((*(gHMI_Queue + sta_QueueIndex)).HMI_Func_Para))
		{
			// Release the data buffer pointed by Queue Pointer
			HMI_Queue_Slot_Free(gHMI_Queue + sta_QueueIndex);
	
			if (sta_QueueIndex < HMI_QUEUE_LEN)
			{
				sta_QueueIndex++;
			}
			else
			{
				sta_QueueIndex = 0;
			}
		}// Otherwise this function still need to be execute (eg. Not all data have been transfered)
	}
}

void HMI_NoBus_Task_Executer(void)
{
	if (NULL != (*(gHMI_Queue_NoBus + sta_QueueIndex_NoBus)).HMI_Function_Index)
	{	// There is some task waiting for execution				
		// Execute them
		if (FINISHED == (*HMI_Function_Array[(*(gHMI_Queue_NoBus + sta_QueueIndex_NoBus)).HMI_Function_Index])((*(gHMI_Queue_NoBus + sta_QueueIndex_NoBus)).HMI_Func_Para))
		{
			// Release the data buffer pointed by Queue Pointer
			HMI_Queue_Slot_Free(gHMI_Queue_NoBus + sta_QueueIndex_NoBus);
	
			if (sta_QueueIndex_NoBus < HMI_NO_BUS_QUEUE_LEN)
			{
				sta_QueueIndex_NoBus++;
			}
			else
			{
				sta_QueueIndex_NoBus = 0;
			}
		}// Otherwise this function still need to be execute (eg. Not all data have been transfered)
	}
}

void HMI_Error_Task_Handler(void)
{

}

void HMI_Manager()
{
	static uint32_t StartResetTime;
//	static uint8_t sta_HMI_Config_Stage = 0;
	static char *sta_SecretBuf4Error_Heap = "HEAP FULL";
	
	switch (sta_HMI_StateMachine)
	{
		case HMI_STATE_IDLE:
			if (SET == FLAG_HMI_START_RESET)
			{
				StartResetTime = gSystem_1ms_CNT;
				sta_HMI_StateMachine = HMI_STATE_RESETING;
			}
		break;

		case HMI_STATE_RESETING:
			if ((uint32_t)(gSystem_1ms_CNT - StartResetTime) > HMI_RESET_TIME)
			{
				//sta_HMI_Config_Stage = 0;
				sta_HMI_StateMachine = HMI_STATE_INITIAL;
			}

		break;

		case HMI_STATE_INITIAL:
			HMI_Initial();
		break;

	  case HMI_STATE_EXE_QUEUE:
			// Do NOT need DMA SPI to complete TX
			HMI_NoBus_Task_Executer();

			if ((SET == SPI_I2S_GetFlagStatus(LCD_MASTER_SPI, SPI_I2S_FLAG_TXE)) && 
			(RESET == SPI_I2S_GetFlagStatus(LCD_MASTER_SPI, SPI_I2S_FLAG_BSY)))
			{	// DMA and SPI is free
				if (0 != Flag_Global_Error)
				{	// There is some error
					if (FLAG_HMI_QUEUE_STATUS != FLAG_HMI_QUEUE_FULL )
					{	// Error hasn't been handled
						FLAG_HMI_QUEUE_STATUS = FLAG_HMI_QUEUE_FULL;
						if (SET == FLAG_HMI_QUEUE_FULL)
						{
							// Heap full, normally this means program problem
							HMI_Error_Task_Handler();

						}
						else
						{
							// Thanks god heap come back again

						}
					}
					else
					{	// Error has been handled, although it still there, but your have job to do
						HMI_Bus_Task_Executer();
					}
				}
				else
				{	// No error found
					HMI_Bus_Task_Executer();
				}
			}
		break;

		default :
		break;
	}

}


//void UARTSIM900_DMA_Init(void)
//{
//	DMA_InitTypeDef DMA_InitStructure;
//
//	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
//
//	/* USART3_TX_DMA_Channel (triggered by USART3 TX event) Config */
//	DMA_DeInit(DMA1_Channel2);
//	DMA_InitStructure.DMA_PeripheralBaseAddr = SIMUART_DR;
//	DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)0x20012000;   // 96KB RAM => 0x20018000 top address
//	DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
//	DMA_InitStructure.DMA_BufferSize = 0x10;
//	DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
//	DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
//	DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
//	DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
//	DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
//	DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;
//	DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
//	DMA_Init(DMA1_Channel2, &DMA_InitStructure);
//
//	DMA_ITConfig(DMA1_Channel2, DMA_IT_TC, ENABLE);
//}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区鲁丝不卡| 久久网站最新地址| 成人综合在线观看| 奇米色一区二区三区四区| 亚洲欧美一区二区三区久本道91| 91精品国产欧美日韩| 欧美日韩一区二区三区四区 | 亚洲国产综合视频在线观看| 国产欧美一区二区精品性色超碰| 日韩女优制服丝袜电影| 欧美精品免费视频| 欧美亚洲一区三区| 国v精品久久久网| 国产一区不卡在线| 国产福利一区二区三区视频| 久久国产精品色| 黄色成人免费在线| 日韩av成人高清| 久久国产剧场电影| 久久99精品国产麻豆婷婷洗澡| 国产精品亚洲一区二区三区在线| 成人黄色片在线观看| 色综合久久综合中文综合网| 欧美猛男男办公室激情| 精品奇米国产一区二区三区| 自拍偷拍国产精品| 婷婷综合在线观看| 狠狠色2019综合网| 色88888久久久久久影院野外| 制服.丝袜.亚洲.另类.中文| 国产午夜精品久久久久久久| 亚洲日本va在线观看| 日精品一区二区三区| 成人自拍视频在线| 欧美军同video69gay| 国产欧美一区二区三区网站| 亚洲电影中文字幕在线观看| 国产激情91久久精品导航| 欧美日韩一区在线| 国产精品午夜在线| 日韩不卡一区二区| 色综合久久99| 亚洲国产精品v| 免费国产亚洲视频| 欧美中文一区二区三区| wwwwww.欧美系列| 天堂久久一区二区三区| 99久久精品国产导航| 亚洲精品在线观看视频| 亚洲成人1区2区| 99久久久免费精品国产一区二区| 欧美老肥妇做.爰bbww视频| 亚洲欧美怡红院| 国产精品一区久久久久| 日韩欧美中文字幕一区| 亚洲一区二区三区四区中文字幕| 国产成人av一区二区三区在线观看| 欧美另类z0zxhd电影| 亚洲午夜一二三区视频| 91丨porny丨户外露出| 国产午夜精品一区二区三区嫩草 | 日韩精品一区第一页| av在线一区二区| 国产精品美女久久久久久| 国产精品88888| 久久综合色之久久综合| 韩国一区二区视频| 91精品国产aⅴ一区二区| 五月婷婷久久丁香| 欧美日韩一区二区三区四区 | 欧美一区二区三区公司| 亚洲国产综合在线| 欧美日本韩国一区| 肉丝袜脚交视频一区二区| 欧美日韩五月天| 无吗不卡中文字幕| 日韩一区和二区| 久久99久久久久| 日韩你懂的电影在线观看| 日韩成人伦理电影在线观看| 日韩一区二区免费视频| 久久精品国产精品青草| 欧美精品一区二区三区在线| 韩国女主播一区二区三区| 久久老女人爱爱| 成人免费毛片高清视频| 亚洲欧美另类在线| 欧美区一区二区三区| 久久成人久久爱| 日本一区二区免费在线观看视频 | 欧美一区二区三区免费视频| 美女网站一区二区| 久久久综合精品| 91一区二区在线观看| 亚洲aaa精品| 精品剧情v国产在线观看在线| 国产综合成人久久大片91| 国产欧美中文在线| 欧美艳星brazzers| 激情综合网天天干| 成人免费小视频| 欧美人妖巨大在线| 国产91丝袜在线播放0| 亚洲男女毛片无遮挡| 欧美二区在线观看| 成人爽a毛片一区二区免费| 亚洲免费观看在线观看| 91精品国产麻豆国产自产在线 | 91在线视频在线| 偷窥少妇高潮呻吟av久久免费| 亚洲精品一区二区三区在线观看 | 麻豆国产精品视频| 国产精品免费视频一区| 欧美女孩性生活视频| 国产毛片一区二区| 性欧美大战久久久久久久久| 国产午夜精品一区二区| 7777精品伊人久久久大香线蕉的| 成人午夜又粗又硬又大| 欧美a一区二区| 亚洲免费高清视频在线| 精品国产一区二区三区久久久蜜月 | 欧美精品日韩一区| jiyouzz国产精品久久| 另类小说视频一区二区| 亚洲精品视频在线看| 国产人成亚洲第一网站在线播放| 欧美日韩亚洲不卡| 91麻豆免费看| 国产99久久久精品| 久久99国产精品久久99| 亚洲一区精品在线| ●精品国产综合乱码久久久久| 欧美本精品男人aⅴ天堂| 欧美色图一区二区三区| 99re66热这里只有精品3直播| 久久精品国产一区二区| 午夜电影网一区| 亚洲电影激情视频网站| 亚洲免费在线视频| 国产精品的网站| 久久午夜免费电影| 欧美xxxxx牲另类人与| 欧美日韩电影在线| 欧美日韩亚洲高清一区二区| 欧洲一区二区三区免费视频| 成人黄色在线看| 高清日韩电视剧大全免费| 国产一区二区福利| 另类的小说在线视频另类成人小视频在线 | 最新久久zyz资源站| 国产午夜精品久久| 国产精品久久久久四虎| 国产精品三级av在线播放| 欧美国产国产综合| 国产精品色在线观看| 中文字幕一区二区在线播放| 国产欧美日韩在线视频| 国产目拍亚洲精品99久久精品| 久久久.com| 国产精品毛片久久久久久久| 中文字幕乱码一区二区免费| 国产精品美女久久久久久2018| 中文av一区二区| 亚洲最新视频在线播放| 亚洲成年人影院| 久久成人av少妇免费| 国产ts人妖一区二区| 成人动漫在线一区| 欧美日免费三级在线| 欧美精品成人一区二区三区四区| 91精品国产一区二区人妖| 久久综合久久久久88| 亚洲国产精品99久久久久久久久| 亚洲少妇30p| 日本免费新一区视频| 久久成人精品无人区| 成人动漫精品一区二区| 在线欧美一区二区| 精品区一区二区| 亚洲欧美日韩一区二区 | 久久无码av三级| 国产精品初高中害羞小美女文| 亚洲卡通动漫在线| 青青草原综合久久大伊人精品| 国产真实精品久久二三区| 91看片淫黄大片一级在线观看| 欧美午夜精品理论片a级按摩| 91精品国产aⅴ一区二区| 国产欧美日韩在线| 午夜不卡av在线| 成人久久久精品乱码一区二区三区 | 国产农村妇女毛片精品久久麻豆| 亚洲精品水蜜桃| 国产一区二区三区四区五区入口| 在线观看国产日韩| 国产欧美久久久精品影院| 一区二区三区四区亚洲| 国模套图日韩精品一区二区 | 久久99日本精品|