• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

【嵌入式外设】 单片机驱动热敏打印机打印文字

08/16 09:19
1698
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

联系方式.docx

共1个文件

一、前言

本文介绍了使用单片机驱动热敏打印机的实现方法。作者通过串口通信控制打印机,详细说明了驱动文字打印的步骤:首先阅读设备参数说明,确定使用串口2进行通信;然后提供了串口发送字节、数组和字符串的基础函数;最后封装了打印机初始化、对齐设置、文本打印等核心功能函数,并给出了调用示例。文章重点展示了如何通过发送HEX指令控制自带字库的打印机,实现格式化文本输出功能。代码包含详细注释,具有可移植性,适用于需要嵌入式系统集成打印功能的开发场景。


二、介绍

我使用的这款再淘宝上就可以购买到,这个有两种驱动方式,不过我使用的是串口进行通信控制

效果


单片机驱动打印文字

关注微信公众号--星之援工作室 发送关键字(DP-EH700

代码含重要注释,开源,可自行移植
????452c0cf75b1d4e4895194df8a5022c34.png

三、思路

拿到的第一步,肯定是先读参数使用说明,我需要实现的是文字打印,以及位置确认,那么我就看这两部分,然后这款设备是自带字库的,也就不需要我们取模,那么就好办,直接发送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

  • 联系方式.docx
    下载

相关推荐