📄 main.c
字号:
// 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 + -