
热线电话:
0755-28895103
销售热线:
0755-28895355
单片机微型打印机程序—shenzhen masung technology company limited-pg电子直营站
单片机微型打印机程序
//-----------------------函数声明--------------------------------------------------------
#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 //检查打印机是否在线
void uart_sendstring(unsigned int len,unsigned int *str);
void printer_english(unsigned int leng,unsigned int *string);
void printer_char(unsigned int length,unsigned int *cha);
//-----------------------定义各命令字--------------------------------------------------------
#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) //执行水平造表:0x09。
#define setting_rowlg() send_byte(0x0e) //一行内倍宽度打印:0x0e。
#define cancel_rowlg() send_byte(0x14) //撤除一行内倍宽度打印:0x14。
#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)
//允许/禁止反白打印:0x1b-0x69-n
//n=1,允许反白打印
//n=0禁止反白打印
#define anti_white[n] send_2byte(0x1b,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;
delay(5);
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++);
}
}
/*************************** 延时凾数 ********************
* 名称: delay
* 说明:
* 功能: 延时
* 调用:
* 输入: temp 延时系数
* 返回值: 无
*********************************************************************/
void delay(char temp)
{
char j;
while (temp--)
{
for (j=0 ; j <= 50; j++);
}
return;
}
//--------------------------------------------------------
// 函数名称 :void uart_sendstring(uchar len,uchar *str)
// 函数功能 :并口输出字符串
// 入口参数 :length为汉字码组长度 str为机内码首地址
// 出口参数 :无
//--------------------------------------------------------
void uart_sendstring(uchar len,uchar *str)
{
uchar i=0;
while(i)
{
while(!ti);
sbuf=*str++;
ti=0;
i++;
}
}
//--------------------------------------------------------
// 函数名称 :void printer_english(uchar leng,uchar *string)
// 函数功能 :打印机普通方式初始化
// 入口参数 :leng 打印的字符长度
// string 打印的字符串
// 出口参数 :无
//--------------------------------------------------------
void printer_english(uchar leng,uchar *string)
{
printer_init() ;//初始化打印机
select_muster1();//选择字符集1
setting_hzmode(3);//选择8*8点阵
anti_white[0];//禁止反白
uart_sendstring(leng,string);
}
//--------------------------------------------------------
// 函数名称 :void printer_char(unsigned int length,unsigned int cha)
// 函数功能 :打印机汉字打印方式初始化
// 入口参数 :length为汉字码组长度 cha为机内码首地址
// 出口参数 :无
//--------------------------------------------------------
void printer_char(unsigned int length,unsigned int *cha)
{
printer_init() ;//初始化打印机
enter_hangzimode();//选择汉字打印方式
setting_hzmode(3);//选择8*8点阵
anti_white[0];//禁止反白
uart_sendstring(length, cha);
uart_sendstring(2,exit_ch);
}
//--------------------------------------------------------------------------------------------------
// 函数名称: main
// 函数功能: 主函数
//--------------------------------------------------------------------------------------------------
main()
{
uchar data1[]{0x20,0x20,0x54,0x45,0x53,0x54,0x20,0020,0052,0x45,0x50,
0x4f,0x52,0x54,};
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);
}
//-----------------------函数声明--------------------------------------------------------
#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 //检查打印机是否在线
void uart_sendstring(unsigned int len,unsigned int *str);
void printer_english(unsigned int leng,unsigned int *string);
void printer_char(unsigned int length,unsigned int *cha);
//-----------------------定义各命令字--------------------------------------------------------
#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) //执行水平造表:0x09。
#define setting_rowlg() send_byte(0x0e) //一行内倍宽度打印:0x0e。
#define cancel_rowlg() send_byte(0x14) //撤除一行内倍宽度打印:0x14。
#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)
//允许/禁止反白打印:0x1b-0x69-n
//n=1,允许反白打印
//n=0禁止反白打印
#define anti_white[n] send_2byte(0x1b,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;
delay(5);
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++);
}
}
/*************************** 延时凾数 ********************
* 名称: delay
* 说明:
* 功能: 延时
* 调用:
* 输入: temp 延时系数
* 返回值: 无
*********************************************************************/
void delay(char temp)
{
char j;
while (temp--)
{
for (j=0 ; j <= 50; j++);
}
return;
}
//--------------------------------------------------------
// 函数名称 :void uart_sendstring(uchar len,uchar *str)
// 函数功能 :并口输出字符串
// 入口参数 :length为汉字码组长度 str为机内码首地址
// 出口参数 :无
//--------------------------------------------------------
void uart_sendstring(uchar len,uchar *str)
{
uchar i=0;
while(i)
{
while(!ti);
sbuf=*str++;
ti=0;
i++;
}
}
//--------------------------------------------------------
// 函数名称 :void printer_english(uchar leng,uchar *string)
// 函数功能 :打印机普通方式初始化
// 入口参数 :leng 打印的字符长度
// string 打印的字符串
// 出口参数 :无
//--------------------------------------------------------
void printer_english(uchar leng,uchar *string)
{
printer_init() ;//初始化打印机
select_muster1();//选择字符集1
setting_hzmode(3);//选择8*8点阵
anti_white[0];//禁止反白
uart_sendstring(leng,string);
}
//--------------------------------------------------------
// 函数名称 :void printer_char(unsigned int length,unsigned int cha)
// 函数功能 :打印机汉字打印方式初始化
// 入口参数 :length为汉字码组长度 cha为机内码首地址
// 出口参数 :无
//--------------------------------------------------------
void printer_char(unsigned int length,unsigned int *cha)
{
printer_init() ;//初始化打印机
enter_hangzimode();//选择汉字打印方式
setting_hzmode(3);//选择8*8点阵
anti_white[0];//禁止反白
uart_sendstring(length, cha);
uart_sendstring(2,exit_ch);
}
//--------------------------------------------------------------------------------------------------
// 函数名称: main
// 函数功能: 主函数
//--------------------------------------------------------------------------------------------------
main()
{
uchar data1[]{0x20,0x20,0x54,0x45,0x53,0x54,0x20,0020,0052,0x45,0x50,
0x4f,0x52,0x54,};
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);
}