📄 menu.c
字号:
while(!(index >= (psCurrentMenu->nItems)))
{
psMenuItem2 = &(psCurrentMenu->psItems[index]);
LCD_DisplayStringLine(Line, psMenuItem2->pszTitle);
index++;
Line += 24;
}
/* Set the Back Color */
LCD_SetBackColor(Green);
/* Set the Text Color */
LCD_SetTextColor(White);
/* Get the current menu */
psMenuItem = &(psCurrentMenu->psItems[MenuItemIndex]);
LCD_DisplayStringLine(((MenuItemIndex + 1) * 24), psMenuItem->pszTitle);
}
/*******************************************************************************
* Function Name : SelFunc
* Description : This function is executed when "SEL" push-buttton is pressed.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void SelFunc(void)
{
psCurrentMenuItem = psMenuItem;
if(psMenuItem->psSubMenu != '\0')
{
/* Update the current Item by the submenu */
MenuItemIndex = 0;
psCurrentMenu = psMenuItem->psSubMenu;
psMenuItem = &(psCurrentMenu->psItems)[MenuItemIndex];
DisplayMenu();
nMenuLevel++;
psPrevMenu[nMenuLevel] = psCurrentMenu;
}
psCurrentMenuItem->pfMenuFunc();
}
/*******************************************************************************
* Function Name : UpFunc
* Description : This function is executed when any of "UP" push-butttons
* is pressed.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void UpFunc(void)
{
/* Set the Back Color */
LCD_SetBackColor(White);
/* Set the Text Color */
LCD_SetTextColor(Blue);
psMenuItem = &psCurrentMenu->psItems[MenuItemIndex];
LCD_DisplayStringLine(((MenuItemIndex + 1) * 24), psMenuItem->pszTitle);
if(MenuItemIndex > 0)
{
MenuItemIndex--;
}
else
{
MenuItemIndex = psCurrentMenu->nItems - 1;
}
/* Set the Back Color */
LCD_SetBackColor(Green);
/* Set the Text Color */
LCD_SetTextColor(White);
psMenuItem = &psCurrentMenu->psItems[MenuItemIndex];
LCD_DisplayStringLine(((MenuItemIndex + 1) * 24), psMenuItem->pszTitle);
ItemNumb[nMenuLevel] = MenuItemIndex;
}
/*******************************************************************************
* Function Name : DownFunc
* Description : This function is executed when any of "Down" push-butttons
* is pressed.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void DownFunc(void)
{
/* Set the Back Color */
LCD_SetBackColor(White);
/* Set the Text Color */
LCD_SetTextColor(Blue);
psMenuItem = &psCurrentMenu->psItems[MenuItemIndex];
LCD_DisplayStringLine(((MenuItemIndex + 1) * 24), psMenuItem->pszTitle);
/* Test on the MenuItemIndex value before incrementing it */
if(MenuItemIndex >= ((psCurrentMenu->nItems)-1))
{
MenuItemIndex = 0;
}
else
{
MenuItemIndex++;
}
/* Set the Back Color */
LCD_SetBackColor(Green);
/* Set the Text Color */
LCD_SetTextColor(White);
/* Get the current menu */
psMenuItem = &(psCurrentMenu->psItems[MenuItemIndex]);
LCD_DisplayStringLine(((MenuItemIndex + 1) * 24), psMenuItem->pszTitle);
ItemNumb[nMenuLevel] = MenuItemIndex;
}
/*******************************************************************************
* Function Name : ReturnFunc
* Description : This function is executed when the "RETURN" menu is selected.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void ReturnFunc(void)
{
psMenuItem->pfUpDownMenuFunc();
if(nMenuLevel == 0)
{
nMenuLevel++;
}
psCurrentMenu = psPrevMenu[nMenuLevel-1];
psMenuItem = &psCurrentMenu->psItems[0];
ItemNumb[nMenuLevel] = 0;
MenuItemIndex = 0;
nMenuLevel--;
if(nMenuLevel != 0)
{
DisplayMenu();
}
else
{
ShowMenuIcons();
}
}
/*******************************************************************************
* Function Name : ReadKey
* Description : Reads key from demoboard.
* Input : None
* Output : None
* Return : Return RIGHT, LEFT, SEL, UP, DOWN or NOKEY
*******************************************************************************/
u8 ReadKey(void)
{
/* "right" key is pressed */
if(!GPIO_ReadInputDataBit(GPIOG, GPIO_Pin_13))
{
while(GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_13) == Bit_RESET)
{
}
return RIGHT;
}
/* "left" key is pressed */
if(!GPIO_ReadInputDataBit(GPIOG, GPIO_Pin_14))
{
while(GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_14) == Bit_RESET)
{
}
return LEFT;
}
/* "up" key is pressed */
if(!GPIO_ReadInputDataBit(GPIOG, GPIO_Pin_15))
{
while(GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_15) == Bit_RESET)
{
}
return UP;
}
/* "down" key is pressed */
if(!GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_3))
{
while(GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_3) == Bit_RESET)
{
}
return DOWN;
}
/* "sel" key is pressed */
if(!GPIO_ReadInputDataBit(GPIOG, GPIO_Pin_7))
{
while(GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_7) == Bit_RESET)
{
}
return SEL;
}
/* "KEY" key is pressed */
if(!GPIO_ReadInputDataBit(GPIOG, GPIO_Pin_8))
{
while(GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_8) == Bit_RESET)
{
}
return KEY;
}
/* No key is pressed */
else
{
return NOKEY;
}
}
/*******************************************************************************
* Function Name : IdleFunc
* Description : Idle function.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void IdleFunc(void)
{
/* Nothing to execute: return */
return;
}
/*******************************************************************************
* Function Name : DisplayIcons
* Description : Display menu icons.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void DisplayIcons(void)
{
u32 i = 0, j = 0, l = 0, iconline = 0, iconcolumn = 0;
iconline = 98;
iconcolumn = 290 ;
for(i = 0; i < 3; i++)
{
for(j = 0; j < 4; j++)
{
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);
LCD_SetDisplayWindow(iconline, iconcolumn, 64, 64);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, DISABLE);
#if STM3210E
LCD_NORDisplay(IconsAddr[l]);
#else
LCD_SPIDisplay(IconsAddr[l]);
#endif
iconcolumn -= 65;
l++;
if(l == NumberOfIcons)
{
return;
}
}
iconline += 65;
iconcolumn = 290;
}
}
/*******************************************************************************
* Function Name : ShowMenuIcons
* Description : Show the main menu icon.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void ShowMenuIcons(void)
{
u32 MyKey = 0, i = 0;
u16 IconRect[12][2] ={{34, 290}, {34, 225}, {34, 160}, {34, 95},
{99, 290}, {99, 225}, {99, 160}, {99, 95},
{164, 290}, {164, 225}, {164, 160}, {164, 95}};
/* Disable the JoyStick interrupts */
IntExtOnOffConfig(DISABLE);
while(ReadKey() != NOKEY)
{
}
/* Initializes the Menu state machine */
Menu_Init();
MenuItemIndex = 0;
/* Clear*/
LCD_Clear(White);
/* Set the Back Color */
LCD_SetBackColor(Blue);
/* Set the Text Color */
LCD_SetTextColor(White);
LCD_DisplayStringLine(Line0, psMenuItem->pszTitle);
/* Set the Back Color */
LCD_SetBackColor(White);
/* Set the Text Color */
LCD_SetTextColor(Blue);
/* Displays Icons */
DisplayIcons();
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);
/* Disable LCD Window mode */
LCD_WindowModeDisable();
LCD_DrawRect(IconRect[0][0], IconRect[0][1], 64, 65);
while(GPIO_ReadInputDataBit(GPIOG, GPIO_Pin_13) == RESET)
{
}
/* Endless loop */
while(1)
{
/* Check which key is pressed */
MyKey = ReadKey();
/* If "UP" pushbutton is pressed */
if(MyKey == UP)
{
/* Set the Text Color */
LCD_SetTextColor(White);
LCD_DrawRect(IconRect[i][0], IconRect[i][1], 64, 65);
if(i <= 3)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -