51单片机用热敏打印机模块HPD482打印数字字符串

HPD482是热敏打印机模块,功能就是打印小票。利用资料里的驱动代码打印数字,需要先将数字转换成字符串才能打印。打印结果如图所示:
在这里插入图片描述

硬件准备

51单片机采用宏晶公司的STC89C52RC,晶振为12MHz。
热敏打印机模块HPD482为淘宝上“有立diy”店铺的模块,如下图所示:
在这里插入图片描述

软件代码

硬件怎么连接的资料里写得很清楚了,这里只讨论怎么实现打印功能。想把采集到的温度数据用打印机打印出来,比如采集到25.8度,要求打印内容为“The temperature is:25.8 ”。

使用标准库“stdio.h”里的sprintf函数,这个函数可以将数字转换成字符串。比如打印数字56,先转换成字符串格式,再扔到打印函数Print_SStr里打印,代码如下:

#include "reg51.h"
#include "printer.h"//打印机模块头文件
#include "stdio.h"//c语言标准库
void main()
{
	int n=56;//类型必须是int型
	char s[3],*str=s;//分配3字节内存,并用str指向这段内存
	sprintf(str,"%d",n);//将数字n转换成字符串并保存在str里
	
	Print_Init();//初始化打印机
	Print_SStr(str,16,8);//调用打印函数开始打印
	while(1);
}

注意,待转换的数字必须是int类型的,我试过char型的转换后是乱码。还有就是分配的内存大小必须比转换完的大小多一个字节,因为字符串后面要加一个’\0’作为结尾,比如上面代码中,数字56转换后是2个字节,加上’\0’一共是3个字节,所以数组s的大小应为3字节以上。

sprintf函数还可以拼接字符串,比如要打印的内容是“The number is:239.58”,完整的代码为:(main.c里)

/*
作者:有立diy
淘宝店铺:有立diy
淘宝链接:https://shop587795831.taobao.com/
原创声明:本例程为热敏打印机模块HPD482配套例程,仅供参考,不得用于商业等用途,其他后果概不负责。
		  如需使用,注明出处。
*/
#include "reg51.h"
#include "delay.h"
#include "printer.h"
#include "stdio.h"
sbit LED = P1^0;//程序运行状态指示灯
void main()
{
	int n=23958;//待转换的数字
	int a,b;//a是整数部分,b是小数部分
	char *c="The number is:";//14个字符
	char s[24]={'\0'},*str=s;//分配20字节内存并用str指向此内存
	
	a=n/100;//a=239
	b=n%100;//b=58
	sprintf(str,"%s%d.%d",c,a,b);//str=The number is:239.58
	
	Print_Init();//初始化打印机
	Print_SStr(str,16,8);//打印字符串
	
    while(1)
	{
		LED=0;
		delay_ms(255);
		LED=1;
		delay_ms(255);
	}
}

sprintf函数很像printf函数,只不过sprintf里多了一个存储字符串的变量str而已。上述代码下载到单片机里,打印结果见下图:
在这里插入图片描述
图上打印出的黑色的块是乱码,因为分配的数组大小不够大,导致sprintf输出的字符串后面没有’\0’,放在打印函数里就打印乱码了。如果单片机内存够用,建议数组尽量写大些。

关于sprintf函数的用法,可以参考这篇文章,写得很详细:C 字符串函数 sprintf()、snprintf() 详解

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值