热敏打印机应用笔记
熱敏電打印機在PS機上應用比較廣泛。造型需要考濾的參數(shù)有:
1、打印方式:熱敏,針式等等;
2、打印紙度:影響一行能打的字數(shù);
3、打印密度:影響線的粗細,單位 點/mm 或是 點/行
4、打印頭的壽命:
5、有效打印寬度:實際可打印的字符寬度;
6、走紙速度:即打速度;
7、支持的字符集: 中文 / 英文
8、接口形式:并/串 TLL/232
9、功耗:
10、外形及安裝方式:
11、資質認證:如防爆場合
?
*煒-煌 *E9* (多來點星星以免打廣告) 打印機適用防爆場合,硬件連接很簡單,主要是代碼調試,格式對齊上比較費紙,呵呵:
1、調試時最就是單片機與打印機獨立供電,在電打印過程序中打印機電流很厲害(熱敏打印的缺點),1.5A左右,搞不好會把單片機搞死掉或是會導致打印終止。最好用線性電源供電可以觀察電流;
2、程序中發(fā)送打印數(shù)據(jù)前先選擇字庫碼的類型;
3、打印應該注意打印機最長能打印多少個字符,以免加上行間距;
?
#include "stm32f10x.h"
#include "misc.h"
#include "system_stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_usart.h"
#include "fifo.h"
#include "string.h"
#define? MAX_LINE???????????? 13???
#define? EnableData()???????? USART_ITConfig(TicketPrintUart, USART_IT_TXE, ENABLE)???
#define? IsPrinterBusy()????? GPIO_ReadInputDataBit(TicketPrintBusyGPIO, TicketPrintBusyPin)??????????
void? TicketPrinterInit(void);
u8?????? TicketPrinterWrite(u8 **dp);
void? TicketPrinterTest(void);
#define? TicketPrintIRQ?????? USART2_IRQHandler?????
#define? TicketPrintUartIOClk RCC_APB2Periph_GPIOA?
#define? TicketPrintUartClk?? RCC_APB1Periph_USART2
#define? TicketPrintTxGPIO??? GPIOA?????????????????
#define? TicketPrintBusyGPIO? GPIOA
#define? TicketPrintTxPin???? GPIO_Pin_2
#define? TicketPrintBusyPin?? GPIO_Pin_3
#define? TicketPrintUart????? USART2?????????????????
#define? TicketPrintIRQn????? USART2_IRQn
?????????????????????????????????
static void TicketPrinterIOInit(void)
{
??? USART_InitTypeDef USART_InitStructure;
??? NVIC_InitTypeDef NVIC_InitStructure;
??? GPIO_InitTypeDef GPIO_InitStructure;
??? RCC_APB2PeriphClockCmd(TicketPrintUartIOClk | RCC_APB2Periph_AFIO, ENABLE);
??? RCC_APB1PeriphClockCmd(TicketPrintUartClk, ENABLE);
??? NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
??? NVIC_InitStructure.NVIC_IRQChannel = TicketPrintIRQn;
??? NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
??? NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
??? NVIC_Init(&NVIC_InitStructure);
??? GPIO_InitStructure.GPIO_Pin = TicketPrintBusyPin; //Printor Busy
??? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
??? GPIO_Init(TicketPrintBusyGPIO, &GPIO_InitStructure);
??? GPIO_InitStructure.GPIO_Pin = TicketPrintTxPin;?? //TX2???
??? GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
??? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
??? GPIO_Init(TicketPrintTxGPIO, &GPIO_InitStructure);
??? USART_InitStructure.USART_BaudRate = 9600;
??? USART_InitStructure.USART_WordLength = USART_WordLength_8b;
??? USART_InitStructure.USART_StopBits = USART_StopBits_1;
??? USART_InitStructure.USART_Parity = USART_Parity_No;
??? USART_InitStructure.USART_HardwareFlowControl =
??????????? USART_HardwareFlowControl_None;
??? USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
??? USART_Init(TicketPrintUart, &USART_InitStructure);
??? FifoInit(&PrintFifo, sizeof(PrintFifo.data));
??? USART_Cmd(TicketPrintUart, ENABLE);
}
void TicketPrintIRQ(void)
{
??? u8 ch;
??? if (USART_GetITStatus(TicketPrintUart, USART_IT_TXE) != RESET)
??? {
??????? if(!IsPrinterBusy())
??????? {
???????? if(!FifoRead(&PrintFifo, &ch))
???????????? TicketPrintUart->DR = (uint16_t)0x01FF & ch;
???????? else
???????????? USART_ITConfig(TicketPrintUart, USART_IT_TXE, DISABLE);
???? }
??? }???????
}
?
?
//測試代碼
?
test[] = {“stm32 單片機”};
for(y = 0; y < sizeof(test); y++)
FifoWrite(&PrintFifo,? test[y]);
FifoWrite(&PrintFifo, '\n');
EnableData();
轉載于:https://www.cnblogs.com/worldsing/archive/2013/05/22/3093083.html
總結
- 上一篇: C# Obsolete
- 下一篇: Socket一次Recv接受的字节有限制