在项目开发中,经常要使用打印机,打印出检测的结果,在本项目中使用的是惠普打印机,输出结果打印在A4纸上面。
本次使用U2P-016串口打印模块和惠普激光打印机P1106,编写了600行代码就搞定了,哈哈。先上图
程序下载地址
https://pan.baidu.com/s/1ilHuUY7zGis3m18IqwJTLQ
硬件使用的是LPC1768(串口和定时器)和U2P-016串口打印模块
软件使用的是Keil MDK
U2P-016串口打印模块可以控制惠普的很多款打印机,比如激光打印机P1106,P1108,HP1020,M101-M106,M403,M1213nf,喷墨打印机DeskJet_1110/1111/1112等。
1、可以实现画点、画线、画圆等基本操作,还可以画贝赛尔曲线;
2、实现图形填充,图片打印等功能;
3、支持汉字打印,TRUETYPE字库;
3、高速USB接口连接,打印速度快;
4、UART接口,操作简单,波特率115200bit/s;
程序流程如下
底层函数
函数名 | 函数说明 |
time_init() | 定时器初始化,实现1ms定时,并产生中断 |
tick_add() | 定时器中断中调用 |
get_tick_count() | 获取当前的时钟 |
time_elapsed() | 计算超时 |
uart_init() | 串口初化,发送用阻塞模式,接收用中断方式 |
uart_send() uart_printf() | 串口发送字符串 |
与打印相关的函数
函数名 | 函数说明 |
int print_send_data(char *buffer,int timeout) | 发送要打印的指令 输入参数buffer 要发送的指令 timeout 指令接收的超时时间 |
int print_get_state(char *res) | 接收打印模块的应答信号 输入参数res,打印模块返回的字符串 |
int print_get_finish() | 等待本次打印结束 |
程序在我的资源库里面
https://download.csdn.net/download/wangzdq/10786442
补充说明如下。
U2P-016的指令分类如下
指令分类 | 说明 | C语言格式 | C语言示例 |
控制指令 | 完成对打印机的检测和配置 | "C+XXX\r\n" | "?C+PRNS\r\n ",检测打印机状态,?表示要求有应答 |
打印指令 | 与打印操作相关的设置,与打印机型号无关 | "P+XXX\r\n" | "?P+STAT\r\n ",查询当前打印的进度,?表示要求有应答 |
文件管理指令 | 对指令文件和图片文件进行管理 | "F+XXX\r\n" | "?F+NEWF\r\n ",新建一个指令文件,?表示要求有应答 |
绘图指令 | 完成文字的输入和图形的绘制 | ":XXX XXX\r\n" | "?:201 50-50-88\r\n" 画圆,中心坐标是(50,50),半径是88 , ?表示要求有应答 |
U2P-016接收GB2312的编码,如下图