📄 sample.c
字号:
}
else
{
MENU_Result.Word = 0;
}
}
else
{
MENU_Result.Word = 0;
}
return ControlWidth;
}
/*******************************************************************************
** 函数名称: GUI_SetControlValue **
** 功能描述: 将全局变量MENU_Result里的值保存到菜单项所对应的控制项内存里 **
** 输入参数: BYTE MENU_ID : 对应的菜单项ID **
** 输出参数: 无 **
*******************************************************************************/
void GUI_SetControlValue(BYTE MENU_ID)
{
flash BYTE *SubMenuDefine;
BYTE Type;
BYTE ControlValue;
BYTE ControlWidth;
SubMenuDefine = SUBMENUDEFINE(MENU_ID);
Type = SubMenuDefine[SubMenuDefine_Type] & 0x0F;
if (Type == MENU_INPUT)
{
ControlValue = SubMenuDefine[SubMenuDefine_InputControl];
ControlWidth = SubMenuDefine[SubMenuDefine_InputWidth];
}
else if (Type == MENU_RADIOMENU)
{
ControlValue = SubMenuDefine[SubMenuDefine_RadioControl];
ControlWidth = 1;
}
else
{
ControlValue = 0;
ControlWidth = 2;
}
if (ControlValue == 0 )
{
SetManualValue(MENU_ID, (WORD*)(&MENU_Result));
}
else if (ControlValue < CONTROL_COUNT)
{
if (ControlWidth == 1)
{
MENU_Control[ControlValue] = MENU_Result.Byte;
}
else if (ControlWidth == 2)
{
*(WORD *)(&MENU_Control[ControlValue]) = MENU_Result.Word;
}
}
}
void GUI_SaveControlStatus(BYTE Flag1, BYTE Flag2)
{
if ((MENU_Control[0] & 0xF0) == Flag1)
{
MENU_Control[0]++;
if ((MENU_Control[0] & 0x0F) == 0x03)
{
MENU_Control[0] = Flag2;
}
}
else
{
MENU_Control[0] = 0x00;
}
}
/*******************************************************************************
** 函数名称: GUI_WriteCaption **
** 功能描述: 显示菜单项的标题文字 **
** 输入参数: BYTE MenuItemID : 菜单名称ID **
** BYTE WriteSpace : 是否要填充后面的空白 **
** 输出参数: BYTE : Caption的长度 **
*******************************************************************************/
BYTE GUI_WriteCaption(BYTE MenuItemID,BYTE Format)
{
flash BYTE *Caption;
flash BYTE *SubMenuDefine;
BYTE Result=0;
BYTE i = 0;
SubMenuDefine = SUBMENUDEFINE(MenuItemID);
i = SubMenuDefine[SubMenuDefine_Type] >> 4;
Caption = SubMenuDefine + i;
i = Caption[0];
if (i==0)
{
MenuItemID = Caption[1];
Caption = SUBMENUDEFINE(MenuItemID);
i = Caption[0] >> 4;
Caption+=i;
i = Caption[0];
}
Result = i;
Caption++;
if ((SubMenuDefine[SubMenuDefine_Type] & 0x0F) == MENU_INPUT)
{
Format |= SubMenuDefine[SubMenuDefine_InputShowValue] & FORMAT_SHOW_VALUE;
}
else
{
Format &= ~FORMAT_SHOW_VALUE;
}
LCD_HideCursor();
if (Format & FORMAT_SHOW_VALUE)
{
BYTE Buffer[5];
BYTE Len=0;
GUI_GetControlValue(MenuItemID);
Len=IntToStr(Buffer,MENU_Result.Word);
while (i--)
{
if ((Caption[0]=='=') && (Caption[1]=='#') && (Len>0))
{
BYTE j;
for (j=0; j<Len; j++)
{
LCD_PutChar(Buffer[j]);
}
Result+=Len;
Result-=2;
Caption+=2;
if (i) {i--;}
if (i==0) {break;}
}
else
{
LCD_PutChar(*Caption++);
}
}
}
else if ((MenuItemID == 0)&&(Format == ~FORMAT_SHOW_VALUE))
{
while (i--)
{
LCD_PutChar(~(*Caption++));
}
}
else
{
while (i--)
{
LCD_PutChar(*Caption++);
}
}
if ((Format & FORMAT_SHOW_SPACE) && (Result < CAPTION_LENGTH))
{
while (Result < CAPTION_LENGTH)
{
LCD_PutChar(0x20);
Result++;
}
}
return Result;
}
/*******************************************************************************
** 函数名称: GUI_MenuNo **
** 功能描述: 把菜单序号转换成字符 **
** 输入参数: BYTE No:序号 **
** 输出参数: 无 **
*******************************************************************************/
BYTE GUI_MenuNo(BYTE No)
{
if ((No >= 0) && (No <= 9))
{
return No + '0';
}
else if ((No >= 10) && (No <= 36))
{
return No - 10 + 'A';
}
else
{
return '?';
}
}
/*******************************************************************************
** 函数名称: GUI_ChooseRadioMenu **
** 功能描述: 选择单选菜单,单选菜单有对应的控制值 **
** 输入参数: 无 **
** 输出参数: 无 **
*******************************************************************************/
void GUI_ChooseRadioMenu(void)
{
if (MENU_Status & STATUS_UPDATETITLE)
{
flash BYTE *SubMenuDefine;
BYTE i;
SubMenuDefine = SUBMENUDEFINE(MENU_Selected);
GUI_Push_Stack();
#if (LCD_SUPPORT_ICON == FALSE)
LCD_WriteCGRAM(ICONROM_RADIO_UP, ICON_RADIO_UP, 0);
LCD_WriteCGRAM(ICONROM_RADIO_UPDOWN, ICON_RADIO_UPDOWN, 0);
LCD_WriteCGRAM(ICONROM_RADIO_DOWN, ICON_RADIO_DOWN, 0);
#endif
LCD_Position(1,1);
GUI_WriteCaption(MENU_Selected, FORMAT_SHOW_SPACE);
for (i=3; i<=LCD_ROW_COUNT; i++)
{
LCD_ClearLine(i);
}
MenuGui.ItemCount = SubMenuDefine[SubMenuDefine_Count];
MenuGui.TopItemID = SubMenuDefine[SubMenuDefine_FirstItemAddr];
GUI_GetControlValue(MENU_Selected);
MenuGui.ItemIndex = MENU_Result.Byte;
if (MenuGui.ItemIndex > 0)
{
MenuGui.ItemIndex --;
}
if (MenuGui.ItemIndex > MenuGui.ItemCount - 1)
{
MenuGui.ItemIndex = MenuGui.ItemCount - 1;
}
SET_STATUS(STATUS_UPDATEVALUE);
CLR_STATUS(STATUS_UPDATETITLE);
}
if ((Key != NO_KEY)||(MENU_Status & STATUS_UPDATEVALUE))
{
CLR_STATUS(STATUS_UPDATEVALUE);
LCD_Position(2,1);
if (MenuGui.ItemIndex == 0)
{
LCD_PutChar(ICON_RADIO_DOWN);
}
else if (MenuGui.ItemIndex == MenuGui.ItemCount - 1)
{
LCD_PutChar(ICON_RADIO_UP);
}
else
{
LCD_PutChar(ICON_RADIO_UPDOWN);
}
LCD_PutChar('=');
GUI_WriteCaption(MenuGui.TopItemID + MenuGui.ItemIndex, FORMAT_SHOW_SPACE);
if (Key == BT_UP)
{
if (MenuGui.ItemIndex > 0)
{
MenuGui.ItemIndex --;
SET_STATUS(STATUS_UPDATEVALUE);
}
}
else if (Key == BT_DOWN)
{
if (MenuGui.ItemIndex < MenuGui.ItemCount - 1)
{
MenuGui.ItemIndex ++;
SET_STATUS(STATUS_UPDATEVALUE);
}
}
else if ((Key == BT_APPLY)||(Key == BT_LEFT))
{
MENU_Result.Byte = MenuGui.ItemIndex + 1;
GUI_SetControlValue(MENU_Selected);
MenuID = MENU_Selected;
GUI_Pop_Stack();
CLR_STATUS(STATUS_UPDATETITLE);
CLR_STATUS(STATUS_UPDATEVALUE);
SET_STATUS(STATUS_EVENT);
CLR_STATUS(STATUS_CONTROL);
}
Key = NO_KEY;
}
}
/*******************************************************************************
** 函数名称: GUI_GetUserInput **
** 功能描述: 取得用户的输入值,用户输入的数值会保存在相应的控制项 **
** 输入参数: 无 **
** 输出参数: 无 **
*******************************************************************************/
void GUI_GetUserInput(void)
{
WORD V[INT16_MAX_NUM]={1,10,100,1000,10000};
BYTE Buffer[INT16_MAX_NUM];
BYTE i;
if (MENU_Status & STATUS_UPDATETITLE)
{
GUI_Push_Stack();
i = GUI_GetControlValue(MENU_Selected);
if (i == 1)
{
INPT_MAX_Width = INT8_MAX_NUM;
}
else
{
INPT_MAX_Width = INT16_MAX_NUM;
}
LCD_Position(1,1);
GUI_WriteCaption(MENU_Selected, FORMAT_SHOW_SPACE);
for (i=3; i<=LCD_ROW_COUNT; i++)
{
LCD_ClearLine(i);
}
/*
LCD_Position(2,1);
for (i=0;i<6;i++)
{
LCD_PutChar(DefaultInputCaption[i]);
}
*/
INPT_CUR_Width = GetIntLen(INPT_Result);
if (INPT_CUR_Width > INPT_MAX_Width)
{
INPT_CUR_Width = INPT_MAX_Width;
}
MenuGui.IconFlag = 0;
SET_STATUS(STATUS_UPDATEVALUE);
CLR_STATUS(STATUS_UPDATETITLE);
}
if (Key!=NO_KEY)
{
if ( Key == BT_LEFT )
{
if (MenuGui.IconFlag < INPT_CUR_Width - 1)
{
MenuGui.IconFlag++;
SET_STATUS(STATUS_UPDATEVALUE);
}
else
{
if (INPT_CUR_Width < INPT_MAX_Width)
{
INPT_CUR_Width++;
MenuGui.IconFlag++;
SET_STATUS(STATUS_UPDATEVALUE);
}
}
}
else if ( Key == BT_RIGHT )
{
if (MenuGui.IconFlag > 0)
{
MenuGui.IconFlag --;
SET_STATUS(STATUS_UPDATEVALUE);
}
}
else if ( Key == BT_UP )
{
if (INPT_Result + V[MenuGui.IconFlag] > INPT_Result)
{
INPT_Result += V[MenuGui.IconFlag];
if (INPT_MAX_Width == INT8_MAX_NUM)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -