📄 keymenu.c
字号:
#include "KeyMenu.h"
#include "MenuString.h"
#include "CommonDefine.h"
#include "main.h"
#include <stdlib.h>
extern void EEPROM_WaitForLastTask(u8 I2CAddr);
extern void EEPROM_Send(I2C_TypeDef *I2Cx,char *PtrToBuffer, u8 NbOfBytes,
u8 InternalAddress, u8 I2CAddr);
extern void EEPROM_Receive(I2C_TypeDef *I2Cx, char *PtrToBuffer,u8 NbOfBytes,
u8 InternalAddress,u8 I2CAddr);
extern void I2C1_Config(void);
u8 g_aucSendBuf[20]; //发送缓冲区
u8 g_aucCmdPackBuf[20]; //指令打包缓冲区
u8 g_aucDtcDefBuf[270]; //故障码定义存储缓冲区
/**************************************************************************************************
** 函数名: GS_DrawFace
** 输 入: void
** 输 出: void
** 功能描述: 显示开机画面
** 说 明: void
** 作 者: SIMPLE
** 日 期: 2005/04/15
** 修 改:
** 日 期:
** 版 本: V0.0
** //lh
**************************************************************************************************/
void GS_DrawFace(void)
{
//u16 TimeOut= 0xffff;
u16 TimeOut= 0xffff;
u16 i;
GS_DrawPic(0, 0, 128, 8, (u8 *)PIC_AUTEL, 0);
GS_PutString(0, 6, (u8 *)STR_VER1, TEXT_ALIGN_CENTER, NEGATE_COLOR_NONE);
GS_PutString(0, 5, (u8 *)STR_VER2, TEXT_ALIGN_CENTER, NEGATE_COLOR_NONE);
Delay(9600*500);
while(TimeOut--)
{
Delay(96*2);
//if(Key_GetAll()!=0x0000) break;
//i=GS_GetKey();
i=Key_GetAll();
if((i!=0x0000)&&(i!=KEY_POWER))
break;
////检测是否usb接口是否插上PC.
//if(!(GPIO_BitRead(GPIO1,0x09))) //读p1.9
// UsbProcess();
}
}
//<----------------------------------------------------------------------------------------------->
//菜单函数
/**************************************************************************************************
** 函数名: GS_ShowOnePageMenu
** 输 入: ucPageNo, pucMenuItems
** 输 出: void
** 功能描述: 显示一屏菜单
** 说 明: void
** 作 者: SIMPLE
** 日 期: 2005/04/14
** 修 改:
** 日 期:
** 版 本: V0.0
** //lh
**************************************************************************************************/
void GS_ShowOnePageMenu(u8 ucPageNo, u8 * pucMenuItems)
{
u8 i, ucXpos;
u8 * pMenuBuf;
pMenuBuf = pucMenuItems;
i=0;
while(1)
{
if(i/4 == ucPageNo)
break;
if(*pMenuBuf == '#')
i++;
pMenuBuf++;
}
//<=============清除菜单显示区=======================>
for(i=2; i<6; i++)
GS_ClearLine(i);
//<=============== 输出菜单 ========================>
ucXpos = 6;
for(i=2; i<6; i++) //显示4行
{
while(1)
{
if(*pMenuBuf == '#')
{
ucXpos = 6;
pMenuBuf++;
break;
}
else
if(*pMenuBuf == '$')
return;
else
{
GS_PutChar(ucXpos, i, *pMenuBuf, NEGATE_COLOR_NONE);
pMenuBuf++;
ucXpos += 6;
}
}
}
}
/**************************************************************************************************
** 函数名: GS_ShowMenu
** 输 入: P_u8 MainMenu, P_u8 SubMenu, u8 MNo
** 输 出: u8;
** 超时退出返回 0xfe;
** 否定选择返回 0xff;
** 确定选择返回 菜单序号;
** 功能描述: 本函数显示 菜单
** 说 明: void
** 作 者: SIMPLE
** 日 期: 2005/04/14
** 修 改:
** 日 期:
** 版 本: V0.0
** //lh_read
**************************************************************************************************/
u8 GS_ShowMenu(u8 * pucMenuTitle, u8 * pucMenuItems, u8 ucSelMenuItemNo)
{
//u8 bSFlag=0;
u8 ucArrPos;
u8 ucMlen;
// u8 ucAlen;
u8 ucMenuItemCnt; //菜单项的项数
u8 * pucMenuBuf;
while(Key_GetAll()!=0x0000); //判断无键按下则显示菜单
//计算子菜单中子项的个数
ucMenuItemCnt = 0;
pucMenuBuf = pucMenuItems;
while(*pucMenuBuf!='$')
{
if(*pucMenuBuf == '#')
ucMenuItemCnt++;
pucMenuBuf++;
}
//<---------------------------->
ucMlen = ucMenuItemCnt;
ucMenuItemCnt --; //前面还要显示菜单头
ucMenuItemCnt /= 4; //显示4行
if(ucMlen>=4)
;//ucAlen = 4;
else
//ucAlen = ucMlen;
//显示菜单标题
GS_CreateForm(pucMenuTitle); //显示菜单头
pucMenuBuf = pucMenuItems; //准备显示子菜单,传递子菜单地址
if(ucSelMenuItemNo <= 4)
{
GS_ShowOnePageMenu(0, pucMenuBuf);
ucArrPos = ucSelMenuItemNo;
}
else
{
ucArrPos = ucSelMenuItemNo%4; //每屏最多显示5个菜单项
if(!ucArrPos)
ucArrPos=4;
GS_ShowOnePageMenu((ucSelMenuItemNo-1)/4, pucMenuBuf);
//GS_PutChar(122, 1, 0x97,0);
}
GS_PutChar(0, ucArrPos+1, 0x87, NEGATE_COLOR_NONE); //显示箭头
//显示任务栏
//显示箭头所指位置数字量
GS_DrawOneLine(6);
GS_ClearLine(7);
if(ucMlen<=9)
{
GS_ClearShortLine(128-4*6,128,6);
GS_ShowDec(128-6*3, 6, ucSelMenuItemNo);
GS_PutChar(128-6*2, 6, '/', NEGATE_COLOR_NONE);
GS_ShowDec(128-6*1, 6, ucMlen);
}
else
{
if(ucSelMenuItemNo<=9)
{
GS_ClearShortLine(128-5*6,128,6);
GS_ShowDec(128-6*4, 6, ucSelMenuItemNo);
GS_PutChar(128-6*3, 6, '/', NEGATE_COLOR_NONE);
GS_ShowDec(128-6*2, 6, ucMlen);
}
else
{
GS_ClearShortLine(128-6*6,128,6);
GS_ShowDec(128-6*5, 6, ucSelMenuItemNo);
GS_PutChar(128-6*3, 6, '/', NEGATE_COLOR_NONE);
GS_ShowDec(128-6*2, 6, ucMlen);
}
}
while(1)
{
switch(Key_WaitKey())
{
case KEY_DOWN:
if(ucSelMenuItemNo < ucMlen)
{
ucSelMenuItemNo ++;
}
else
{
ucSelMenuItemNo = 1;
}
if(ucSelMenuItemNo%4==1)
GS_ShowOnePageMenu((ucSelMenuItemNo-1)/4, pucMenuBuf);
//bSFlag=0;
GS_PutChar(0, ucArrPos+1, ' ', NEGATE_COLOR_NONE);
ucArrPos = ucSelMenuItemNo%4;
if(!ucArrPos)
ucArrPos=4;
break;
case KEY_UP:
if(ucSelMenuItemNo > 1)
ucSelMenuItemNo --;
else
{
ucSelMenuItemNo = ucMlen;
GS_ShowOnePageMenu((ucSelMenuItemNo-1)/4, pucMenuBuf);
}
GS_PutChar(0, ucArrPos+1, ' ', NEGATE_COLOR_NONE);
ucArrPos = ucSelMenuItemNo%4;
if(!ucArrPos)
{
ucArrPos=4;
GS_ShowOnePageMenu((ucSelMenuItemNo-1)/4, pucMenuBuf);
}
//bSFlag=0;
break;
case KEY_ENTER :
return ucSelMenuItemNo ;
case KEY_CANCEL :
return 0x0000;
case KEY_POWER :
GPIO_Config(GPIO1, 0x0020, GPIO_OUT_PP); //配置开机保持端口P1.5
GPIO_BitWrite(GPIO1,0x05,0x01); //关机,关闭开机保持信号P1.5.
break;
}
GS_PutChar(0, ucArrPos+1, 0x87, NEGATE_COLOR_NONE); //显示箭头
//显示任务栏
//显示箭头所指位置数字量
GS_DrawOneLine(6);
GS_ClearLine(7);
if(ucMlen<=9)
{
GS_ClearShortLine(128-4*6,128,6);
GS_ShowDec(128-6*3, 6, ucSelMenuItemNo);
GS_PutChar(128-6*2, 6, '/', NEGATE_COLOR_NONE);
GS_ShowDec(128-6*1, 6, ucMlen);
}
else
{
if(ucSelMenuItemNo<=9)
{
GS_ClearShortLine(128-5*6,128,6);
GS_ShowDec(128-6*4, 6, ucSelMenuItemNo);
GS_PutChar(128-6*3, 6, '/', NEGATE_COLOR_NONE);
GS_ShowDec(128-6*2, 6, ucMlen);
}
else
{
GS_ClearShortLine(128-6*6,128,6);
GS_ShowDec(128-6*5, 6, ucSelMenuItemNo);
GS_PutChar(128-6*3, 6, '/', NEGATE_COLOR_NONE);
GS_ShowDec(128-6*2, 6, ucMlen);
}
}
}
}
/*****************************************************************************************
** 函数名: BFace
** 输 入: void
** 输 出: void
** 功能描述: 显示菜单画面
** 说 明: void
** 作 者: SIMPLE
** 日 期: 2005/04/15
** 修 改:
** 日 期:
** 版 本: V0.0
**************************************************************************************************/
void BFace(void)
{
GS_ClearLCD();
GS_PutString(0, 0, (u8 *)STR_BFACE, TEXT_ALIGN_CENTER, NEGATE_COLOR_NONE);
// GS_ReadVehFlag();
GS_DrawPic(36, 1, 56, 5, (u8 *)PICVEH, 0);
GS_PutString(0, 6, (u8 *)STR_BFACE1, TEXT_ALIGN_NONE, NEGATE_COLOR_NONE);
}
/**************************************************************************************************
** 函数名: GS_MainMenu
** 输 入:
**
**
** 输 出: void
** 功能描述: 进入系统菜单
** 说 明: void
** 作 者: SIMPLE
** 日 期: 2005/04/14
** 修 改:
** 日 期:
** 版 本: V0.0
**************************************************************************************************/
void GS_MainMenu(void)
{
u8 ucSelMenuItem = 1; //初始位置是第一条子菜单
while(1)
{
ucSelMenuItem = GS_ShowMenu((u8 *)STR_TTL_MNU_MAIN, (u8 *)STR_TXT_MNU_MAIN, ucSelMenuItem);
switch(ucSelMenuItem)
{
case 1:
SendPwm_SH();
break;
default:
ucSelMenuItem = 1;
break;
}
}
}
//<========================================== END ======================================================>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -