⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keymenu.c

📁 源码
💻 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 + -