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=239b=n%100;//b=58sprintf(str,"%s%d.%d",c,a,b);//str=The number is:239.58Print_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() 详解


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部