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() 详解