一、前言
本文介绍了使用单片机驱动热敏打印机的实现方法。作者通过串口通信控制打印机,详细说明了驱动文字打印的步骤:首先阅读设备参数说明,确定使用串口2进行通信;然后提供了串口发送字节、数组和字符串的基础函数;最后封装了打印机初始化、对齐设置、文本打印等核心功能函数,并给出了调用示例。文章重点展示了如何通过发送HEX指令控制自带字库的打印机,实现格式化文本输出功能。代码包含详细注释,具有可移植性,适用于需要嵌入式系统集成打印功能的开发场景。
二、介绍
我使用的这款再淘宝上就可以购买到,这个有两种驱动方式,不过我使用的是串口进行通信控制
效果
单片机驱动打印文字
关注微信公众号--星之援工作室 发送关键字(DP-EH700)
代码含重要注释,开源,可自行移植
????
三、思路
拿到的第一步,肯定是先读参数使用说明,我需要实现的是文字打印,以及位置确认,那么我就看这两部分,然后这款设备是自带字库的,也就不需要我们取模,那么就好办,直接发送hex给打印机即可,然后就是我们这个单片机去驱动,那么就少不了定义一个串口。
四、代码
串口
这里我采用的是串口2进行驱动,代码的话就不附录了,比较基础。重点把这几个函数附录进去
/*********************************************************************************
发送一个字节
**********************************************************************************/
void Usart_SendByte(USART_TypeDef *pUSARTx, uint8_t ch)
{
/* 发送一个字节数据到USART */
USART_SendData(pUSARTx, ch);
/* 等待发送数据寄存器为空 */
while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET)
;
}
/*********************************************************************************
发送8位的数组
**********************************************************************************/
void Usart_SendArray(USART_TypeDef *pUSARTx, char *array, uint16_t num)
{
uint8_t i;
for (i = 0; i < num; i++)
{
/* 发送一个字节数据到USART */
Usart_SendByte(pUSARTx, array[i]);
}
/* 等待发送完成 */
while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TC) == RESET)
;
}
/*********************************************************************************
发送字符串
**********************************************************************************/
void Usart_SendString(USART_TypeDef *pUSARTx, char *str)
{
unsigned int k = 0;
do
{
Usart_SendByte(pUSARTx, *(str + k));
k++;
} while (*(str + k) != '?');
/* 等待发送完成 */
while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TC) == RESET)
{
}
}
打印驱动函数
每个函数含有基本注释
// 初始化打印机
void initPrinter(void) {
char sendStr[2] = {0x1B, 0x40};
sendData(sendStr, 2);
}
// 设置打印对齐方式为居左
void setPrintAlignmentLeft(void) {
char sendStr[3] = {0x1B, 0x61, 0x00};
sendData(sendStr, 3);
}
// 打印文本
void printText(char *text) {
int textLength = strlen(text);
char *sendStr = (char *)malloc(textLength);
memcpy(sendStr, text, textLength);
sendData(sendStr, textLength);
free(sendStr);
}
// 打印分列符号
void printColumnSeparator(void) {
char sendStr[1] = {0x09};
sendData(sendStr, 1);
}
// 换行
void printNewLine(void) {
char sendStr[3] = {0x0A};
sendData(sendStr, 3);
}
调用函数
已经封装好了,直接需要调用的函数位置进行调用即可
// 输出打印格式
void printTextImage(void)
{
// 初始化打印机
initPrinter();
// 设置打印对齐方式为居左
setPrintAlignmentLeft();
// 第一行
printText("编号:8 ");
printColumnSeparator();
printText("部位:肠");
printNewLine();
// 第二行
printText("性别:男 ");
printColumnSeparator();
printText("年龄:35 ");
printNewLine();
// 第三行
printText("1导:XXX ");
printColumnSeparator();
printText("2导:XXX ");
printNewLine();
// 第四行
printText("VPP:414.33 ");
printColumnSeparator();
printText("VPP:484.33 ");
printNewLine();
// 第五行
printText("RA:33.88 ");
printColumnSeparator();
printText("RA:33.33 ");
printNewLine();
// 第六行
printText("F:6.86 ");
printColumnSeparator();
printText("F:6.99 ");
printNewLine();
// 第六行
printText("主频:6.50 ");
printColumnSeparator();
printText("主频:6.89 ");
printNewLine();
printNewLine();
}
联系方式 微信号:13648103287
1698