热敏打印机通常称为收据打印机。它广泛用于餐馆,自动取款机,商店和许多其他需要收据或账单的地方。这是一个具有成本效益的解决方案,从用户和开发人员的角度来看都非常方便。热敏打印机使用特殊的打印工艺,使用热致变色纸或热敏纸进行打印。打印机头在一定温度下加热,当热敏纸从打印头通过时,纸张涂层在打印头被加热的区域变黑。
在本教程中,我们将热敏打印机 CSN A1 与广泛使用的 PIC 微控制器 PIC16F877A 连接。在本项目中,热敏打印机连接在PIC16F877A上,并使用轻触开关开始打印。通知 LED 还用于通知打印状态。仅当打印活动正在进行时,它才会发光。
打印机规格和连接
我们正在使用Cashino的CSN A1热敏打印机,它很容易获得,价格也不太高。
如果我们在其官方网站上看到该规范,我们将看到一个提供详细规格的表格-
在打印机的背面,我们将看到以下连接-
TTL 连接器提供 Rx Tx 连接以与微控制器单元通信。我们还可以使用RS232协议与打印机通信。电源连接器用于为打印机供电,按钮用于打印机测试。打印机通电时,如果我们按下自检按钮,打印机将打印一张纸,其中将打印规格和样品行。这是自测表-
正如我们所看到的,打印机使用9600波特率与微控制器单元通信。打印机可以打印 ASCII 字符。通信非常简单,我们可以通过简单地使用UART,传输字符串或字符来打印任何东西。
打印机需要5V 2A电源来加热打印机头。这是热敏打印机的缺点,因为它在打印过程中需要巨大的负载电流。
先决条件
要进行以下项目,我们需要以下东西:-
面包板
连接电线
PIC16F877A
2个33pF陶瓷盘式电容器
680R电阻
任何颜色的指示灯
轻触开关
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 Configuration Bit Settings
// 'C' source line config statements
// CONFIG
#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3/PGM pin has PGM function; low-voltage programming enabled)
#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
之后,我们定义了与系统硬件相关的宏,并使用 eusart1.h 头文件进行与 eusart相关的硬件控制。UART 在头文件中配置为 9600 波特率。
#include
#include "supporting_cfileeusart1.h"
/*
* System hardware related macros
*/
#define _XTAL_FREQ 200000000 //Crystal Frequency, used in delay routine
#define printer_sw PORTBbits.RB0 //this macro is for defining the printing switch
#define notification_led PORTBbits.RB2
void system_init(void);
在主函数中,我们首先检查了“按钮按下”,并使用了开关去抖动策略来消除开关故障。我们为“按钮按下”条件创建了一个 if 语句。首先,LED 将发光,UART 将打印字符串。自定义行可以在 if 语句内生成,并且可以打印为字符串。
void main(void) {
system_init();
while(1){
if(printer_sw == 1){ //switch is pressed
__delay_ms(50); // debounce delay
if (printer_sw == 1){ // switch is still pressed
notification_led = 1;
put_string("Hello! nr");//Print to Thermal printer
__delay_ms(50);
put_string("Thermal Printer Tutorial.nr");
__delay_ms(50);
put_string("Circuit Digest. nr");
__delay_ms(50);
put_string ("nr");
put_string ("nr");
put_string ("nr");
put_string ("---------------------------- n r");
put_string ("Thank You");
put_string ("nr");
put_string ("nr");
put_string ("nr");
notification_led = 0;
}
}
}
}
全部0条评论
快来发表一下你的评论吧 !