使用热敏打印机连接PIC16F877A并使用轻触开关实现打印的教程

描述

热敏打印机通常称为收据打印机。它广泛用于餐馆,自动取款机,商店和许多其他需要收据或账单的地方。这是一个具有成本效益的解决方案,从用户和开发人员的角度来看都非常方便。热敏打印机使用特殊的打印工艺,使用热致变色纸或热敏纸进行打印。打印机头在一定温度下加热,当热敏纸从打印头通过时,纸张涂层在打印头被加热的区域变黑。

在本教程中,我们将热敏打印机 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;

}  

}

}

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分