單片機系統制作微型打印機的源程序及方案
//單片機系統打印機程序思路如下:
// 打印規格(16×16點陣),打印機執行單片機n點行走紙指令:0x1B-0x4A-n。向前走n點行,n的值是1-255范圍內。
//設置 n點行間距:0x1B-0x31-n。n的值是0-255之間,
//在使用ESC/K命令打印點陣圖形時,通常設置n=0。文本打印時通常設置n=3。
//-----------------------函數聲明--------------------------------------------------------
#include"stdio.h"
#include"absacc.h"
#include"reg51.h"
//-----------------------LCD接口管腳聲明--------------------------------------------------------
sbit STB=P3^0; //輸出,數據選通觸發脈沖上升沿時讀入數據。
sbit BUSY=P3^1; //輸入,"高"表示打印機正"忙",不能接收數據。
sbit ACK=P3^2; //輸入,應答脈沖"低"電平表示數據已被接收而且已準備好接收下一個數據。
sbit ERR=P3^3; //輸入,經電阻上拉"高"電平,表示打印機無故障。
sbit SEL=P3^4; //輸入,經電阻上拉"高"電平,表示打印機在線。
#define DATA_OUT P1 //P1為數據端口
bit printer_ERR=0; //打印機故障標志:0表示正常,1表示故障
bit printer_online=1; //打印機在先標志:1表示在線,0表示離線
#define check_ERR() printer_ERR=~ERR //檢查打印機是否出錯
#define check_online() printer_online=SEL //檢查打印機是否在線
//-----------------------定義各命令字--------------------------------------------------------
#define printer_init() SEND_2BYTE(0x1B,0x40) //初始化打印機
#define enter_hangzimode() SEND_2BYTE(0x1C,0x26) //進入漢字打印命令:0x1C-0x26。
#define exit_hangzimode() SEND_2BYTE(0x1C,0x2E) //退出漢字打印命令:0x1C-0x2E。
#define setting_LARGEhz() SEND_2BYTE(0x1C,0x0E) //打印的漢字將在橫向放大一倍,縱向不改變。
#define cancel_LARGEhz() SEND_2BYTE(0x1C,0x14)//取消漢字倍寬打?。?。
#define select_muster1() SEND_2BYTE(0x1B,0x36)//選擇字符集1:。
#define select_muster2() SEND_2BYTE(0x1B-0x37)//選擇字符集2:。
#define change_row() SEND_BYTE(0x0A) //換行:。
#define change_page() SEND_BYTE(0xOC) //換頁:。
#define made_CZtable() SEND_BYTE(0x0B) //執行垂直造表:0x0B。
#define made_SPtable() SEND_BYTE(0x09) //執行水平造表:0x0B。
#define setting_rowLG() SEND_BYTE(0x0E) //一行內倍寬度打?。?x0E。
#define cancel_rowLG() SEND_BYTE(0x14) //撤除一行內倍寬度打?。?x14。
#define renew_char_set() SEND_2BYTE(0x1B,0x3A) //恢復字符集中的字符:0x1B-0x3A。
#define enter() SEND_BYTE(0x0D) //回車:0x0D。
#define delete_row() SEND_BYTE(0x18) //刪除一行:0x18。
#define delete_byte() SEND_BYTE(0x7F) //刪除一字節:0x7F。
#define execute_NULL() SEND_BYTE(00) //(4) 空:00。
//設置漢字點陣打印規格(16×16點陣):0x1C-0x69-n
//設定漢字點陣:n=0,16×16點陣
//n=1,8 ×16點陣?
//n=2,16×8點陣
//n=3,8×8點陣。
#define setting_HZmode(n) SEND_2BYTE(0x1C,0x69);SEND_BYTE(n)
// 執行n點行走紙:0x1B-0x4A-n。向前走n點行,n的值是1-255范圍內。
#define goahead_nrow(n) SEND_2BYTE(0x1B,0x4A);SEND_BYTE(n)
//設置 n點行間距:0x1B-0x31-n。n的值是0-255之間,
//在使用ESC/K命令打印點陣圖形時,通常設置n=0。文本打印時通常設置n=3。
#define setting_rowgap(n) SEND_2BYTE(0x1B,0x31);SEND_BYTE(n)
//--------------------------------------------------------------------------------------------------
// 函數名稱: SEND_BYTE
// 入口參數: ndata
// 函數功能: 送出1BYTE數據
//--------------------------------------------------------------------------------------------------
void SEND_BYTE(unsigned char ndata)
{
STB=1;
while(BUSY);
DATA_OUT=ndata;
STB=0;
STB=1;
}
//--------------------------------------------------------------------------------------------------
// 函數名稱: SEND_2BYTE
// 入口參數: ndata1,ndata2
// 函數功能: 送出1BYTE數據
//--------------------------------------------------------------------------------------------------
void SEND_2BYTE(unsigned char ndata1,ndata2)
{
SEND_BYTE(ndata1);
SEND_BYTE(ndata2);
}
//--------------------------------------------------------------------------------------------------
// 函數名稱: SEND_nBYTE
// 入口參數: ndata
// 函數功能: 送出1BYTE數據
//--------------------------------------------------------------------------------------------------
void SEND_nBYTE(unsigned char n,unsigned char *ndata)
{
while(n--)
{
SEND_BYTE(*ndata++);
}
}
//--------------------------------------------------------------------------------------------------
// 函數名稱: main
// 函數功能: 主函數
//--------------------------------------------------------------------------------------------------
main()
{
unsigned char ndata[]="I love DPJ";
check_ERR(); //檢查打印機是否出錯
check_online(); //檢查打印機是否在線
while(printer_ERR==0&&printer_online);
printer_init(); //初始化打印機
SEND_nBYTE(11,ndata);
SEND_2BYTE(0x0D,0x0D);
}
-
單片機
+關注
關注
6023文章
44376瀏覽量
628367 -
微型打印機
+關注
關注
0文章
11瀏覽量
7955
發布評論請先 登錄
相關推薦
評論