📄 common.c
字号:
}
//=================================================================
// 打开或关闭红灯
//=================================================================
void LEDGreen(_BYTE cStatus,_BYTE cTime)
{
if (cStatus==OFF){
gcpCPLDReg[2] |= CPLD_LED_G;
pCPLD[4]=gcpCPLDReg[2];
gcOpenLEDGreen = OFF;
}
else{
gcpCPLDReg[2] &= ~CPLD_LED_G;
pCPLD[4]=gcpCPLDReg[2];
if (cTime!=0) {
gcOpenLEDGreen = ON;
gcLEDGreenLightTime = cTime;
}
}
}
//=================================================================
// 打开或关闭绿灯
//=================================================================
void LEDRed(_BYTE cStatus,_BYTE cTime)
{
if (cStatus==OFF){
gcpCPLDReg[2] |= CPLD_LED_R;
pCPLD[4]=gcpCPLDReg[2];
gcOpenLEDRed = OFF;
}
else{
gcpCPLDReg[2] &= ~CPLD_LED_R;
pCPLD[4] = gcpCPLDReg[2];
if (cTime!=0) {
gcOpenLEDRed = ON;
gcLEDRedLightTime = cTime;
}
}
}
//=================================================================
// 打开或关闭蜂鸣器
//=================================================================
void SoundOnOff(_BYTE cStatus)
{
if (cStatus==ON) {
gcpCPLDReg[3] |= CPLD_BEEP;
pCPLD[6] = gcpCPLDReg[3];
}
else {
gcpCPLDReg[3] &=~CPLD_BEEP;
pCPLD[6]=gcpCPLDReg[3];
gcOpenBeep = 0;
}
}
void Delayms(_DWORD dwTime)
{
_DWORD i;
while(dwTime--) {
for (i=0;i<MCK/5000;i++);
}
}
void Delays(_DWORD dwTime)
{
_DWORD i,j;
for(i=0; i<dwTime; i++)
for (j=0;j<MCK/5;j++);
}
void DelayMCK4(_DWORD dwTime)
{
_DWORD i ;
for(i=0; i<dwTime; i++) ;
}
void Delay10us(_DWORD dwTime){
unsigned int dummy;
gcTimer0Flag = 0xff;
gdwTimer0Counter = dwTime;
dummy = MY_TC0_SR; //* Clear status bit
dummy = dummy; //* Suppress warning variable "dummy" was set but never used
//* Enable the clock
MY_TC0_CCR = AT91C_TC_CLKEN;
MY_TC0_CCR = AT91C_TC_SWTRG ;
loop:
if (gcTimer0Flag==0xff) goto loop;
return;
}
//=================================================================
// 开机时进行断电前信息的恢复
//=================================================================
void PowerOnRecovery(void)
{
_BYTE cRetCode;
_BYTE i,j,cWidth,cMode;
cWidth = 0;
for (i=0;i<LENOFDCBT/8;i++) {
cMode = 0x80;
for (j=0;j<8;j++) {
if ((DAT[i] & cMode)!=0) cWidth++;
cMode = cMode >> 1;
}
}
if ((CSI.cStatus==S_WAIT_TRAIN)||(CSI.cStatus==S_TRAINING)||(cWidth!=0)) {
DispLCDClearScreen(); // 清显示
DispOutText(0,0,12,(_BYTE *)" *系统恢复* ");
DispOutText(3,0,10 ,(_BYTE *)" 恢复中, 请等待 ");
DispRefresh(0,0,6,VIDEOCOL,1);
cRetCode = RebuildDCBT(); // 根据Flash中的DCBT重构DCBT表
// 重构全局变量
if (cRetCode!=C_OK){
DispOutText(6,0,12,(_BYTE *)" 恢复失败 ");
DispRefresh(6,0,2,VIDEOCOL,1);
Delays(1);
SetStatus(S_INIT);
return;
}
// 恢复CDTI信息,将Flash中的CDTI信息恢复到内存的CDTI中
if (CSI.cStatus==S_TRAINING) {
cRetCode = FlashReadWriteCDTI(&CDTI,ICREAD);
if (cRetCode!=C_OK) {
cRetCode = C_NOTOK;
for (cWidth=1;cWidth<LENOFDCBT;cWidth++)
if (DCBT[cWidth].cFlag==0) {
GetCDTI(cWidth);
CSI.cCurDCB=cWidth;
cRetCode =C_OK;
}
if (cRetCode!=C_OK) {
DispOutText(6,0,12,(_BYTE *)" 恢复失败 ");
DispRefresh(6,0,2,VIDEOCOL,1);
Delays(1);
SetStatus(S_INIT);
return;
}
}
}
}
else
return;
DispOutText(6,0,12,(_BYTE *)" 恢复成功 ");
DispRefresh(6,0,2,VIDEOCOL,1);
Delays(1);
// 恢复成功转此处
gCurDriverCount=0;
for (cWidth=1;cWidth<LENOFDCBT;cWidth++)
if (DCBT[cWidth].cFlag) gCurDriverCount++;
switch (CSI.cStatus){
case S_WAIT_TRAIN: // 恢复到等待训练状态
gcDispChanged = 1;
gcClockFreshFlag = 1;
break;
case S_TRAINING: // 恢复训练状态
if (gCurDriverCount==0) {
SetStatus(S_WAIT_TRAIN);
gcDispChanged = 1;
gcClockFreshFlag = 1;
}
else {
CSI.cCurDCB = CDTI.cSeq;
gcValidSeconds = CDTI.cCycleSecond;
gcDispChanged=1;
gcClockFreshFlag = 1;
gcTrainFreshFlag = 1;
}
break;
}
}
//=================================================================
// 显示卡内容
// 显示的内容包括持卡人的姓名
//=================================================================
void DisplayCardInfo(SBIEF_1 *sBIEFBaseInfo,SBIEF_2 *sBIEFTrainInfo,SBIEF_3 *sBIEFTimeInfo,_BYTE cWait,_BYTE cDetail)
{
_BYTE cpBuf[12],cPage;
_DWORD dwTimeOrMile,dwTmp;
_DWORD dwTotalTime,dwTotalMile;
_DWORD dwFieldTime,dwFieldMile;
_DWORD dwRoadTime,dwRoadMile;
cPage = 1;
switch (sBIEFBaseInfo->cCardType) {
case 0x01:
break;
case 0x02:
case 0x03:
if (cWait==0) DispLCDClearScreen();
if (sBIEFBaseInfo->cCardType==0x02)
DispOutText(0,0,4,(_BYTE *)" 教练:");
else
DispOutText(0,0,4,(_BYTE *)" 学员:");
DispOutImage(0,6*8,2,8*8,(_BYTE *)&sBIEFBaseInfo->cpName[0]); // 显示姓名
DispOutText(2,0,4,(_BYTE *)" 时间:");
dwTimeOrMile = sBIEFTrainInfo->dwDayFieldTotalTime;
dwTimeOrMile += sBIEFTrainInfo->dwDayRoadTotalTime;
dwTimeOrMile += sBIEFTrainInfo->dwNightFieldTotalTime;
dwTimeOrMile += sBIEFTrainInfo->dwNightRoadTotalTime;
TimeMileToString(dwTimeOrMile,0,cpBuf,TIMESUM);
DispOutText(2,6*8,9,cpBuf);
DispOutText(4,0,4,(_BYTE *)" 里程:");
dwTimeOrMile = sBIEFTrainInfo->dwDayFieldTotalMile;
dwTimeOrMile += sBIEFTrainInfo->dwDayRoadTotalMile;
dwTimeOrMile += sBIEFTrainInfo->dwNightFieldTotalMile;
dwTimeOrMile += sBIEFTrainInfo->dwNightRoadTotalMile;
TimeMileToString(dwTimeOrMile,0,cpBuf,MILESUM);
DispOutText(4,6*8,9,cpBuf);
DispOutText(6,0,4,(_BYTE *)" 容量:");
dwTimeOrMile = sBIEFTrainInfo->wCurrentItem;
LongToString(dwTimeOrMile,cpBuf,4);
cpBuf[4]='/';
dwTimeOrMile = sBIEFBaseInfo->wMaxItem;
LongToString(dwTimeOrMile,cpBuf+5,4);
DispOutText(6,6*8,9,cpBuf);
break;
case 0x04:
break;
default:
DisplayMessage(C_ICINVALID,6,1,WAITDISP,RECOVERYDISP);
break;
}
DispRefresh(0,0,8,VIDEOCOL,1);
// 等待按键
if ((cDetail==0)&&(cWait)) {
KeyReadKey(); // 扫描键盘
dwTimeOrMile = 10000;
while(dwTimeOrMile>0) {
if (gcKeyUp) {
gcKeyUp = FALSE;
break;
}
dwTimeOrMile--;
KeyReadKey(); // 扫描键盘
Delayms(1);
}
}
if (cDetail==0) return;
dwFieldTime = sBIEFTrainInfo->dwDayFieldTotalTime + sBIEFTrainInfo->dwNightFieldTotalTime;
dwFieldMile = sBIEFTrainInfo->dwDayFieldTotalMile + sBIEFTrainInfo->dwNightFieldTotalMile;
dwRoadTime = sBIEFTrainInfo->dwDayRoadTotalTime + sBIEFTrainInfo->dwNightRoadTotalTime;
dwRoadMile = sBIEFTrainInfo->dwDayRoadTotalMile + sBIEFTrainInfo->dwNightRoadTotalMile;
dwTotalTime = dwFieldTime + dwRoadTime;
dwTotalMile = dwFieldMile + dwRoadMile;
while (1) {
KeyReadKey();
if (gcKeyUp) {
gcKeyUp = FALSE;
if (gdwKeyNum==CANCEL_CHANGE_KEY) {
gcDispChanged=1;
return;
}
DispLCDClearScreen();
DispOutText(0,0,4,(_BYTE*)" 场训:");
dwTimeOrMile = dwFieldTime;
dwTmp = dwTimeOrMile/60;
LongToString(dwTmp,cpBuf,3);
Trim(cpBuf,3);
DispOutText(0,6*8,3,cpBuf);
DispOutText(0,9*8,1,(_BYTE*)"时");
dwTmp = dwTimeOrMile%60;
LongToString(dwTmp,cpBuf,2);
DispOutText(0,11*8,2,cpBuf);
DispOutText(0,13*8,1,(_BYTE*)"分");
DispOutText(2,0,4,(_BYTE*)" 路训:");
dwTimeOrMile = dwRoadTime;
dwTmp = dwTimeOrMile/60;
LongToString(dwTmp,cpBuf,3);
Trim(cpBuf,3);
DispOutText(2,6*8,3,cpBuf);
DispOutText(2,9*8,1,(_BYTE*)"时");
dwTmp = dwTimeOrMile%60;
LongToString(dwTmp,cpBuf,2);
DispOutText(2,11*8,2,cpBuf);
DispOutText(2,13*8,1,(_BYTE*)"分");
DispOutText(4,0,4,(_BYTE*)" 总量:");
dwTimeOrMile = dwTotalTime;
dwTmp = dwTimeOrMile/60;
LongToString(dwTmp,cpBuf,3);
Trim(cpBuf,3);
DispOutText(4,6*8,3,cpBuf);
DispOutText(4,9*8,1,(_BYTE*)"时");
dwTmp = dwTimeOrMile%60;
LongToString(dwTmp,cpBuf,2);
DispOutText(4,11*8,2,cpBuf);
DispOutText(4,13*8,1,(_BYTE*)"分");
DispRefresh(0,0,VIDEOPAGE,VIDEOCOL,1);
} // end of if key
} // end of while
}
//=================================================================
// 根据BIEF信息生成DCB信息
// sBIEFBaseInfo,sBIEFTrainInfo,sBIEFTimeInfo:存放BEIF信息
// sDCB:存放DCB信息
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -