|
KC-501系列微型打印驱动模块支持EPSON M-150II微型针式打印机芯,可广泛适用于仪器仪表、机电设备等。它具有尺寸小巧,集成度高,功能完善,全SMT贴片工艺,操作简单,连接方便等特点。
产品特色: 主要性能: 型号说明:
基本尺寸
接口描述电源连接
并行口引脚说明 IDC26并行接口与Centronics标准并行口兼容,可直接由微机DB25并口或单片机控制。下表描述了打印板IDC26接口和微机DB25并口的引脚功能及对应关系。
#Stb:数据选通触发脉冲。上升沿时读入数据。 并行口时序图
|
驱动模块 |
打印机 |
1 |
11 |
2 |
10 |
3 |
9 |
4 |
8 |
5 |
7 |
6 |
6 |
7 |
5/4 |
8 |
|
9 |
2 |
10 |
1 |
KC-501提供的打印命令与传统ESC打印命令完全兼容。
用户可通过并行或串行接口,向KC-501发送数据,实现打印机设置、打印格式设置和数据打印等功能。用户发送的数据分为“可打印字符”、“ESC/POS兼容指令”两大类。
“可打印字符”指打印机最终打印到卷纸上的字符,包含可打印的12*6点阵ASCII西文字符和12*12点阵中文字符,或16*8点阵ASCII西文字符和16*16点阵中文字符。
“ESC/POS兼容指令”指控制码和以ESC码开头的不可打印的控制码序列构成。
KC-501集成了标准ASCII字符字库,共95个可打印字符,详见附录。
以12*6点阵为例,每个字符包含12行6列个点,例如:

以16*8点阵为例,每个字符包含16行8列个点,例如:

要打印标准ASCII字符,向KC-501发送单字节ASCII码即可,ASCII码值应在0x20~0x7E(32~126)之间。
KC-501集成了国标一级、二级中文字库,符合国家标准GB2312-80规定的全部一、二级汉字、图形和符号等,包含682个符号、6763个汉字。
它们分别是:
一般符号202个,如间隔符、标点、运算符、单位符号及制表符
序号60个,如⒈~⒛、⑴~⒇、①~⑩、㈠~㈩
数字22个,如0~9、Ⅰ~Ⅻ
英文字母52个,其中26个大写A~Z、26个小写a~z
日文平假名83个
日文片假名86个
希腊字母48个
俄文字母66个
汉语拼音符号a~z共26个
汉语拼音字母37个
3755个一级常用汉字
3008个二级汉字区
以12*12点阵为例,每个字符包含12行12列个点,例如:

以16*16点阵为例,每个字符包含16行16列个点,例如:

要打印12*12点阵中文字符,向KC-501发送2字节的机内码即可。汉字机内码的高、低位字节的取值范围为0xA1~0xFE(161~254)。
“ESC/POS兼容指令”由不可打印的控制码,和以ESC码开头的控制码序列构成。
不可打印的控制码一般是0x00~0x1F(0~31)之间的ASCII码,例如:VT(ASCII码值为0x08),FF(ASCII码值为0x0C),CR(ASCII码值为0x0D)等。
控制码序列由:1个ESC,1个或多个控制码,0个或1个NUL码组成。可能的组合为:
ESC+控制码1
ESC+控制码1+控制码2+……
ESC+控制码1+控制码2+……+NUL
本驱动模块在参考了流行的IBM和EPSON打印机基础上设计,能和大多数的打印机兼容。绝大多数指令对西文字符和中文字符都有效。
本驱动模块提供了多种“ESC/POS兼容指令”,按类别可分为:
纸进给命令
格式设置
字符设置
字符图形设置
数据控制
图形打印
当用户向KC-501发送数据时,用户数据首先进入系统缓存。系统缓存用于暂存用户数据,当用户需一次性打印大容量数据,如大幅点阵图或长篇文字时,大容量系统缓存可避免主控机长时间等待,提高主控机执行效率,实现脱机打印的功能。系统缓存的容量需在用户订货时注明。
同时,可打印字符将进入行缓冲器。行缓冲器是用于暂存可打印字符的存储器,可以最大暂存16个12*6点阵西文字符或12个16*8点阵西文字符,和8个12*12点阵中文字符或6个16*16点阵中文字符。
当行缓冲器数据满时,KC-501会自动打印出行缓冲器中的全部字符。
用户可以通过发送“ESC/POS兼容指令”来控制打印输出方式,使得打印机按用户的设计,在卷纸的不同位置打印出字符或图案。
ESC/POS兼容指令集
点行——打印针打印一点的高度。
点列——从打印纸左侧起的打印点列号。对于EPSON M-150II打印机芯,从左至右共可打印96点列。
字行——打印针打印一个字符的高度。对于12*6点阵西文字符、12*12点阵中文字符而言,1字行等于12点行。对于16*8点阵西文字符、16*16点阵中文字符而言,1字行等于16点行。
字间距——字符与字符之间水平间隔的点数。
行间距——字行与字行之间垂直间隔的点行数。
默认值——打印机上电或执行初始化命令后的缺省值。
命令 |
ASCII码 |
LF |
十进制 |
10 |
|
十六进制 |
0x0A |
打印行缓冲器中的所有数据,并走纸一字行。
如果行缓冲器为空,则仅走纸一字行。
效果与回车命令CR一样。
命令 |
ASCII码 |
ESC J n |
十进制 |
27 74 n |
|
十六进制 |
0x1B 0x4A n |
打印机向前进给n点行,1≤n≤255。
如果n=0,则该命令无效。
如果行缓冲器里有未打印的数据,则在走纸前先打印这些数据,再走纸n点行。
【执行n点行走纸】将忽略页长、装订长等格式设置。
命令 |
ASCII码 |
ESC 1 n |
十进制 |
27 49 n |
|
十六进制 |
0x1B 0x31 n |
为后面的换行命令设置n点行间距,0≤n≤255,默认n=2。
在打印西文中文字符时通常设n=2。在打印点阵图时通常设置n=0。
命令 |
ASCII码 |
ESC C n |
十进制 |
27 67 n |
|
十六进制 |
0x1B 0x43 n |
设置页长为n字符行,1≤n≤255,默认n=40。 如果n=0,则该命令无效。
命令 |
ASCII码 |
FF |
十进制 |
12 |
|
十六进制 |
0x0C |
走纸到下一页的开始位置。
如果行缓冲器里有未打印的数据,则换页前先打印这些数据。
命令 |
ASCII码 |
ESC N n |
十进制 |
27 78 n |
|
十六进制 |
0x1B 0x4E n |
装订长是指本页与下一页之间的空白字行数。
设置装订长为n字行,0≤n≤255,默认n=0。
命令 |
ASCII码 |
ESC O |
十进制 |
27 79 |
|
十六进制 |
0x1B 0x4F |
装订长被设置为0字行。当打印到页尾时,打印机将一行接一行的打印,中间不会留出页与页之间空字行。
命令 |
ASCII码 |
ESC B n1 n2 n3…… NUL |
十进制 |
27 66 n1 n2 n3…… 0 |
|
十六进制 |
0x1B 0x42 n1 n2 n3…… 0x00 |
输入垂直造表位置n1,n2,n3……等,最多可输入8个位置,NUL加在最后用以表示该命令结束。
此处nX (X=1, 2, ...)对应字行。例如,若n1=3,则执行垂直造表后,后续打印从第三字行开始。
如果不输入nX (X=1, 2, ...),仅输入|ESC|B|NUL|,则清除之前设置的所有垂直造表位置。
注意:垂直造表位置的设定,应考虑页长因素,以达到预设效果。
命令 |
ASCII码 |
VT |
十进制 |
11 |
|
十六进制 |
0x0B |
打印纸进给到【设置垂直造表位置】设定的造表位置n1,n2,n3……。
如果行缓冲器里有未打印的数据,则先打印这些数据,再【执行垂直造表】。
如果垂直造表位置未设置或已清除,或者当前位置等于或超过垂直造表位置,或者垂直造表位置执行完毕,或者垂直造表位置超过页长,则该命令无效。
【换页】后,垂直造表位置重新从n1开始。
命令 |
ASCII码 |
ESC D n1 n2 n3…… NUL |
十进制 |
27 68 n1 n2 n3…… 0 |
|
十六进制 |
0x1B 0x44 n1 n2 n3…… 0x00 |
输入水平造表位置n1,n2,n3……等,最多可输入8个位置,NUL加在最后用以表示该命令结束。
此处nX (X=1, 2, ...)对应点列。例如,若n1=3,则执行水平造表后,后续打印从第3点列开始。
如果不输入nX (X=1, 2, ...),仅输入|ESC|D|NUL|,则清除之前设置的所有水平造表位置。
注意:水平造表位置的设定,应考虑打印机行宽,nX (X=1, 2, ...)必须小于等于96,否则无效。
命令 |
ASCII码 |
HT |
十进制 |
9 |
|
十六进制 |
0x09 |
打印位置前进到【设置水平造表位置】设定的造表位置n1,n2,n3……。
如果水平造表位置未设置或已清除,或者当前位置等于或超过水平造表位置,或者水平造表位置执行完毕,或者水平造表位置超过行宽,则该命令无效。
命令 |
ASCII码 |
ESC f m n |
十进制 |
27 102 m n |
|
十六进制 |
0x1B 0x66 m n |
当m=0时,该命令打印n个西文字符空格,0≤n≤255。对于12*6点阵西文字符,1个空格宽度为6点列;对于16*8点阵西文字符,1个空格宽度为8点列。
注意:打印空格应考虑打印机行宽。
当m=1时,该命令打印n个空字行,1≤n≤255。如果行缓冲器里有未打印的数据,则打印空行前先打印这些数据。如果n=0,则该命令无效。
注意:打印空行应考虑页长、装订长等格式设置。
命令 |
ASCII码 |
ESC l n |
十进制 |
27 108 n |
|
十六进制 |
0x1B 0x6C n |
设置从左侧起首个字符的打印位置,该位置是绝对位置,不受【横向放大】、【纵向放大】、【横向纵向放大】命令的影响。
n值为点列位置,默认值n=0,即没有左限。n值应在打印机行宽之内,即n<96。
如果行缓冲器里有未打印的数据,则先打印这些数据,再【设置左限】。
命令 |
ASCII码 |
ESC Q n |
十进制 |
27 81 n |
|
十六进制 |
0x1B 0x51 n |
设置从右侧起最后一个字符的打印位置,该位置是绝对位置,不受【横向放大】、【纵向放大】、【横向纵向放大】命令的影响。
n值为点列位置,默认值n=0,即没有右限。n值应在打印机行宽之内,即n<96。
设置右限后,当达到右限位置后,打印机将自动【换行】。
命令 |
ASCII码 |
ESC + n |
十进制 |
27 43 n |
|
十六进制 |
0x1B 0x2B n |
当n=1时,允许上划线打印
当n=0时,禁止上划线打印
允许上划线命令发送后,所有字符(包括空格)都将打印出上划线,除非再次发送禁止上划线命令。
命令 |
ASCII码 |
ESC - n |
十进制 |
27 45 n |
|
十六进制 |
0x1B 0x2D n |
当n=1时,允许下划线打印。
当n=0时,禁止下划线打印。
允许下划线命令发送后,所有字符(包括空格)都将打印出下划线,除非再次发送禁止下划线命令。
命令 |
ASCII码 |
ESC U n |
十进制 |
27 85 n |
|
十六进制 |
0x1B 0x55 n |
在该命令输入之后的字符将以正常宽度的n倍打印,1≤n≤4,默认n=1,即正常宽度,无放大。
如果【横向放大】前,行缓冲器中有未被打印数据,则这些数据都会被【横向放大】。
【横向放大】会影响行缓冲区的有效大小。例如,当横向放大2倍时,行缓冲器能容纳8个12*6点阵西文字符,而当横向放大4倍时,行缓冲器只能容纳4个12*6点阵西文字符。
注意,这个命令只有在发出【横向纵向放大】1倍之后才有效。
命令 |
ASCII码 |
ESC V n |
十进制 |
27 86 n |
|
十六进制 |
0x1B 0x56 n |
在该命令输入之后的字符和点阵图都将以正常高度的n倍打印,1≤n≤4,默认n=1,即正常高度,无放大。
如果【纵向放大】前,行缓冲器中有未被打印数据,则这些数据也会被【纵向放大】。
注意,这个命令只有在发出【横向纵向放大】1倍之后才有效。
命令 |
ASCII码 |
ESC W n |
十进制 |
27 87 n |
|
十六进制 |
0x1B 0x57 n |
在该命令输入之后的字符将以正常宽度和正常高度的n倍打印,点阵图将以正常宽度的n倍打印,1≤n≤4,默认n=1,即正常宽度、正常高度,无放大。
如果【横向纵向放大】前,行缓冲器中有未被打印数据,则这些数据都会被【横向纵向放大】。
【横向纵向放大】会影响行缓冲区的有效大小。例如,当横向放大2倍时,行缓冲器能容纳8个12*6点阵西文字符,而当横向放大4倍时,行缓冲器只能容纳4个12*6点阵西文字符。
命令 |
ASCII码 |
ESC i n |
十进制 |
27 105 n |
|
十六进制 |
0x1B 0x69 n |
当n=1时,允许反白打印,即背景打印黑色,字符打印白色,类似照相的底片。
当n=0时,禁止反白打印。即正常打印,背景打印白色,字符打印黑色。
默认n=0。
命令 |
ASCII码 |
ESC @ |
十进制 |
27 64 |
|
十六进制 |
0x1B 0x40 |
初始化打印机下列内容:
1)清空行缓冲器。
2)恢复默认参数。
命令 |
ASCII码 |
CR |
十进制 |
13 |
|
十六进制 |
0x0D |
当发送一个回车命令到打印机时,在打印行缓冲器中所有数据都将被打印而且向前走一行。效果与【换行】命令一样。
【空指令】
命令 |
ASCII码 |
NUL |
十进制 |
0 |
|
十六进制 |
0x00 |
【空指令】和某些命令,如ESC B、ESC D、ESC %等一起使用,用于表示这些命令的结束。
【空指令】单独使用时不起作用。
命令 |
ASCII码 |
ESC K n byte1 byte2 byte3…… |
十进制 |
27 75 n byte1 byte2 byte3…… |
|
十六进制 |
0x1B 0x4B n byte1 byte2 byte3…… |
该命令打印n*8点阵的图形。该图形的宽度为n点,高度为8点,每一列的8个点由一个字节byte1,byte2,byte3等来表示。第一行为字节最低位,第八行为字节最高位。byte数量必须等于图形宽度n。
如果行缓冲器里有未打印的数据,则【点阵图打印】前先打印这些数据。
注意:字符图形设置中【纵向放大】、【横向纵向放大】命令对点阵图有效。但其他格式设置和字符图形设置对点阵图无效。
十进制 |
十六进制 |
命令 |
功能 |
0 |
0x00 |
NUL |
结束标志 |
9 |
0x09 |
HT |
执行水平造表 |
10 |
0x0A |
LF |
换行 |
11 |
0x0B |
VT |
执行垂直造表 |
12 |
0x0C |
FF |
换页 |
13 |
0x0D |
CR |
回车 |
27 102 |
0x1B 0x66 |
ESC f |
打印空格或空行 |
27 105 |
0x1B 0x69 |
ESC i |
允许/禁止反白打印 |
27 108 |
0x1B 0x6C |
ESC l |
设置左限 |
27 43 |
0x1B 0x2B |
ESC + |
允许/禁止上划线 |
27 45 |
0x1B 0x2D |
ESC - |
允许/禁止下划线 |
27 49 |
0x1B 0x31 |
ESC 1 |
设置点行间距 |
27 64 |
0x1B 0x40 |
ESC @ |
初始化 |
27 66 |
0x1B 0x42 |
ESC B |
设置垂直造表位置 |
27 67 |
0x1B 0x43 |
ESC C |
设置页长 |
27 68 |
0x1B 0x44 |
ESC D |
设置水平造表位置 |
27 74 |
0x1B 0x4A |
ESC J |
执行n点行走纸 |
27 75 |
0x1B 0x4B |
ESC K |
点阵图打印 |
27 78 |
0x1B 0x4E |
ESC N |
设置装订长 |
27 79 |
0x1B 0x4F |
ESC O |
取消装订长 |
27 81 |
0x1B 0x51 |
ESC Q |
设置右限 |
27 85 |
0x1B 0x55 |
ESC U |
横向放大 |
27 86 |
0x1B 0x56 |
ESC V |
纵向放大 |
27 87 |
0x1B 0x57 |
ESC W |
横向纵向放大 |
字符 |
Dec |
Hex |
字符 |
Dec |
Hex |
字符 |
Dec |
Hex |
字符 |
Dec |
Hex |
|
32 |
0x20 |
8 |
56 |
0x38 |
P |
80 |
0x50 |
h |
104 |
0x68 |
! |
33 |
0x21 |
9 |
57 |
0x39 |
Q |
81 |
0x51 |
i |
105 |
0x69 |
" |
34 |
0x22 |
: |
58 |
0x3A |
R |
82 |
0x52 |
j |
106 |
0x6A |
# |
35 |
0x23 |
; |
59 |
0x3B |
S |
83 |
0x53 |
k |
107 |
0x6B |
$ |
36 |
0x24 |
< |
60 |
0x3C |
T |
84 |
0x54 |
l |
108 |
0x6C |
% |
37 |
0x25 |
= |
61 |
0x3D |
U |
85 |
0x55 |
m |
109 |
0x6D |
& |
38 |
0x26 |
> |
62 |
0x3E |
V |
86 |
0x56 |
n |
110 |
0x6E |
' |
39 |
0x27 |
|
63 |
0x3F |
W |
87 |
0x57 |
o |
111 |
0x6F |
( |
40 |
0x28 |
@ |
64 |
0x40 |
X |
88 |
0x58 |
p |
112 |
0x70 |
) |
41 |
0x29 |
A |
65 |
0x41 |
Y |
89 |
0x59 |
q |
113 |
0x71 |
* |
42 |
0x2A |
B |
66 |
0x42 |
Z |
90 |
0x5A |
r |
114 |
0x72 |
+ |
43 |
0x2B |
C |
67 |
0x43 |
[ |
91 |
0x5B |
s |
115 |
0x73 |
, |
44 |
0x2C |
D |
68 |
0x44 |
\ |
92 |
0x5C |
t |
116 |
0x74 |
- |
45 |
0x2D |
E |
69 |
0x45 |
] |
93 |
0x5D |
u |
117 |
0x75 |
. |
46 |
0x2E |
F |
70 |
0x46 |
^ |
94 |
0x5E |
v |
118 |
0x76 |
/ |
47 |
0x2F |
G |
71 |
0x47 |
_ |
95 |
0x5F |
w |
119 |
0x77 |
0 |
48 |
0x30 |
H |
72 |
0x48 |
' |
96 |
0x60 |
x |
120 |
0x78 |
1 |
49 |
0x31 |
I |
73 |
0x49 |
a |
97 |
0x61 |
y |
121 |
0x79 |
2 |
50 |
0x32 |
J |
74 |
0x4A |
b |
98 |
0x62 |
z |
122 |
0x7A |
3 |
51 |
0x33 |
K |
75 |
0x4B |
c |
99 |
0x63 |
{ |
123 |
0x7B |
4 |
52 |
0x34 |
L |
76 |
0x4C |
d |
100 |
0x64 |
| |
124 |
0x7C |
5 |
53 |
0x35 |
M |
77 |
0x4D |
e |
101 |
0x65 |
} |
125 |
0x7D |
6 |
54 |
0x36 |
N |
78 |
0x4E |
f |
102 |
0x66 |
~ |
126 |
0x7E |
7 |
55 |
0x37 |
O |
79 |
0x4F |
g |
103 |
0x67 |
|
|
|
/*
函数功能:向KC-501发送1字节数据
说明:
P1 - 8位数据总线
P3_4 - Stb信号
P3_5 - Ack信号
*/
void SendByte( char byte )
{
//并行数据发送
P1 = byte;
//Stb上升沿向KC-501输入数据
P3_4 = 0;
P3_4 = 1;
//等待KC-501处理数据后产生Ack回答脉冲
while ( P3_5 ) ;
while ( !P3_5 ) ;
}
/*
函数功能:主函数
*/
void main( void )
{
;//单片机初始化
//初始化打印机
SendByte( 0x1B );
SendByte( 0x40 );
while ( 1 ) {
; //用户程序
//发送数据
SendByte( ' ' );
SendByte( 'K' );
SendByte( 'C' );
SendByte( '-' );
SendByte( '5' );
SendByte( '0' );
SendByte( '1' );
SendByte( ' ' );
//回车
SendByte( 0x0D );
}
}
专业生产 智能家居控制系统 GSM远程遥控开关 串口继电器控制盒 GPRS MODEM 单片机开发板 电子制作散件套件 我们专注于智能家居控制系统,GPRS数据采集系统,物联网智能控制方向 晶控电子----让我们的生活更美好 品质更卓越 生活更智能 联系地址:浙江省杭州市登云路428号 浙江时代电子市场4楼852室 邮政编码:310011 Email:hificat@163.com 电话总机:0571-88009850 产品咨询:转分机1 技术支持:转分机2 传真:转分机3 手机:13185018567 销售QQ:1198450005 杭州晶控电子有限公司 版权所有 2003-2012 HANGZHOU KinCony ELECTRONICS CO.,LTD 网站备案:浙ICP备11001927号 |