热敏打印机通常被称为收据打印机。它广泛用于饭店,自动柜员机,商店和许多其他需要收据或账单的地方。这是一种经济高效的解决方案,非常方便用户和开发人员使用。热敏打印机使用特殊的打印过程,该过程使用热致变色纸或热敏纸进行打印。打印机头被加热到一定温度,当热敏纸从打印头通过时,纸张涂层在打印机头被加热的区域会变黑。
在本教程中,我们将使热敏打印机CSN A1与广泛使用的PIC微控制器PIC16F877A连接。在本项目的此处,将热敏打印机跨接在PIC16F877A上,并使用触觉开关开始打印。通知LED也用于通知打印状态。仅在进行打印活动时,它才会发光。
打印机规格和连接
我们正在使用Cashino的CSN A1热敏打印机,该打印机容易获得,价格也不算太高。
如果我们在其官方网站上看到该规格,就会看到一个表格,其中提供了详细的规格-
在打印机的背面,我们将看到以下连接-
TTL连接器提供Rx Tx连接以与微控制器单元通信。我们还可以使用RS232协议与打印机进行通信。电源连接器用于为打印机供电,按钮用于打印机测试。在为打印机供电时,如果我们按自检按钮,则打印机将打印一张纸,并在其中打印规格和样品线。这是自测纸-
如我们所见,打印机使用9600波特率与微控制器单元通信。打印机可以打印ASCII字符。通讯非常容易,我们只需使用UART即可传输任何字符串或字符,从而可以打印任何内容。
打印机需要5V 2A电源来加热打印机头。这是热敏打印机的缺点,因为它在打印过程中会承受巨大的负载电流。
先决条件
要进行以下项目,我们需要做以下事情:
- 面包板
- 连接电线
- PIC16F877A
- 2个33pF陶瓷圆盘电容器
- 680R电阻
- 任何颜色的LED
- 触觉开关
- 2个4.7k电阻
- 带纸卷的热敏打印机CSN A1
- 5V 2A额定电源设备。
电路图和说明
下面给出了使用PIC单片机控制打印机的示意图:
在这里,我们将PIC16F877A用作单片机单元。4.7k电阻用于将MCLR引脚连接到5V电源。我们还为时钟信号连接了一个20 MHz的外部振荡器和一个33pF的电容器。通知LED通过680R led限流电阻跨RB2端口连接。所述触觉开关时该按钮被按下,它将提供跨RB0销连接 逻辑高 否则引脚将接收 逻辑低 由4.7K电阻器。
打印机CSN A1使用交叉配置连接,微控制器的发送引脚与打印机的接收引脚连接。打印机还连接了5V和GND电源。
我们在面包板上搭建电路并进行了测试。
代码说明
代码很容易理解。 本文末尾提供了将热敏打印机与PIC16F877A连接的完整代码。与往常一样,我们首先需要在PIC微控制器中设置配置位。
// PIC16F877A配置位设置 //'C'源线配置语句 // CONFIG #pragma config FOSC = HS //振荡器选择位(HS振荡器) #pragma config WDTE = OFF //看门狗定时器使能位(禁止WDT) # pragma config PWRTE = OFF //开机定时器使能位(禁止PWRT) #pragma config BOREN = ON //欠压复位使能位(BOR使能) #pragma config LVP = OFF //低压(单电源) )在线串行编程使能位(RB3 / PGM引脚具有PGM功能;低电压编程使能) #pragma config CPD = OFF //数据EEPROM存储器代码保护位(数据EEPROM代码保护关闭) #pragma config WRT = OFF //闪存程序存储器写使能位(写保护关闭;所有程序存储器均可通过EECON控件写入) #pragma config CP = OFF //闪存程序存储器代码保护位(代码保护关闭)
之后,我们定义了系统硬件相关的宏,并将eusart1.h头文件用于eusart相关的硬件控制。UART在头文件中配置为9600波特率。
#包括
在 主要 功能中,我们首先检查了“按钮按下”,还使用了开关防抖策略来消除开关毛刺。我们为“按下按钮”条件创建了一个 if 语句。首先,LED将发光,UART将打印字符串。可以在if语句内部生成自定义行,并可以将其打印为字符串。
void main(void){ system_init(); while(1){ if(printer_sw == 1){//按下开关 __delay_ms(50); // 如果(printer_sw == 1){ / put_string(“ Hello!\ n \ r”); //打印到热敏打印机 __delay_ms(50); put_string(“ Thermal Printer Tutorial。\ n \ r”); __delay_ms(50); put_string(“ Circuit Digest。\ n \ r”); __delay_ms(50); put_string(“ \ n \ r”); put_string(“ \ n \ r”); put_string(“ \ n \ r”); put_string(“ ---------------------------- \ n \ r”); put_string(“谢谢”); put_string(“ \ n \ r”); put_string(“ \ n \ r”); put_string(“ \ n \ r”); notification_led = 0; } } } }
完整的代码和工作视频如下。