?? bspdotprnt.c
字號:
break;
case 2: /* 減速步 */
bspDotPrntCRPhase(1);
ucCRRunSteps ++;
DelayXus(prntCRSpeeddown[16 - ucCRRunSteps ]);
if (ucCRRunSteps == 16)
{
/* 若應該觸發HP而沒有觸發或者不應該觸發確觸發了HP則叛未機械故障 */
if (1 == bspDotPrntCheckHP())
{
g_ucprntState = g_ucprntState|MALFUNCTION;/* 故障 */
}
ucCRRunMode = 3;
ucCRRunSteps = 0;
}
break;
case 3: /* CR電機停機 */
if (ucCRRunSteps == 0 )
{
DelayXus(PD);
ucCRRunSteps ++;
}
else
{
bspDotPrntCRStop();
ucCRRunFlag = 0;
/* 啟動任務切換 */
OSSchedUnlock();
return;
}
break;
default:
break;
}
}
/* 啟動任務切換 */
OSSchedUnlock();
}
/*
***************************************************
*
* 函數名:bspDotPrntDrive
*
* 功 能:穿孔打印倍高打印時單向打印一行
*
* 輸 入:g_ucprntPattern3
*
* 輸 出:無
*
* 返 回:N/A
*
***************************************************
*/
void bspDotPrntDrive
(
UINT1 _ucDirection /* 正反向打印驅動選擇 */
)
{
UINT1 ucCRRunFlag = 1;
UINT2 ucCRRunSteps = 0;
UINT1 ucCRRunMode = 0;
bspDotPrntSetCurrentLevel(LOW_CURRENT);
/* 設置PU時間,讓出CPU執行 */
OSTimeDly(1);
/*禁止任務切換 */
OSSchedLock();
bspDotPrntSetCurrentLevel(HIGH_CURRENT);
while (ucCRRunFlag)
{
switch (ucCRRunMode)
{
case 0: /* 設置驅動電流為滿電流 */
bspDotPrntCRPhase(_ucDirection);
DelayXus(prntCRSpeedUp[ucCRRunSteps]);
ucCRRunSteps ++;
if (ucCRRunSteps == 16)
{
ucCRRunMode = 1;
ucCRRunSteps = 0;
bspDotPrntSetCurrentLevel(MIDDLE_CURRENT);
}
break;
case 1: /*正向勻速運動并打印*/
bspDotPrntCRPhase(_ucDirection);
ucCRRunSteps ++;
PRT_TRIG_ON();
if (_ucDirection)
{
PSOLENIO(~g_ucprntPattern3[ucCRRunSteps * 2 - 2]);
}
Delay350us();
PSOLENIO(0xff); /* 收針操作 */
PRT_TRIG_OFF();
Delay135us();
PRT_TRIG_ON();
if (_ucDirection)
{
PSOLENIO(~g_ucprntPattern3[ucCRRunSteps * 2 - 1]);
}
Delay350us();
PSOLENIO(0xff); /* 收針操作 */
PRT_TRIG_OFF();
Delay115us();
/* 打印完畢,準備減速 */
if (ucCRRunSteps == (PRNT_WIDTH / 2))
{
ucCRRunMode = 2;
ucCRRunSteps = 0;
}
break;
case 2: /* 減速步 */
bspDotPrntCRPhase(_ucDirection);
ucCRRunSteps ++;
DelayXus(prntCRSpeeddown[16 - ucCRRunSteps ]);
if (ucCRRunSteps == 16)
{
/* 若應該觸發HP而沒有觸發或者不應該觸發確觸發了HP則叛未機械故障 */
if((1 == bspDotPrntCheckHP()) && (_ucDirection))
{
g_ucprntState = g_ucprntState|MALFUNCTION;/* 故障 */
}
ucCRRunMode = 3;
ucCRRunSteps = 0;
}
break;
case 3: /* CR電機停機 */
if (ucCRRunSteps == 0 )
{
DelayXus(PD);
ucCRRunSteps ++;
}
else
{
bspDotPrntCRStop();
ucCRRunFlag = 0;
/* 啟動任務切換 */
OSSchedUnlock();
return;
}
break;
default:
break;
}
}
/* 啟動任務切換 */
OSSchedUnlock();
}
/*
***************************************************
*
* 函數名:bspDotCRRight2LeftDrive
*
* 功 能:穿孔打印機反向打印一行數據
*
* 輸 入:g_ucprntPattern2
* g_ucprntAdjustLevel
*
* 輸 出:無
*
* 返 回:N/A
*
***************************************************
*/
void bspDotCRRight2LeftDrive(void)
{
UINT1 i;
UINT2 uiPattenCount;
UINT1 ucCRRunFlag = 1;
UINT2 ucCRRunSteps = 0;
UINT1 ucCRRunMode = 0;
uiPattenCount = PRNT_WIDTH - 1;
bspDotPrntSetCurrentLevel(LOW_CURRENT);
OSTimeDly(1);
/*禁止任務切換 */
OSSchedLock();
bspDotPrntSetCurrentLevel(HIGH_CURRENT);
while (ucCRRunFlag)
{
switch (ucCRRunMode)
{
case 0: /* 設置驅動電流為滿電流 */
bspDotPrntCRPhase(0);
DelayXus(prntCRSpeedUp[ucCRRunSteps]);
ucCRRunSteps ++;
if (ucCRRunSteps == 16)
{
ucCRRunMode = 1;
ucCRRunSteps = 0;
bspDotPrntSetCurrentLevel(MIDDLE_CURRENT);
}
break;
case 1: /*正向勻速運動并打印*/
if ((g_ucprntAdjustLevel % 4)== 0)
{
/* 當打印效果調節參數是4整數倍時,直接通過移位相應步數達到
調節打印效果目的 */
for(i = 0; i < g_ucprntAdjustLevel / 4; i++)
{
bspDotPrntCRPhase(0);
DelayXus(1000);
}
while (ucCRRunSteps < (PRNT_WIDTH / 2))
{
bspDotPrntCRPhase(0);
ucCRRunSteps ++;
PRT_TRIG_ON();
PSOLENIO(~g_ucprntPattern2[uiPattenCount--]);
Delay350us();
PSOLENIO(0xff);
PRT_TRIG_OFF();
Delay135us();
PRT_TRIG_ON();
PSOLENIO(~g_ucprntPattern2[uiPattenCount--]);
Delay350us();
PSOLENIO(0xff);
PRT_TRIG_OFF();
Delay115us();
}
/* 由于勻速區調節效果可能多運行一定步數,相應減速區應該補償
回來,以確保橫向打印起始位置準確性 */
ucCRRunSteps = g_ucprntAdjustLevel / 4;
}
else if ((g_ucprntAdjustLevel % 4) == 1)
{
for(i = 0; i < g_ucprntAdjustLevel / 4; i++)
{
bspDotPrntCRPhase(0);
DelayXus(1000);
}
while (ucCRRunSteps < (PRNT_WIDTH / 2))
{
if (ucCRRunSteps == 0)
{
bspDotPrntCRPhase(0);
}
/* 切換相位走步后,延時250us開始打印出針操作 */
DelayXus(100);
PSOLENIO(0xff);
PRT_TRIG_OFF();
Delay135us();
PRT_TRIG_ON();
PSOLENIO(~g_ucprntPattern2[uiPattenCount--]);
Delay350us();
PSOLENIO(0xff);
PRT_TRIG_OFF();
Delay135us();
PRT_TRIG_ON();
PSOLENIO(~g_ucprntPattern2[uiPattenCount--]);
DelayXus(240);
ucCRRunSteps ++;
bspDotPrntCRPhase(0);
}
/* 補齊時序,繼續走完一步 */
DelayXus(100);
PSOLENIO(0xff);
PRT_TRIG_OFF();
DelayXus(900);
/* 由于存在補齊時序操作,勻速區運動步數相應會增加,需要占用
減速區運動步數確保橫向定位的準確性 */
ucCRRunSteps = 1 + g_ucprntAdjustLevel / 4;
}
else if ((g_ucprntAdjustLevel % 4) == 2)
{
for(i = 0; i < g_ucprntAdjustLevel / 4; i++)
{
bspDotPrntCRPhase(0);
DelayXus(1000);
}
while (ucCRRunSteps < (PRNT_WIDTH / 2))
{
/* 切換相位走步后,延時500us開始打印出針操作 */
if (ucCRRunSteps == 0)
{
bspDotPrntCRPhase(0);
DelayXus(350);
}
Delay115us();
PRT_TRIG_ON();
PSOLENIO(~g_ucprntPattern2[uiPattenCount--]);
Delay350us();
PSOLENIO(0xff);
PRT_TRIG_OFF();
Delay115us();
ucCRRunSteps ++;
/* 切換相序點,每步時間1ms */
bspDotPrntCRPhase(0);
PRT_TRIG_ON();
PSOLENIO(~g_ucprntPattern2[uiPattenCount--]);
Delay350us();
PSOLENIO(0xff);
PRT_TRIG_OFF();
}
/* 補齊時序,繼續走完一步 */
DelayXus(650);
ucCRRunSteps = 1 + g_ucprntAdjustLevel / 4;
}
else if ((g_ucprntAdjustLevel % 4) == 3)
{
for(i = 0; i < g_ucprntAdjustLevel / 4; i++)
{
bspDotPrntCRPhase(0);
DelayXus(1000);
}
while (ucCRRunSteps < (PRNT_WIDTH / 2))
{
/* 切換相位走步后,延時750us開始打印出針操作 */
if (ucCRRunSteps == 0)
{
bspDotPrntCRPhase(0);
DelayXus(500);
}
/* 實際延時值為150us 收針操作 */
Delay115us();
PRT_TRIG_ON();
PSOLENIO(~g_ucprntPattern2[uiPattenCount--]);
Delay350us();
PSOLENIO(0xff);
PRT_TRIG_OFF();
ucCRRunSteps ++;
bspDotPrntCRPhase(0);
Delay115us();
PRT_TRIG_ON();
PSOLENIO(~g_ucprntPattern2[uiPattenCount--]);
Delay350us();
PSOLENIO(0xff);
PRT_TRIG_OFF();
}
/* 補齊時序,繼續走完一步 */
DelayXus(500);
ucCRRunSteps = 1 + g_ucprntAdjustLevel / 4;
}
ucCRRunMode = 2;
break;
case 2: /* 減速步 */
bspDotPrntCRPhase(0);
ucCRRunSteps ++;
DelayXus(prntCRSpeeddown[16 - ucCRRunSteps ]);
if (ucCRRunSteps == 16)
{
/* 若應該觸發HP而沒有觸發或者不應該觸發確觸發了HP則判為機械故障 */
if (0 == bspDotPrntCheckHP())
{
g_ucprntState = g_ucprntState|MALFUNCTION;/* 故障 */
}
ucCRRunMode = 3;
ucCRRunSteps = 0;
}
break;
case 3: /* CR電機停機 */
if (ucCRRunSteps == 0 )
{
DelayXus(PD);
ucCRRunSteps ++;
}
else
{
bspDotPrntCRStop();
ucCRRunFlag = 0;
/* 啟動任務切換 */
OSSchedUnlock();
return;
}
break;
default:
break;
}
}
/* 啟動任務切換 */
OSSchedUnlock();
}
/*
**************************************************
*
* 函數名:bspDotPrntPFLineSpace
*
* 功 能:打印出針控制
*
* 輸 入:無
*
* 輸 出:無
*
* 返 回:N/A
*
***************************************************
*/
void bspDotprntControlPins
(
UINT1 _ucValue /*打印字模的值*/
)
{
PSOLENIO(_ucValue);
}
/*
***************************************************
*
* 函數名:bspDotPrntPFLineSpace
*
* 功 能:穿孔打印機進、退紙N步距函數
*
* 輸 入:g_ucPaperType
* g_ucprntCheckBM
*
* 輸 出:無
*
* 返 回:N/A
*
****************************************************
*/
void bspDotPrntPFLineSpace
(
UINT1 _ucDirection, /* 1 進紙, 0 退紙 */
UINT2 _uiLength /* 走紙或退紙的步數 */
)
{
UINT1 ucPFRunMode;
UINT2 usPFBMStep = 0;
UINT1 ucPFRunFlag = 1;
UINT2 ucPFRunSteps = 0;
const UINT2 prntPFSpeedUp[4] = {3500,2500,2500,1300};
if ((_ucDirection > 1) || (_uiLength < 1) || (_uiLength > FEEDLEN))
{
return;
}
/* 根據走紙的步數來確定是否要加速 */
LF_STEP_SIGNAL_ON();
if (g_ucprntCheckBM)
{
g_ucprntCheckBM = 0;
ucPFRunMode = 4;
}
else if (_uiLength == 1)
{
ucPFRunMode = 3;
}
else if (_uiLength <= 18)
{
ucPFRunMode = 0;
}
else /* >18步,要加速 */
{
ucPFRunMode = 1;
}
while (ucPFRunFlag )
{
switch (ucPFRunMode)
{
case 0: /* 低步數進紙不需要加減速過程 */
bspDotPrntPFPhase(_ucDirection, g_ucPaperType);
ucPFRunSteps ++;
/* 用2500us比較合理 */
DelayXus(PF_SHORTLEN_TIMER);
if (ucPFRunSteps == _uiLength)
{
ucPFRunMode = 2;
}
break;
case 1: /* 進紙步數大于18步,需要加、減速處理 */
bspDotPrntPFPhase(_ucDirection, g_ucPaperType);
ucPFRunSteps ++;
if (ucPFRunSteps <= 4) /* 加速運行 */
{
DelayXus(prntPFSpeedUp[ucPFRunSteps - 1]);
}
else if (ucPFRunSteps <= (_uiLength - 4)) /* 勻速運行 */
{
DelayXus(PF_SPEED_TIMER);
}
else if (ucPFRunSteps < _uiLength) /* 減速運行 */
{
DelayXus(prntPFSpeedUp[_uiLength - ucPFRunSteps]);
}
else if (ucPFRunSteps == _uiLength)
{
DelayXus(PD);
ucPFRunMode = 2;
}
break;
case 2: /*PF stop*/
bspDotPrntPFStop();
ucPFRunFlag = 0;
break;
case 3: /* 打印中文字符,單步進紙,時序2500us */
ucPFRunSteps ++;
if (ucPFRunSteps == 1)
{
bspDotPrntPFPhase(_ucDirection, g_ucPaperType);
DelayXus(PF_SHORTLEN_TIMER);
}
else if (ucPFRunSteps == 2)
{
DelayXus(PD);
ucPFRunMode = 2;
}
break;
case 4: /* 進紙找黑標流程 */
bspDotPrntPFPhase(_ucDirection, g_ucPaperType);
ucPFRunSteps ++;
if (1 == ucPFRunSteps)
{
DelayXus(3500);
}
else if (2 == ucPFRunSteps)
{
DelayXus(2500);
}
else if ((0 == g_ucprntCheckedBMark)&&(ucPFRunSteps < 800))
{ /* 未檢測到黑標,并且未進紙到頁長,則勻速進紙 */
DelayXus(1300);
}
else
{
DelayXus(2500);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -