基于单片机的喷墨打印机控制技术.docx
《基于单片机的喷墨打印机控制技术.docx》由会员分享,可在线阅读,更多相关《基于单片机的喷墨打印机控制技术.docx(19页珍藏版)》请在冰点文库上搜索。
基于单片机的喷墨打印机控制技术
目录
第1节引言……………………………………………………………………………3
1.1喷墨打印机控制技术概述…………………………………………………3
1.2本设计任务和主要内容……………………………………………………4
第2节系统主要硬件电路设计………………………………………………………5
2.1单片机控制系统原理………………………………………………………5
2.1.1CENTRONICS接口标准………………………………………………5
2.1.2硬件设计……………………………………………………………5
2.2单片机主机系统电路……………………………………………………6
2.2.1AT89C52高性能8位单片机…………………………………………6
2.2.2功能特性概述………………………………………………………7
2.2.3AT89C52内部结构各引脚功能说明…………………………………8
2.2.4两种工作模式………………………………………………………11
2.362256数据存储器…………………………………………………………12
2.3.162256引脚管脚功能………………………………………………12
2.3.262256存储器有三种工作方式……………………………………12
2.3.3MCS-51扩展62256的电路连接方法……………………………13
第3节系统软件设计…………………………………………………………………14
3.1打印机的控制方法……………………………………………………………14
3.2控制程序设计…………………………………………………………………16
第4节结束语…………………………………………………………………………16
参考文献…………………………………………………………………………22
基于单片机的喷墨打印机控制技术
数理与信息工程学院07计算机专升本张珍珍
指导教师:
余水宝
第1节引言
近几年来,电脑走进人们的工作和生活已经渐成时尚了。
随着应用地不断深入,大家已经不再满足于只能在屏幕上显示文档和图片的方式了,而更希望能够看到打印在纸张上的效果,于是打印机在市场上开始热销起来。
目前市场上常见的打印机有三大类:
针式、喷墨和激光打印机。
针式打印机已经过了辉煌期,逐渐步入黄昏;而激光打印机虽然价格在不断下降但和主流的彩喷相比还是有一定差距,而且如果要用彩色的话价格就又会高出好多。
如此来看,喷墨打印机最近红透半边天的情况也就不足为怪了。
喷墨打印机是在针式打印机之后发展起来的,采用非打击的工作方式。
比较突出的优点有体积小、操作简单方便、打印噪音低、使用专用纸张时可以打出和照片相媲美的图片等等。
经过若干年的磨练,喷墨打印机的技术已经取得了长足地发展。
由于单片机具有简单实用、高可靠性、良好的性能价格比以及体积小等优点,已经在各个技术领域得到了迅猛发展。
本文介绍了以MCS-51系列单片机为核心,通过CENTRONICS国际标准8位并行接口控制驱动HP-DJ600/800系列喷墨打印机的硬件接口电路设计方法及控制程序设计方法,以便更好地了解和掌握单片机对外部接口的一般和一些特殊功能的应用。
1.1喷墨打印机控制技术概述
单片机应用系统中最常用的输出打印设备是微型打印机,例如TP系列、UP系列打印机等,对它们的控制技术也较为成熟。
但是近年来随着通用打印机的广泛使用,微型打印机的缺点也日益明显:
一是通用性及互换性不强;二是打印输出文档的幅面过小,不便于装订及存档。
而通用打印机都配有国际标准并行接口(CENTRONICS)和串行接口(RS232/422),纸张大小可任意选择。
这些特点是微型打印机所无法抗衡的。
因此在越来越多的单片机应用系统中逐渐趋向于使用通用打印机作为打印输出设备。
C51单片机是我们生活中最常用的系列,MCS-51系列单片机有4个并行口(P0,P1,P2,P3口),但对一个稍微复杂的应用系统来说,真正可供用户使用的并行口,只有P1口可用,况且常常因扩展外部器件需占用某些P1口,迫使用户不得不扩展并行口以满足实际的需要。
习惯上,常用的并行口接口芯片有8255、8155,这两种芯片功能比较齐全,可以使用在相对比较复杂的系统中,但如是对一般的系统而言,这些功能往往闲置不用。
以下介绍一种采用MCS51系列单片机控制驱动HewlettPackardDESKJET600/800系列喷墨打印机的硬件接口设计和软件设计方法,以控制打印机实现表格打印功能为例,给出了用C51语言编写的一系列相关基本控制程序。
1.2本设计任务和主要内容
本论文主要研究单片机控制的喷墨打印机控制系统,分别对喷墨打印机控制技术及系统设备的软、硬件各个部分进行了研究。
主要内容如下:
1喷墨打印机控制系统原理及电路图的设计
2根据喷墨打印机控制的特点,进行喷墨打印机控制系统的整体研究与设计。
3程序的实现:
数据发送程序、初始化程序、设定表格的宽度和长度的积、将表格打印出来
第2节系统主要硬件电路设计
2.1单片机控制系统原理
2.1.1 CENTRONICS接口标准
HP-DJ600/800系列喷墨打印机采用与/CENTRONICS标准兼容的并行打印机接口,接口各引脚信号的定义如表2-1所示。
表2-1 CENTRONICS接口信号
引脚号
信号
方向
说明
1
STB
输入
数据选通触发脉冲
2~9
D0~D7
输入
数据线
10
ACK
输出
应答脉冲
11
BUSY
输出
“忙”信号
13
SEL
输出
打印机在线
14
ERR
输出
故障指示
12、18~25
GND
--
接地
2.1.2 硬件设计
本着统一编址控制的原则,硬件原理如图2-1所示。
图2-1单片机控制系统原理框图
本设计采用MCS-51系列的89C52型单片机,其内部有8K字节的程序存储器,尽可满足本设计的程序、表格的存储要求。
在外部扩展了一片数据存储器62256作为打印数据缓冲区,RAM62256的存储容量为32K字节,可以存放大量的打印数据。
从原理框图可看出,RAM62256的片选/CS端由单片机的P2.7口控制,因此RAM的地址范围为:
0000H~7FFFH。
本设计采用查询方式进行打印驱动控制,单片机与打印机的接口包括如下内容:
(1)单片机的八位数据线通过74LS377锁存后与打印机的八位数据线相连,传送打印数据。
单片机的P2.7口通过74LS04反相后与74LS377的/G端相连,因此单片机向打印机传送数据的口地址为8000H。
(2)单片机的P1.0口提供数据选通信号,它与打印机STB端连接,进行将打印数据送打印机的选通控制。
(3)单片机的P1.1口接打印机的BUSY端,以BUSY信号作为打印机“忙”或“闲”状态查询信号。
2.2单片机主机系统电路
2.2.1 AT89C52高性能8位单片机
兼容标准MCS-51指令系统的AT89C52单片机是美国ATMEL公司生产的一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可为您提供许多高性低比的系统控制应用领域。
AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,也可以在线编程。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
AT89C52有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应不同产品的需求。
下图2-2为以PDIP封装形式的AT89C52芯片引脚图
图2-2单片机AT89C52芯片引脚图
2.2.2功能特性概述
·AT89C52与MCS-51系列的单片机在指令系统和引脚上完全兼容;
·片内有8k字节可重擦写Flash闪速存储器;
·全静态工作,工作范围:
0Hz~24MHz;
·1000次擦写周期;
·三级加密程序存储器;
·256×8字节内部RAM;
·32个可编程I/O口线;
·3个16位定时/计数器;
·8个中断源;
·可编程串行UART通道;
·低功耗空闲和掉电模式;
·软件设置睡眠和唤醒功能;
·片内振荡器及时钟电路。
2.2.3AT89C52内部结构各引脚功能说明
图2-3AT89C52内部结构图
·Vcc:
电源电压
·GND:
地
·P0口:
P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。
作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口P0写“1”时,可作为高阻抗输入端用。
在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。
在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。
·P1口:
P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。
作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
与AT89C51不同之处是,P1.0和P1.1还可分别作为定时/计数器2的外部计数输入(P1.0/T2)和输入(P1.1/T2EX),参见表2-2。
Flash编程和程序校验期间,P1接收低8位地址。
表2-2P1.0和P1.1的第二功能
引脚号
功能特性
P1.0
T2(定时/计数器2外部计数脉冲输入),时钟输出
P1.1
T2EX(定时/计数器2捕获/重装载触发和方向控制)
·P2口:
P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口P2写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。
在访问8位地址的外部数据存储器(如执行MOVX@RI指令)时,P2口输出P2锁存器的内容。
Flash编程或校验时,P2亦接收高位地址和一些控制信号。
·P3口:
P3口是一组带有内部上拉电阻的8位双向I/O口。
P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。
此时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。
P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,如下表2-3所示:
表2-3P3口工作的第二功能时各管脚定义表
此外,P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。
图2-4P0、P1、P2、P3共四个八位口的结构图
·RST:
复位输入。
当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。
·ALE/PROG:
当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。
一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。
要注意的是:
每当访问外部数据存储器时将跳过一个ALE脉冲。
对Flash存储器编程期间,该引脚还用于输入编程脉冲(PROG)。
如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。
该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。
此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。
·/PSEN:
程序储存允许(/PSEN)输出是外部程序存储器的读选通信号,当AT89C52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲。
在此期间,当访问外部数据存储器,将跳过两次/PSEN信号。
·EA/VPP:
外部访问允许。
欲使CPU仅访问外部程序存储器(地址为0000H—FFFFH),EA端必须保持低电平(接地)。
需注意的是:
如果加密位LB1被编程,复位时内部会锁存EA端状态。
如EA端为高电平(接Vcc端),CPU则执行内部程序存储器中的指令。
Flash存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。
·XTAL1:
振荡器反相放大器的及内部时钟发生器的输入端。
·XTAL2:
振荡器反相放大器的输出端。
2.2.4两种工作模式
·空闲节电模式:
在空闲工作模式状态,CPU自身处于睡眠状态而所有片内的外设仍保持激活状态,这种方式由软件产生。
此时,同时将片内RAM和所有特殊功能寄存器的内容冻结。
空闲模式可由任何允许的中断请求或硬件复位终止。
由硬件复位终止空闲状态只需两个机器周期有效复位信号,在此状态下,片内硬件禁止访问内部RAM,但可以访问端口引脚,当用复位终止空闲方式时,为避免可能对端口产生意外写入,激活空闲模式的那条指令后一条指令不应是一条对端口或外部存储器的写入指令。
·掉电模式:
在掉电模式下,振荡器停止工作,进入掉电模式的指令是最后一条被执行的指令,片内RAM和特殊功能寄存器的内容在终止掉电模式前被冻结。
退出掉电模式的唯一方法是硬件复位,复位后将重新定义全部特殊功能寄存器,但不改变RAM中的内容,在Vcc恢复到正常工作电平前,复位应无效,且必须保持一定时间以使振荡器重启动并稳定工作。
2.3数据存储器62256
单片机内部的RAM为128B(或256B),有的单片机应用系统需要扩展外部数据存储器RAM(如数据采集系统数据量较大,需要专设RAM或FlashRAM)。
最常用的RAM器件是静态RAM(SRAM)6264、6264、62128、62256。
2.3.162256引脚管脚功能
图2-562256引脚图
引脚符号的含义和功能如下:
D7~D0:
双向三态数据总线;
A0~A14:
地址输入线;
(CS):
片选信号输入端,低电平有效;
OE:
读选通信号输入线,低电平有效;
WE:
写选通信号输入线,低电平有效;
Vcc:
电源+5V;
GND:
地。
2.3.262265存储器有三种工作方式
数据的读出、写入和维持,其操作控制如下表2-4所示。
表2-462256存储器操作控制
2.3.3MCS-51扩展62256的电路连接方法
数据线:
P0口接RAM的D0~D7;
地址线:
62256容量为32KB,215=32KB,需要A0~A14共15根地址线。
P0口经地址
锁存器后接RAM的A0~A7;P2.0~P2.6接RAM的A8~A14。
控制线:
ALE接373的LE,RD接RAM的OE、WR接RAM的WE,只有一片RAM,且系统无其他I/O接口及外围设备扩展,片选CE可以接地。
扩展电路如图2-6所示。
图2-662256扩展电路图
62256的地址范围为:
0000H~7FFFH。
注意:
74LS373的OE和RAM62256的CE。
第3节单片机驱动控制打印机系统的软件设计
3.1打印机的控制方法
系统上电后,当需要打印的数据出现在数据线上时,只要主机向打印机的STB端发一个负脉冲,就把数据送入了打印机。
本设计对打印机的控制采取查询等待方式。
首先主机读打印机BUSY线,如果BUSY为高电平则表示打印机正“忙”,禁止接收数据,需等待。
当打印机取走数据并处理完毕后,BUSY线被置为闲(低电平),同时输出应答脉冲ACK通知主机,可以再次输入数据。
控制时序如图3-1所示。
图3-1打印机接口时序图
STB为数据选通信号,打印机在其上升沿时读入数据。
当主机发送数据后,需要有0.5us以上的延时才能向STB线发负脉冲,即图2中的t1值不小于0.5us;当STB信号从高电平变为低电平后,要保证负脉冲的宽度,亦即图2中的t2值不小于0.5us;当STB信号从低电平变为高电平后,要保证有0.5us以上的延时,亦即图2中的t3值不小于0.5us,以确保打印机将数据可靠读入。
控制流程见图3-1所示。
图3-2数据发送控制流程图
无论打印机打印输出的是文字还是图形,主机向其发送的皆是一系列以字节为单位的数据,因此如何向打印机发送数据是关键所在。
以下为一数据发送程序实例,其功能是将一个字节数据发送给打印机。
Voidprint_one(charch)//ch为待发送的数据
{
While(P1_1);//读打印机状态,BUSY=1?
为1,等待
P1_0=1; //置STB为1
*(charxdata*)0x8000=ch;//输出数据到打印机
P1_0=0; //置STB为0
_nop_();
_nop_()//延时,等待数据发送完毕
P1_0=1; //置STB为1
}
3.2控制程序设计
HP-DJ600/800系列喷墨打印机使用HPPCLLEVEL3语言,而在单片机控制系统中使用十六进制代码。
因此在以下程序设计中,将PCL命令全部替换为用十六进制代码表示。
在单片机实时控制系统中,打印机最常用的功能是将控制系统的测试结果打印出来。
下面通过如何实现一张表格的打印来具体说明单片机控制驱动喷墨打印机的软件设计方法。
需要打印的表格如表3-1所示。
首先在Windows界面的“附件”的“画图”中制作好如表3-1的表格,将其保存为文件名:
REPORT.BMP,并且在向单片机的程序存储器中烧写程序代码时将此BMP文档代码一并写入,存放在以BMP_ADDR为起始地址的程序区内。
BMP_ADDR的值由所制作的表格大小决定,表格的宽度和长度分别用paper_width和paper_length表示。
表3-1需打印的表格
测试项目
技术指标
实测值
+5V电源
+5V±0.2V
+15V电源
+15V±0.3V
-15V电源
-15V±0.3V
+20V
电源+20V±0.5V
由流程图3-2可看出,首项工作是由主机向打印机发送命令,利用软件实现打印机的初始化。
初始化的内容包括纸张型号、文本长度、上下边距、左右边距的设置等。
在本设计中初始化程序如下:
Voidinit_print()
{
uchari;
charcodecommand[57]=
{
0x1b,0x45, //打印机复位
0x1b,0x2a,0x62,0x32,0x42,
0x1b,0x26,0x6c,0x30,0x6f,//图形方式
0x32,0x36,0x61, //图幅为A4
0x30,0x6d, //普通纸
0x31,0x6c, //允许设计上下边距
0x38,0x64, //垂直行距:
8行/英寸
0x39,0x33,0x70, //页长为11.67inch×8=93cpi
0x36,0x65 //上边距为0.75inch×8=6cpi
0x37,0x37,0x46, //正文长(11.67-0.75-1.25)×8=77cpi
0x1b,0x28,0x73,0x30,0x70, //字间距固定
0x31,0x32,0x48, //12cpi
0x1b,0x26,0x61,0x39,0x6c, //左边距=0.75inch
0x39,0x30,0x4d,
0x1b,0x2a,0x72,0x31,0x75, //单色
0x31,0x41,
0x1b,0x2a,0x62,0x30,0x4d,
}
For(i=0;i<57;i++)print_one(command[i]);
}
图3-2表格打印控制流程图
打印机初始化完成后,将打印缓冲区清零。
这个打印缓冲区实际上就是位于外部RAM62256内的一段存储区域,RAM62256的地址范围是0000H~7FFFH,在本设计中将打印缓冲区的首地址定义为0000H。
为了书写方便在以下的程序中用PRINT_BUF表示这个地址值。
接着将ROM中以BMP_ADDR为首址的内容读出并写入首址为PRINT_BUF的打印缓冲区内,其代码长度即所设定表格的宽度和长度的积。
具体程序如下:
Voidread_bmp()
{
uinti;
ucharxdata*p;
ucharxdata*q;
p=PRINT_BUF;
q=BMP_ADDR;
for(i=0;i{*p=*q;p++;q++;}
}
打印数据全部存入打印缓冲区后,只要主机向打印机发开始打印命令,将打印缓冲区内的数据按字节依次发往打印机,一张符合要求的表格即打印出来了。
具体程序如下:
Voidprint_report()
{
chari;
uintj;
ucharxdata*p;
charcodecommand1[]={0x1b,0x2a,0x62,0x36,0x34,0x57};
//开始打印控制命令
charcodecommand2[]={0x1b,0x2a,0x72,0x43,0x1b,0x45};
//结束打印控制命令
Init_print(); //初始化打印机
Clear_print_buf(); //清打印缓冲区
Read_bmp(); //读入打印缓冲区
p=PRINT_BUF;
for(j=0;j{
for(i=0;i<6;i++)print_one(command1[i]);
for(i=0;i}
for(i=0;i<6;i++)print_one(command2[i];
}
结束语
通过本次基于单片机应用的课程设计,首先我深刻认识到它的应用广泛,几乎涉及到各个领域,尤其是在数码电器产品中,占据了主导地位。
对于它的性价比方面,也有诸多的优势,因此深受消费者的欢迎。
从这次设计过程中,我体会到这不仅仅是一种理论的应用,它更加强调的是理论与实践的结合,在于硬件与软件的结合,不能忽略每一个环节。
虽然这次的课程设计中,大部分的资料都是参考已有的资料,但是让我有机会巩固和学习一些与专业知识有关知识,提升自我的学习和思考能力,培养自我创新能力,活跃思维