1. 程式人生 > >串列埠控制惠普印表機

串列埠控制惠普印表機

在專案開發中,經常要使用印表機,打印出檢測的結果,在本專案中使用的是惠普印表機,輸出結果列印在A4紙上面。

本次使用U2P-016串列埠列印模組和惠普鐳射印表機P1106,編寫了600行程式碼就搞定了,哈哈。先上圖

硬體使用的是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()

等待本次列印結束

是程式見附件

補充說明如下。

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的編碼,如下圖