激光打印机的控制技术
激光打印机是目前最常用输出设备之一,和热敏、喷墨打印机相比具有显著的优点,下面介绍用ATMEGA128微控制器直接控制激光打印机打印VGA显示器屏幕内容的方法。要控制打印机必须了解打印机命令语言。打印机语言指的是控制打印机工作的命令,它控制打印机如何组织被打印的文档,打印机按照这些命令来处理打印数据,并最终准确的打印出文字与图像。
PCL打印机命令语言
PCL打印机命令语言是世界上应用最为广泛的标准打印机命令语言,由惠普公司开发,支持文字、点阵图像和矢量图形的打印。PCL命令由2个以上的字符组成,总是以控制字符ESC开始,用符合EC 表示,其ASCII码为27,所以PCL命令又被称作ESC序列。当打印机接收到字符EC时,表示开始接收一条控制命令。PCL命令包括“两字符”命令序列和“参数化”命令序列两种ESC序列。
“两字符”命令序列的格式如下:EC X,其中符号X代表ASCII码48~126的字符,即ASCII字符表中“0” 和“~”之间的字符。符号X指示打印机需要进行的操作,例如命令“EC E”是打印机复位命令,命令“EC g”把纸张的左边距和上边距复位成默认值。“参数化”命令序列格式如下:EC X y z1 # z2 # z3 ... # Zn[data] ,其中EC为起始字符,X是参数化字符,代表ASCII码33~47之间字符,其作用是指明该序列是“参数化”序列;y为组字符,代表ASCII码96~126之间字符,用来指定待执行的操作属于什么组;#是数值域,其范围从-32767到65535;z i是本命令的参数,代表ASCII码从96~126之间字符,该参数用于组合的“参数化”序列,非组合序列则不用,其作用是指定前面的数值域所用的参数;Zn是结束字符,表示“参数化”命令序列结束;[data] 是传送到打印机的待打印数据,用8个bit表示,即为0~255之间任意数据。下面两例分别是非组合的“参数化”命令序列和组合的“参数化”命令序:1 2
1是非组合序列,不含参数。2是组合序列,由序列EC &l1O 和 EC&l2A组合而成,其中小写的字符“o”是该序列的参数[4]。各种命令序列的详细说明见参考文献[4]。
打印屏幕
ATMEGA128单片机的IO口和激光打印机的并口由如下信号连接: Strobe、Busy、GND、D0~D7共11根信号线。其中D0~D7是数据线,单片机通过数据线把控制打印机的PCL命令和待打印数据传送到打印机;Busy信号线指示打印机状态是否繁忙;Strobe 信号线是选通控制线,单片机在Strobe 信号线上输出一个低电平脉冲即可把D0~D7上的数据写人打印机。在论文的第一部分曾经提到,VGA显示器所显示的内容存储在SRAM显存中,每一个bit代表一个象素,因此打印屏幕就是把显存中的数据打印出来。ATMEGA128单片机首先发送PCL语言的打印机设置命令,对打印进行设置,然后即可传送打印数据。其步骤如下:1、发打印机复位命令;2、发设置纸张大小命令;3、发设置打印的起始位置命令;4、发设置分辨率命令;5、发设置打印机为点阵图形模式命令;5、传送要打印的数据;6、发结束图形模式命令;7、发换页指令,打印当前页。下面是ATMEGA128单片机对HP LASERJET6L激光打印机发送PCL命令,并控制打印机打印输出VGA屏幕信息的例程:
void print()
{unsigned int M; unsigned char i;
unsigned char xdata *p;p=NVRS;
out(27);out(''E'');//打印机复位
out(27); pprint("&l26A");// 设置纸张为A4
out(27); pprint("*p210X");// ''设置本页打印的X坐标起始位置
out(27); pprint("*p400Y");// ''设置本页打印的Y坐标起始位置
out(27); pprint("*t100R");// ''设置分辨率
out(27); pprint("*r1A");// ''设置图形模式开始
for(M=0;M<480;M++) //传送要打印的图形数据
{ out(27); pprint("*b80W");
…………
out(27); pprint("*rC"); // ''图形模式结束
out(255); out(12);//''本页结束,执行打印