コード例 #1
0
/**
  * @brief  Draw_Menu
  * @param  Menu pointer for draw
  * @retval None
  */
void Draw_Menu(Menu_Struct_TypeDef *Menu)
{
	uint8_t i;

	/* если для меню нужно установить ограничение по отрисовке */
	if(Menu->Clip == ENABLE)
	{
		/* устанавливаем ограничения для отрисовки */
		Set_New_ClipObject(Menu->Coord[0], Menu->Coord[1], Menu->Coord[2], Menu->Coord[3], IN_OBJECT, Menu->ClipObjIndx);
		LCD_ClearArea(Menu->Coord[0] + 2, Menu->Coord[1] + 2, Menu->Coord[2] - 2, Menu->Coord[3] - 2, Active_BackColor);
		Update_Oscillogram();	/* обновлем осциллограммы, для того что бы они "обрезались" по размерам отсечения */
	}

	/* If not (void*)0 */
	if(Menu->MenuCallBack != (void*)0) Menu->MenuCallBack(DRAW);

	/* отрисовываем кнопки */
	for(i = 0; i <= Menu->MaxButton; i++)
	{
		LCD_DrawButton(Menu->Buttons[i], NO_activeButton);
	}

	if(Menu == pMenu)	// если отрисовываемое меню активно тогда отрисовываем активной стартовую кнопку
	{
		setActiveButton(Menu->Buttons[Menu->Indx]);
		LCD_DrawButton(btn, activeButton);
	}
}
コード例 #2
0
/*******************************************************************************
* Function Name  : ReDraw_Menu
* Description    :
* Input          :
* Return         : None
*******************************************************************************/
void ReDraw_Menu(Menu_Struct_TypeDef *ReDrawMenu, btnINFO *ActiveButton)
{
	uint8_t i;
	uint8_t MaxButtons = (ReDrawMenu == &gInterfaceMenu)? ReDrawMenu->MaxButton - 1 : ReDrawMenu->MaxButton;

	/* отрисовываем кнопки */
	for(i = 0; i <= MaxButtons; i++) if(ReDrawMenu->Buttons[i] != ActiveButton) LCD_DrawButton(ReDrawMenu->Buttons[i], NO_activeButton);
	if(ActiveButton != (void*)0){ setActiveButton(ActiveButton); LCD_DrawButton(btn, activeButton); }
}
コード例 #3
0
/*******************************************************************************
* Function Name  : Change_Menu_Indx
* Description    : Функция смены индекса меню
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void Change_Menu_Indx(void)
{
	/* Если были нажаты кнопки вверх или вниз то изменяем положения указателя меню */
	if(ButtonsCode == pMenu->ChangeIndButton_UP)pMenu->Indx++;
	else if(ButtonsCode == pMenu->ChangeIndButton_DOWN)pMenu->Indx--;

	/* проверка и выход если нажата кнопка вниз на самом нижнем положении указателя */
	if(pMenu->Indx == 255) pMenu->Indx = pMenu->MaxButton;
	else if(pMenu->Indx > pMenu->MaxButton)
	{
		pMenu->Indx = pMenu->StartButton;

		if(pMenu->MaxIndexState != M_SKIP)
		{
			if(pMenu->MaxIndexState == M_CLEAR) Clear_Menu(pMenu);
			else if(pMenu->MaxIndexState == M_NTH)
			{
				LCD_DrawButton(btn, NO_activeButton);
			}

			SetActiveMenu(&gInterfaceMenu);
			setActiveButton(pMenu->Buttons[pMenu->Indx]);
			LCD_DrawButton(btn, activeButton);

			return;
		}
	}

	/* Index is changed */
	if(tmp_MenuIndex != pMenu->Indx)
	{
		if(ColorMn.State == DRAW) Clear_COLOR_Mn();

		if(btn == &btnTIME_SCALE) Draw_btnTIME_SCALE(NO_activeButton);
		else LCD_DrawButton(btn, NO_activeButton);			// перерисовываем текущую кнопку как неактивную
		setActiveButton(pMenu->Buttons[pMenu->Indx]);	// сделать активной кнопку по индексу
		tmp_MenuIndex = pMenu->Indx;					// сохраним текущий индекс
	}

	if(gOSC_MODE.BeepState != DISABLE) Beep_Start();

	if(btn->btnEvent_func != (void*)0) {
		btn->btnEvent_func();								// вызвать соответсвующую функцию обработчик
	}
	if(btn == &btnTIME_SCALE) Draw_btnTIME_SCALE(activeButton);
	else LCD_DrawButton(btn, activeButton);					// и перерисовать кнопку
}
コード例 #4
0
/*******************************************************************************
* Function Name  : Processing_Analog_CH
* Description    :
* Input          : None
* Return         : None
*******************************************************************************/
void Processing_Analog_CH(gChannel_MODE CH_Mode)
{
	uint8_t tmp = NO_activeButton;

	/* If channel is STOP(OFF) return */
	if(CH_Mode.EN == STOP) return;

	/* Set pointer pINFO to the appropriate channel ID, if it no sets before */
	if(pINFO->Mode.ID != CH_Mode.ID) Set_CH_TypeINFO(CH_Mode.ID);

	NVIC_DisableIRQ(ADC1_2_IRQn);

	/* If global state is RUN */
	if(gOSC_MODE.State == RUN)
	{

		if( !(INFO_A.Mode.EN == RUN && pINFO == &INFO_B) )
		{
			if(EPM570_SRAM_Write() != COMPLETE) return;
			EPM570_SRAM_Read();
		}

		/* Проверяем "зашкал" и переключаем делитель при необходимости */
		if(Analog_AutodividerMain() == ENABLE)
		{
			Clear_OLD_DataCH_ON_SCREEN(pINFO->Mode.ID, leftLimit, rightLimit - 2);
			gInterfaceMenu.Buttons[pINFO->Mode.ID + 1]->Text = Change_AnalogDivider(pINFO->Mode.ID, pINFO->AD_Type.Analog.Div);

			if((pMenu == &gInterfaceMenu) && (pMenu->Indx == pINFO->Mode.ID + 1)) tmp = activeButton;
			LCD_DrawButton(gInterfaceMenu.Buttons[pINFO->Mode.ID + 1], tmp);
		}
	}

	if(HostMode == DISABLE)
	{
		/* Если коэффициент цифровой лупы больше 1, то репроцессинг данных */
		if((*SweepScale) > 1) Data_Reprocessing();

		/* вызов отрисовки соответсвующей интерполяции */
		ActiveMode->InterpolationMODEfunc(0, rightLimit - leftLimit, (int16_t)pINFO->Position);

		/* автоизмерения */
		if(gOSC_MODE.autoMeasurments == ON) mModeActive->MeasurmentsFunc();
		else if(gShowFFTFreq == TRUE) Calc_Show_Freq();
	}

	NVIC_EnableIRQ(ADC1_2_IRQn);
}
コード例 #5
0
ファイル: app.c プロジェクト: yuiopt/uCOSII-Demo
void Input_Task(void *parg)
{
	u8 err;
	u8 OK=0;
	u8 buffer[4]={0};
	u8 LEN=0;
	u8 flag=0;
	u16 e=0;
	OS_CPU_SR cpu_sr;
	(void)parg;
	for(;;)
	{
		OSSemPend(PENIRQ,0,&err);
		Exti_Set(0);
		OS_ENTER_CRITICAL();
		touch.FLAG=Read_XY_2(&touch.AD_X,&touch.AD_Y);
		OS_EXIT_CRITICAL();
		if(touch.FLAG)
		{
			Led_On(1);
			touch.FLAG=0;
			touch.LCD_X=CalcXY(touch.AD_X,0);
			touch.LCD_Y=CalcXY(touch.AD_Y,1);
			touch.KEY=Get_Key(touch.PID,touch.LCD_X,touch.LCD_Y);
			if(touch.KEY<=10)
			{
				OS_ENTER_CRITICAL();
				Set_Color(WHITE,BLACK);
				if(touch.KEY==10)
					Show_Char('.',cursor.x,cursor.y);
				else
				{
					Show_Dec(touch.KEY,1,cursor.x,cursor.y);
					if(LEN<4)
					{
						buffer[LEN]=touch.KEY;
						LEN++;
					}
				}
				if(cursor.x<224)
				{
					cursor.x+=8;
					if(cursor.x>=224)
						cursor.x=224;
				}
				OS_EXIT_CRITICAL();
			}
		
			else if(touch.KEY==11)
			{
				OK++;
				if(OK==1)
				{
					VALUE1=CalcDec(buffer,LEN);
					Set_Color(BLACK,GREEN);
					Show_String(">>VALUE1:",2,22);
					Show_Dec(VALUE1,LEN,82,22);
					OS_ENTER_CRITICAL();
					LCD_Clear(4,121,232,38,WHITE);
					cursor.x=8;
					cursor.y=132;
					OS_EXIT_CRITICAL();
					buffer[0]=0;
					buffer[1]=0;
					buffer[2]=0;
					buffer[3]=0;
					LEN=0;
				}
				else if(OK==2)
				{
					VALUE2=CalcDec(buffer,LEN);
					Set_Color(BLACK,GREEN);
					Show_String(">>VALUE2:",2,38);
					Show_Dec(VALUE2,LEN,82,38);
					OS_ENTER_CRITICAL();
					LCD_Clear(4,121,232,38,WHITE);
					cursor.x=8;
					cursor.y=132;
					OS_EXIT_CRITICAL();
					buffer[0]=0;
					buffer[1]=0;
					buffer[2]=0;
					buffer[3]=0;
					LEN=0;
				}
				else if(OK==3)
				{
					VALUE3=CalcDec(buffer,LEN);
					Set_Color(BLACK,GREEN);
					Show_String(">>VALUE3:",2,54);
					Show_Dec(VALUE3,LEN,82,54);
					OS_ENTER_CRITICAL();
					LCD_Clear(4,121,232,38,WHITE);
					cursor.x=8;
					cursor.y=132;
					OS_EXIT_CRITICAL();
					buffer[0]=0;
					buffer[1]=0;
					buffer[2]=0;
					buffer[3]=0;
					LEN=0;
				}
			
				else if(OK==4)
				{
					if(VALUE2>0&&VALUE2<=5000)
					{
						if(VALUE1<VALUE2&&VALUE1>0)
						{
							if(VALUE3>0&&VALUE3<10000)
							{
								e=0;
								Set_Color(BLACK,GREEN);
								Show_String(">>OK!",2,70);
							}
							else
							{
								e=1;
							}
						}
						else
						{
							e=1;
						}
					}
					else
					{
						e=1;
					}

					if(e)	
					{
						Set_Color(BLACK,GREEN);
						Show_String(">>ERROR!",2,70);
					}
				}
				else if(OK==5)
				{
					if(!e)
					{
						OK=0;
						OSTaskSuspend(CURSOR_TASK_PRIO);
						Show_Main(VALUE1,VALUE2,VALUE3,1);
					}
					else
					{
						OK=0;
						e=0;
						LCD_Clear(2,20,236,100,BLACK);
						LCD_DrawEdit(input);
						Set_Cursor(8,132);
					}
					VALUE1=0;
					VALUE2=0;
					VALUE3=0;
				}
				else;
			}
		
			else if(touch.KEY==12)
			{
				OS_ENTER_CRITICAL();
			
				if(LEN>0)
				{
					LEN--;
				}
						
				if(cursor.x>=8) 
				{	
					LCD_Clear(cursor.x,cursor.y,8,16,WHITE);
					cursor.x-=8;
					if(cursor.x<8)
					{
						cursor.x=8;
					}
				}	
				OS_EXIT_CRITICAL();
			}
		
			else if(touch.KEY==13)
			{
				if(flag==0)
				{
					flag=1;
					button1.str="stop";
					button1.len=4;
					button1.line_color=GREEN;
					LCD_DrawButton(button1);
					OSTaskResume(TIMER_TASK_PRIO);
				}
				else
				{
					flag=0;
					button1.str="start";
					button1.len=5;
					button1.line_color=BLACK;
					LCD_DrawButton(button1);
					OSTaskSuspend(TIMER_TASK_PRIO);
				}
			}
		
			else if(touch.KEY==14)
			{
				OSTaskSuspend(TIMER_TASK_PRIO);
				Show_KeyMap();
				OSTaskResume(CURSOR_TASK_PRIO);
			}
			
			else if(touch.KEY==99)//無效輸入
			{}
			else;
			OSTimeDlyHMSM(0,0,0,50);
			Led_Off(1);
		}
		Exti_Set(1);
	}
}