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

📄 sysmenu.c

📁 AT91fr40162的FLASH读写程序
💻 C
字号:


// Include Standard LIB  files 
#include "dtm_v3.h"
#include "dtm.h"
#include "help.h"
#include <stdio.h>
#include "sysmenu.h"
#include "externdef.h"


void SystemMenuMain(void);
void SystemMenuDisplayWindow(_BYTE cCurMenuID);
void SystemMenuProcess(_BYTE cCurMenuID);
void AdExplore(_BYTE *cpStartAdd,_BYTE cNumberOfAd);
_BYTE KParaAdjust(void);
void ParaSetup(void);


void SystemMenuMain(void)
{
	_BYTE cCurMenuID;
	cCurMenuID = MENUTEMPLOGID;
   	SystemMenuDisplayWindow(cCurMenuID);
   	while(1) {
	   	KeyReadKey();
      	if (gcKeyUp) {
         	gcKeyUp = FALSE;
         	switch(gdwKeyNum) {
            	case CANCEL_CHANGE_KEY:							// 退回SystemMenu
					gcDispChanged = 1;
					return;
					
            	case ENTER_MENU_KEY:							// 选中SytemMenu中的菜单
            		SystemMenuProcess(cCurMenuID);
					gcDispChanged = 1;
               		return;

            	case LOGOUT_PGDN_KEY:							// 选择SystemMenu中的菜单项 
            		if (cCurMenuID==MAXMENUITEMS-1) 
            			cCurMenuID = 0;
            		else
 		           		cCurMenuID++;
            			
				   	SystemMenuDisplayWindow(cCurMenuID);
				   	break;
				   	
            	case LOGIN_PGUP_KEY:
            		if (cCurMenuID==0) 
            			cCurMenuID = MAXMENUITEMS - 1;
            		else
    	        		cCurMenuID--;
				   	SystemMenuDisplayWindow(cCurMenuID);
				   	break;
         	} // end of switch 
      	} // end of if
   	} // end of while
}

//* -----------------------------------------------------------------------------
//* 函数: SystemMenuDisplayWindow
//* 功能: 显示菜单窗口
//* 参数: cCurMenuID: 菜单ID号
//* 显示要求 cCurMenuIDz指定的菜单项始终居中
//* -----------------------------------------------------------------------------
void SystemMenuDisplayWindow(_BYTE cCurMenuID)
{
	_BYTE cMenuID,cRow,cCol;
	// 显示小图标
   	DispLCDClearScreen();
   	// 显示cCurMenuID选中的小图标
	cRow = SMALLICONTOPX + SMALLICONHEIGHT - 1;
	cCol = SMALLICONTOPY;
	DispOutImageInRow(cRow,cCol,SMALLICONHEIGHT,SMALLICONWIDTH,SmallIcons+LENOFSMALLICON*cCurMenuID,1);
	//DispRefreshInRow(cRow,cCol,SMALLICONHEIGHT,SMALLICONWIDTH);
	// 显示缺省的大图标
	cRow = LARGEICONTOPX;
	cCol = LARGEICONTOPY;
	DispOutImageInRow(cRow,cCol,LARGEICONHEIGHT,LARGEICONWIDTH,LargeIcons+LENOFLARGEICON*cCurMenuID,0);
	//DispRefreshInRow(cRow,cCol,LARGEICONHEIGHT,LARGEICONWIDTH);
	// 显示最上面的小图标
	cRow = SMALLICONTOPX;
	cCol = SMALLICONTOPY;
	cMenuID = (cCurMenuID==0?MAXMENUITEMS-1:cCurMenuID-1);
	DispOutImageInRow(cRow,cCol,SMALLICONHEIGHT,SMALLICONWIDTH,SmallIcons+LENOFSMALLICON*cMenuID,0);
	//DispRefreshInRow(cRow,cCol,SMALLICONHEIGHT,SMALLICONWIDTH);
	// 显示最下面的小图标
	cRow = SMALLICONTOPX + 2*SMALLICONHEIGHT - 2;
	cCol = SMALLICONTOPY;
	cMenuID = (cCurMenuID==MAXMENUITEMS-1?0:cCurMenuID+1);
	DispOutImageInRow(cRow,cCol,SMALLICONHEIGHT,SMALLICONWIDTH,SmallIcons+LENOFSMALLICON*cMenuID,0);
   	DispRefresh(0,0,VIDEOPAGE,VIDEOCOL,1);
}


void SystemMenuProcess(_BYTE cCurMenuID)
{
	_BYTE cRetCode;
	_BYTE cCardType;
	switch(cCurMenuID) {
		case MENUTEMPLOGID:
         	gcKeyDown = TRUE;
         	gdwKeyNum = MENU_TMPLOG_KEY;
			break;

		case MENULOGID:
         	gcKeyDown = TRUE;
         	gdwKeyNum = MENU_LOGIN_KEY;
			break;

		case MENUQUERYID:
         	gcKeyDown = TRUE;
         	gdwKeyNum = MENU_QUERY_KEY;
			break;

		case MENUSETUPID:
			cRetCode = CheckAdmin(&cCardType);
			if ((cRetCode==C_OK) && ((cCardType==DADMINCARD)||(cCardType==SADMINCARD))) 
				ParaSetup();
				
			break;
			
		case MENUDOWNADID:
			break;
			
		case MENUEXPLOERADID:
			AdExplore(gcpWellcomIcon,MAXADITEMS);
	      	gcKeyUp = FALSE;
			break;

		case MENUKPARAID:
			cRetCode = CheckAdmin(&cCardType);
			if (cRetCode==C_OK) KParaAdjust();
	      	gcKeyUp = FALSE;
			break;

		case MENUINITID:
			cRetCode = CheckAdmin(&cCardType);
			if (cRetCode==C_OK) DeviceInit();
		    gcKeyUp = FALSE;
			break;
			
		case MENUHELPID:
			AdExplore(cpHelp,MAXHELPITEMS);
		    gcKeyUp = FALSE;
			break;
	}	
}

void AdExplore(_BYTE *cpStartAdd,_BYTE cNumberOfAd)
{
	_BYTE *cpAdImage;
	_BYTE cCurAdID;
	cCurAdID = 0;
	//cpAdImage =(_BYTE *)FLASH_BASE;
	cpAdImage =cpStartAdd;
	DispOutImageInRow(0,0,64,128,cpAdImage,0);
   	DispRefresh(0,0,VIDEOPAGE,VIDEOCOL,1);
   	gcKeyUp = FALSE;
	while(1) {
	   	KeyReadKey();
      	if (gcKeyUp) {
         	gcKeyUp = FALSE;
         	switch(gdwKeyNum) {
            	case CANCEL_CHANGE_KEY:							// 退回SystemMenu
            	case ENTER_MENU_KEY:						// 选中SytemMenu中的菜单
					gcDispChanged = 1;
					return;
					
            	case LOGOUT_PGDN_KEY:							// 选择SystemMenu中的菜单项 
            		if (cCurAdID==cNumberOfAd-1) 
            			cCurAdID = 0;
            		else	
            			cCurAdID++;
				   	break;
				   	
            	case LOGIN_PGUP_KEY:
            		if (cCurAdID==0) 
            			cCurAdID = cNumberOfAd - 1;
            		else
    	        		cCurAdID--;
				   	break;
         	} // end of switch 
			//DispOutImageInRow(0,0,64,128,cpAdImage,0);
			DispOutImageInRow(0,0,64,128,cpAdImage+cCurAdID*1024,0);
   			DispRefresh(0,0,VIDEOPAGE,VIDEOCOL,1);
      	} // end of if
   	} // end of while

}

//---------------- K系数校准功能 -------------
// 对K系数进行校准
_BYTE KParaAdjust(void)
{
   	_WORD wMileVal;
   	_DWORD dwKParaVal;
   	_BYTE cPos,cRetCode;
   	_BYTE cpKPara[5],cpMile[5];
   	_BYTE cMileChanged;
	
	gwPluseSetup = 0;
	dwKParaVal=0;
	wMileVal = 100;
	cMileChanged = 0;
   	DispLCDClearScreen();
   	DispOutText(0,0,12,(_BYTE *)"  * K系数校准*  ");
   	// 显示校准距离
   	LongToString(wMileVal,cpMile,4);
   	cpMile[4] = 'M';						
   	DispOutText(2,0,5,(_BYTE *)"校准里程:");
   	DispOutText(2,9*8,5,cpMile);
   	// 将K系数转换为四位字符
   	LongToString(dwKParaVal,cpKPara,5);
   	DispOutText(4,0,7,(_BYTE *)"   K系数:");
   	DispOutText(4,9*8,5,cpKPara);
   	// 显示保存
   	DispOutText(6,0,6,(_BYTE *)"  确认  ");
   	// 显示取消
   	DispOutText(6,8*8,6,(_BYTE *)"  取消  ");
   	DispRefresh(0,0,VIDEOPAGE,VIDEOCOL,1);
  	cPos = 1;
	DispRefresh(2,9*8,2,5*8,0);
   	
   	while(1) {
		if ((gwPluseSetup!=dwKParaVal)||(cMileChanged!=0)) {
		   	dwKParaVal = gwPluseSetup;
       		dwKParaVal = dwKParaVal*wMileVal/1000;
		   	LongToString(dwKParaVal,cpKPara,5);
		   	DispOutText(4,9*8,5,cpKPara);
		   	if (cPos==2) 
	       		DispRefresh(4,9*8,2,5*8,0);
	       	else	
	       		DispRefresh(4,9*8,2,5*8,1);
		   	dwKParaVal = gwPluseSetup;
		   	cMileChanged=0;
		}
      	KeyReadKey();
      	if (gcKeyUp) {
         	gcKeyUp = FALSE;
         	switch(gdwKeyNum) {
            	case ENTER_MENU_KEY:
            		if (cPos==3) {													// 保存
	               		// 写K参数信息到FLASH
					   	dwKParaVal = gwPluseSetup;
    	           		dwKParaVal = dwKParaVal*wMileVal/1000;
 	              		if (dwKParaVal==0) {
    	              		DisplayMessage(M_KPARAZERO,6,1,WAITDISP,RECOVERYDISP);        // 操作被取消
        	          		return(C_NOTOK);
            	   		}
               			SPB.wKParm = (_WORD)dwKParaVal;
               			cRetCode = FlashReadWriteSPB(&SPB,ICWRITE);
               			if (cRetCode!=C_OK) {
                  			DisplayMessage(M_MEMERROR,6,1,WAITDISP,RECOVERYDISP);        // 操作被取消
               			}
               			return(C_OK);
               		}	
					if (cPos==4) return(C_OK);
					break;
					
            	case CANCEL_CHANGE_KEY:
               		switch (cPos) {
                  		case 1:										// 距离栏->K系数栏
                     		DispRefresh(2,9*8,2,5*8,1);
                     		DispRefresh(4,9*8,2,5*8,0);
                     		break;
                  		case 2:										// K系数栏->保存栏
                     		DispRefresh(4,9*8,2,5*8,1);
                     		DispRefresh(6,2*8,2,4*8,0);
                     		break;
                  		case 3:										// 保存栏->取消栏
                     		DispRefresh(6,2*8,2,4*8,1);
                     		DispRefresh(6,10*8,2,4*8,0);
                     		break;
                  		case 4:										// 取消栏->距离栏
                     		DispRefresh(6,10*8,2,4*8,1);
                     		DispRefresh(2,9*8,2,5*8,0);
                     		break;
               		}  //end switch cPos
               		cPos = (cPos==4?1:cPos+1);
               		break;

            	case LOGOUT_PGDN_KEY:
            	case LOGIN_PGUP_KEY:
					if (cPos==1) {
					   	wMileVal = (_WORD)ByteToLong(cpMile,4,ISASCII);
                      	if (gdwKeyNum==LOGOUT_PGDN_KEY)
                       		wMileVal=(wMileVal>100?wMileVal-100:1000);
                        else
                           	wMileVal=(wMileVal==1000?100:wMileVal+100);
	                   	LongToString(wMileVal,cpMile,4);
                     	DispOutText(2,9*8,5,cpMile);
                     	DispRefresh(2,9*8,2,5*8,0);
						cMileChanged=1;
               		}
         	} // end of gKeyNum
      	} // end of if
   	} // end of while
}


// 设置系统参数
// 对如下的系统参数进行设置
// 验证时间值,速度上限,速度界限
void ParaSetup(void)
{
   	_BYTE cVerifyCycle,cSpeedLine;
   	_BYTE cPos,cRetCode;
   	_BYTE cpVerifyCycle[3],cpSpeedLine[2];

   	DispLCDClearScreen();
   	DispOutText(0,0,12,(_BYTE *)"   *系统设置*   ");
   	// 验证时间
   	LongToString(SPB.cVerifyCycle,cpVerifyCycle,3);
   	DispOutText(2,0,5,(_BYTE *)"验证时间:");
   	DispOutText(2,9*8,3,cpVerifyCycle);
   	// 速度界限
   	DispOutText(4,0,5,(_BYTE *)"速度设置:");
   	LongToString(SPB.cSpeedLine,cpSpeedLine,2);
   	DispOutText(4,9*8,2,cpSpeedLine);
   	DispRefresh(0,0,VIDEOPAGE,VIDEOCOL,1);
	// 反白
   	DispRefresh(2,9*8,2,3*8,0);
   	cPos = 1;
	cVerifyCycle = (_BYTE)ByteToLong(cpVerifyCycle,3,ISASCII);
   	while(1) {
      	KeyReadKey();
      	if (gcKeyUp) {
         	gcKeyUp = FALSE;
         	switch(gdwKeyNum) {
            	case ENTER_MENU_KEY:
               		// 写K参数信息到FLASH
					cVerifyCycle = (_BYTE)ByteToLong(cpVerifyCycle,3,ISASCII);
               		if (cVerifyCycle==0) {
                  		DisplayMessage(M_SETUPERROR,6,1,WAITDISP,RECOVERYDISP);        // 操作被取消
                  		break;
               		}
               		SPB.cVerifyCycle = cVerifyCycle;
					cSpeedLine = (_BYTE)ByteToLong(cpSpeedLine,2,ISASCII);
               		if (cSpeedLine==0) {
                  		DisplayMessage(M_SETUPERROR,6,1,WAITDISP,RECOVERYDISP);        // 操作被取消
                  		break;
               		}
               		SPB.cSpeedLine = cSpeedLine;
               		cRetCode = FlashReadWriteSPB(&SPB,ICWRITE);
               		if (cRetCode!=C_OK) {
                  		DisplayMessage(M_MEMERROR,6,1,WAITDISP,RECOVERYDISP);        // 操作被取消
               		}
 					return;              		

            	case CANCEL_CHANGE_KEY:
               		switch (cPos) {
                  		case 1:
                     		DispRefresh(2,9*8,2,3*8,1);
                     		DispRefresh(4,9*8,2,2*8,0);
                     		break;
                  		case 2:
                     		DispRefresh(4,9*8,2,2*8,1);
                     		DispRefresh(2,9*8,2,3*8,0);
                     		break;
               		}  //end switch cPos
               		cPos = (cPos==2?1:2);
               		break;

            	case LOGOUT_PGDN_KEY:
            	case LOGIN_PGUP_KEY:
               		switch(cPos) {
                  		case 1:                      								// 验证时间
							cVerifyCycle = (_BYTE)ByteToLong(cpVerifyCycle,3,ISASCII);
                       		if (gdwKeyNum==LOGOUT_PGDN_KEY)
                       			cVerifyCycle=(cVerifyCycle==1?255:cVerifyCycle-1);
                   			else
                      			cVerifyCycle=(cVerifyCycle==255?1:cVerifyCycle+1);
						   	LongToString(cVerifyCycle,cpVerifyCycle,3);
                     		DispOutText(2,9*8,3,cpVerifyCycle);
                     		DispRefresh(2,9*8,2,3*8,0);
                     		break;
                     		
                  		case 2:                      // 年
							cSpeedLine = (_BYTE)ByteToLong(cpSpeedLine,2,ISASCII);
                       		if (gdwKeyNum==LOGOUT_PGDN_KEY)
                       			cSpeedLine = (cSpeedLine==1?99:cSpeedLine-1);
                   			else
                      			cSpeedLine = (cSpeedLine==99?1:cSpeedLine+1);
						   	LongToString(cSpeedLine,cpSpeedLine,2);
                     		DispOutText(4,9*8,2,cpSpeedLine);
                     		DispRefresh(4,9*8,2,2*8,0);
                     		break;
              		}
         	} // end of gKeyNum
      	} // end of if
   	} // end of while
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -