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

📄 main.c

📁 AT91fr40162的FLASH读写程序
💻 C
📖 第 1 页 / 共 2 页
字号:
// Include Standard LIB  files 
#include "dtm_v3.h"
#include "dtm.h"
#include "globledef.h"
#include "externdef.h"
#include <stdio.h>
#include <stdlib.h>



#define PIO_INTERRUPT_LEVEL			6
#define IRQ0_INTERRUPT_LEVEL		2
#define SOFT_INTERRUPT_LEVEL		5
#define FIQ_INTERRUPT_LEVEL			0
#define ImgBuf	(Pchar(0x10000))

_BYTE CheckDateTime(struct StruCLOCK sClock);
void WaitStatusProcess(void);
void WaitTrainStatusProcess(void);
void TrainingStatusProcess(void);

//*----------------------------------------------------------------------------
//* Function Name       : Main
//* Object              : Main interrupt function 
//* Input Parameters    : none
//* Output Parameters   : TRUE
//*----------------------------------------------------------------------------
int Main( void )
//* Begin
{
   	_BYTE cRetCode;
   	_BYTE * cpPointer;
   	_BYTE cpTime[5];
   	_DWORD i;
	
	Power(ON);
	InitCPLD();
	SoundOnOff(OFF);
	Initialize();
	Delayms(500);
	LEDGreen(OFF,0);
	LEDRed(OFF,0);
	
    cRetCode = TestWriteFlash();
    if (cRetCode!=C_OK) LEDRed(ON,0);;
   // for (i=0;i<4;i++) {
	         	SoundOnOff(ON);
    	     	Delayms(40);
   //     	 	SoundOnOff(OFF);
   //      		Delayms(40);
	//		} 
	LEDGreen(ON,0);
	
	//cRetCode=TestICcard();
	//if(cRetCode==0) i=0;
	while(1);		      
    //Delay10us(5);
      	KeyReadKey();	                   						// 扫描键盘

   	InitGlobalVar();												// 初始化全局变量
   	cRetCode = C_NOTOK;
   	i=0;
   	while ((i<3)&&(cRetCode!=C_OK)) {								// 取系统时钟
   		DlsReadTime(&gsClock);							
  		cRetCode = CheckDateTime(gsClock);
  		Delayms(10);
  		i++;
  	}	
   	if (cRetCode!=C_OK) Setup(COACHCARD,SETUPMODE);					// 如果时钟错误,要求重新设置时钟
	// 检查K系数
	if (SPB.wKParm==0) Setup(ADMINCARD,SETUPMODE);					// K系数为0,设置K系数			

   	cRetCode = FlashReadWriteCSI(&CSI,ICREAD);
   	if (cRetCode!=C_OK) {
       	DisplayMessage(M_RESET,6,1,WAITDISP,RECOVERYDISP);
      	while(1) {
   	      	KeyReadKey();
		   	if (gcKeyUp) {
      			gcKeyUp = FALSE;
      			DeviceInit();
      		}	
      	}
   	}


   	cRetCode = FlashReadWriteDAT(DAT,ICREAD);
   	if (cRetCode!=C_OK) {
      	while(1) {
         	Delays(1);
         	DisplayMessage(M_RESET,6,1,WAITDISP,RECOVERYDISP);
      	}
   	}

	Beep(8);
	
	/*
   	cRetCode = TestWriteBIEFBaseInfo();
   	if (cRetCode!=C_OK) {
      	while(1) {
         	Delays(1);
         	DisplayMessage(M_RESET,6,1,WAITDISP,RECOVERYDISP);
      	}
   	}
   	cRetCode = TestWriteBIEFTrainInfo();
   	if (cRetCode!=C_OK) {
      	while(1) {
         	Delays(1);
         	DisplayMessage(M_RESET,6,1,WAITDISP,RECOVERYDISP);
      	}
   	}
   	cRetCode = TestWriteBIEFTimeInfo();
   	if (cRetCode!=C_OK) {
      	while(1) {
         	Delays(1);
         	DisplayMessage(M_RESET,6,1,WAITDISP,RECOVERYDISP);
      	}
   	}
   	*/
   	PowerOnRecovery();
   	gcDispChanged = 1;
	gcClockFreshFlag = 1;
	// 主循环处理的流程
   	while(1) {
		//TestExternRam();
		gcKeyPressA = 3;										// 长按键时间
      	RefreshClock();
      	RefreshTrainingInfo();
      	KeyReadKey();	                   						// 扫描键盘
      	switch (CSI.cStatus) {
         	case S_INIT:                      					// 初始状态
         	    cpPointer = (_BYTE *)&CDTI;
             	for (i=0;i<LENOFCDTI;i++) cpPointer[i]=0;		// 清CDTI
             	for (i=0;i<LENOFDAT;i++) DAT[i]=0;   			// 清DAT
             	gcClockFreshFlag = 1;
             	InitGlobalVar();
             	gcTrainFreshFlag = 0;
             	gcClockFreshFlag = 1;
             	gcDispChanged=1;
             	SetStatus(S_WAIT);
             	break;

         	case S_WAIT:                      // 等待状态
             	if (gcDispChanged) {
                	DispLCDClearScreen();
                	DispOutText(2,0,10,(_BYTE *)"  等待教练签到  ");
                	GetCurTimeTxt(cpTime);
                	DispOutText(6,0,7,(_BYTE *)" 等待中.. ");
                	DispOutText(6,10*8,5,cpTime);
                	DispRefresh(2,0,2,VIDEOCOL,1);
                	DispRefresh(6,0,2,VIDEOCOL,1);
                	gcDispChanged=0;
             	}
             	WaitStatusProcess();
             	break;

         	case S_WAIT_TRAIN:                // 等待训练状态
             	if (gcDispChanged) {
                	DispLCDClearScreen();
                	DispClearVideoBuf(0,0,8,VIDEOCOL);
                	DispOutText(0,0,4,(_BYTE *)" 教练:");
                	DispOutImage(0,6*8,2,64,&DCBT[0].cpName[0]);
                	DispOutText(3,0,10,(_BYTE *)"  等待学员训练  ");
                	DispOutText(6,0,7,(_BYTE *)" 等待中.. ");
                	GetCurTimeTxt(cpTime);
                	DispOutText(6,10*8,5,cpTime);
                	DispRefresh(0,0,8,VIDEOCOL,1);
                	gcDispChanged=0;
             	}
             	WaitTrainStatusProcess();
             	break;

         	case S_TRAINING:                  // 训练状态
             	if (gcDispChanged) DispTrainingInfo();
             	if (gcUpdateCDTI) {
             		cRetCode = FlashReadWriteCDTI(&CDTI,ICWRITE);
             		gcUpdateCDTI=0;
             	}	
             	TrainingStatusProcess();
             	break;
      	}   // end of switch
   	}      // end of while

}


// 等待的处理程序
void WaitStatusProcess(void)
{
   	_BYTE cRetCode;
	SBIEF_1 sBIEFBaseInfo;
	SBIEF_2 sBIEFTrainInfo;
	SBIEF_3 sBIEFTimeInfo;
	
   	if (gcKeyUp) {
      	gcKeyUp = FALSE;
      	switch(gdwKeyNum) {
         	case LOGIN_PGUP_KEY:                        										// 签到/签退键
         	case MENU_QUERY_KEY:
         	case MENU_LOGIN_KEY:                        										
            	cRetCode = ICReadBIEF(&sBIEFBaseInfo,&sBIEFTrainInfo,&sBIEFTimeInfo);     		// 读取IC卡中的BIEF文件
            	if (cRetCode!=C_OK) {               											//
               		DisplayMessage(cRetCode,6,1,WAITDISP,RECOVERYDISP);          				// 根据错误码,显示错误信息
               		gcDispChanged = 1;
               		return;
            	}
            	DisplayCardInfo(&sBIEFBaseInfo,&sBIEFTrainInfo,&sBIEFTimeInfo,NOTWAITDISP,0);
            	
            	if (gdwKeyNum==MENU_QUERY_KEY) {           										// 菜单查询
               		QueryKeyProcess(&sBIEFBaseInfo,&sBIEFTrainInfo,&sBIEFTimeInfo);
               		gcDispChanged = 1;
               		return;
            	}

            	// 检查卡类型
            	switch(sBIEFBaseInfo.cCardType) {
               		case 0x01:                               					// 管理卡
               			if (gdwKeyNum==MENU_QUERY_KEY)
	                  		Setup(ADMINCARD,QUERYMODE);
                  		gcDispChanged = 1;
                  		break;

               		case 0x02:                               					// 教练卡
                  		cRetCode = CoachLogin(&sBIEFBaseInfo,&sBIEFTrainInfo,&sBIEFTimeInfo);   	// 教练签到
                  		if (cRetCode!=C_OK) {
                     		gcDispChanged = 1;
                     		return;
                  		}
                  		SetStatus(S_WAIT_TRAIN);
                  		gcClockFreshFlag = 1;
                  		gcDispChanged = 1;
                  		return;

               		case 0x03:                       				// 学员卡
                  		cRetCode=C_NOTCOACHIC;
                  		DisplayMessage(cRetCode,6,1,WAITDISP,RECOVERYDISP);          	// 根据错误码,显示错误信息??????
                  		gcDispChanged = 1;
                  		return;

               		case 0x04:                       				// 考官卡
                  		cRetCode=C_NOTCOACHIC;
                  		DisplayMessage(cRetCode,6,1,WAITDISP,RECOVERYDISP);          // 根据错误码,显示错误信息??????
                  		gcDispChanged = 1;
                  		return;

               		case 0x05:                       				// 维护卡
                  		break;

               		default:
                  		break;
            	} // end of switch gRecBuf
            	gcDispChanged = 1;
            	break;

         	case ENTER_MENU_KEY:                         					// 确认键
           		SystemMenuMain();
            	break;

         	case CANCEL_CHANGE_KEY:
	            if (gcKeyLongPress==1) 
	            	PowerOff();
	            else {	
            		cRetCode = C_ERRORKEY;
            		DisplayMessage(cRetCode,6,1,WAITDISP,RECOVERYDISP);          			// 根据错误码,显示错误信息
            	}	
            	gcDispChanged = 1;
           		break;

         	default:
            	break;
      	}   // end of switch gcKeyNum
   	}     // end of gckeyUp */
}


// 等待训练状态的处理程序
void WaitTrainStatusProcess()
{
   	_BYTE cRetCode,cDCBSeq;
   	_WORD wTime,wRandom;
	SBIEF_1 sBIEFBaseInfo;
	SBIEF_2 sBIEFTrainInfo;
	SBIEF_3 sBIEFTimeInfo;

   	if (gcKeyUp) {
      	gcKeyUp = FALSE;
      	switch(gdwKeyNum) {
         	case LOGIN_PGUP_KEY:                        										// 签到/签退键
         	case LOGOUT_PGDN_KEY:                        										// 签到/签退键
         	case MENU_QUERY_KEY:
         	case MENU_LOGIN_KEY:                        										
            	cRetCode = ICReadBIEF(&sBIEFBaseInfo,&sBIEFTrainInfo,&sBIEFTimeInfo);    // 读取IC卡中的BIEF文件
            	if (cRetCode!=C_OK) {               //
               		DisplayMessage(cRetCode,6,1,WAITDISP,RECOVERYDISP);          // 根据错误码,显示错误信息
               		return;
            	}

            	DisplayCardInfo(&sBIEFBaseInfo,&sBIEFTrainInfo,&sBIEFTimeInfo,NOTWAITDISP,0);

            	if (gdwKeyNum==MENU_QUERY_KEY) {           // 下翻/查询
               		QueryKeyProcess(&sBIEFBaseInfo,&sBIEFTrainInfo,&sBIEFTimeInfo);
               		gcDispChanged = 1;
               		return;
            	}

            	// 检查卡类型
            	switch(sBIEFBaseInfo.cCardType) {
               		case 0x01:                       // 管理卡
               			if (gdwKeyNum==MENU_QUERY_KEY)
	                  		Setup(ADMINCARD,QUERYMODE);
                  		gcDispChanged = 1;
                  		break;

               		case 0x02:                       // 教练卡,教练签退
                  		cRetCode = CoachLogout(&sBIEFBaseInfo,&sBIEFTrainInfo,&sBIEFTimeInfo);
                  		if (cRetCode==C_OK) {

⌨️ 快捷键说明

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