📄 hzprn.c
字号:
/********************************************************************************/
/* HzPrn.C 为点阵式汉字打印机编写的程序 */
/* 其他模块: HzPrnTy.ASM */
/* C P U : 89C51RD2(64kB) */
/* 晶 振: 11.0592M */
/* 程 序 员: 张现 */
/* 修改日期: 2003-5-28 */
/********************************************************************************/
#include <Reg51RD2.h>
#include <HzPrn.h>
#include <Alpha6x8.C>
#include <HzK3562.C> //code unsigned char HzCode12x12[3783][17];
code unsigned char BitMask[12] = {0,0,0x80,0x40,0x20,0x10,8,4,2,1,0,0};
xdata unsigned char PrintBuf[1024];
data unsigned char CacheBuf[32]="信息产业部电子第49研究所\xD";
data unsigned char Flag;
data unsigned char LineBuf[12];
data unsigned char HzKBuf[8*2]; /*** 读EEPROM(24C512)缓冲区: 8个汉字 ***/
data unsigned char PrintABCD,FetchABCD;
data unsigned char PrintStep,FetchStep;
data unsigned char Loop,pStr;
data unsigned int Head,End; /*** 打印缓冲区头, 尾指针 ***/
#pragma disable
void Interrupt_INT1() interrupt 2
{
if( (Flag & fgPrinting) )
{
if( PrintStep>99 )
{
P1=0xF; Flag &= ~fgPrinting;
}
else
{
switch( (PrintStep&3) )
{
case 0: P1 = PrintABCD | 0xE; break; /* Print B */
case 1: P1 = PrintABCD | 0x7; break; /* Print C */
case 2: P1 = PrintABCD | 0xB; break; /* Print D */
case 3: P1 = PrintABCD | 0xD; /* Print A */
Flag |= fgFetchOld; PrintABCD=FetchABCD; break;
}
PrintStep++;
}
}
}
//#define XON 19
//#define XOFF 17
#define XON '<'
#define XOFF '>'
void Interrupt_RS232() interrupt 4
{
TI = 0;
if( RI )
{
if( pStr<sizeof(CacheBuf) )
CacheBuf[pStr++] = SBUF;
RI = 0;
if( pStr>(sizeof(CacheBuf)-20) )SBUF=XOFF;
else if( pStr<10 )SBUF=XON;
}
}
void PrintOneLine()
{
if( !ResetPulsePin )
{
while( !ResetPulsePin );
}
else
{
while( ResetPulsePin ); while( !ResetPulsePin );
}
FetchFourDot( );
FetchStep=PrintStep=0; Flag |= fgPrinting; Flag &= ~fgFetchOld;
while( (Flag&fgPrinting) )
{
if( (Flag&fgFetchOld) )
{
FetchFourDot( );
}
}
T1 = ~T1;
}
main()
{
InitConfig(); pStr = 30;
while( true )
{
while( pStr>15 || ExistReturn() )
{
P14 = ON;
if( GraphicLine() )
{
PrintOneLine();
}
else
{
for(Loop=0; Loop<12; Loop++)
{
FetchOneLine(Loop);
PrintOneLine();
}
BlockMove();
}
}
P14 = OFF;
if( ++Loop==0 && ++FetchStep>35 ) /* 没有字符可打印时灯闪烁 */
{
T1=~T1; FetchStep=0;
}
}
}
void InitConfig()
{
SCON = 0x50; /** 10 bits, Enable receive **/
TMOD = Timer1_BPS; /** T1: mode 2**/
PCON = 0;
TH1 = cTH1_11M_BPS9600; /** 11.0592M: 9600BPS **/
TCON = 0x45;
PrintABCD = 0xF;
TI = RI = false;
IE = E_INT_RS + E_INT_X0 + E_INT_X1;
}
/*
void FetchLine(unsigned char pLine) // 8x12
{
unsigned char i,Tmp;
for(Tmp=0xF,i=0; i<4; i++)
{
Tmp *= 2;
if( (Alpha_Code8x12[CacheBuf[FetchStep/8+i*3]-0x20][pLine] & EBitMask[FetchStep&7]) ) Tmp++;
}
FetchABCD=~Tmp; Flag &= ~2; FetchStep++;
}
void FetchOneLine2(unsigned char pLine)
{
unsigned char i,j,k,Tmp,m,n;
Flag &= ~(fgFound+fgReturn);
for(n=m=i=j=k=0; j<(sizeof(LineBuf)*8); j++)
{
Tmp *= 2;
if( CacheBuf[i]==0xD )
{
Flag |= fgReturn;
}
if( CacheBuf[i]>0xA0 )
{
if( !(Flag&fgFound) )
{
for(m=CacheBuf[i],k=0; k<(sizeof(HzStr)/2); k++)
{
if( m==HzStr[k].AxChar[0] )
{
if( CacheBuf[i+1]==HzStr[k].AxChar[1] ) break;
}
}
Flag |= fgFound; m=0;
}
if( (HzCode12x12[k][(pLine*3+m/4)/2] & BitMask[2+((m+((pLine&1)?4:0))&7)]) ) Tmp++;
if( ++m>=12 )Flag&=~fgFound;
}
else if( !(Flag&fgReturn) && (j%6) )
{
if( (Small_Alpha_Code6x8[CacheBuf[i]-0x20][(j%6)-1] & BitMask[pLine]) ) Tmp++;
}
if( !((j+1)%6) && !(Flag&fgReturn) )i++;
if( !((j+1)&7) )LineBuf[n++]=Tmp;
}
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -