win32 下面 串口操作 ESC POS 打印 参考程序

22 篇文章 1 订阅

串口 通信
http://outofmemory.cn/code-snippet/12300/ESC-POS-type-example

ESC POS打印例子

#include <windows.h>
#include <string>
#include <IOSTREAM>
using namespace std;

typedef struct DataInfo
{
    string Port;  //串口端口号
    int BawdRate;//波特率
    int DataBits;  //数据位
    char Parity;  //校验位
    int ReceiveBuffer;  //缓冲区
    int StopBits;//停止位
}PrintDevice;

int   WriteData(string meg);
int InitPort(PrintDevice &device);
void InitializeDevicePar(PrintDevice &device);
HANDLE hPort=NULL;  //句柄

int main()
{
    PrintDevice device;
    InitializeDevicePar(device);  //初始化打印机参数

    InitPort(device);  //初始化打印机端口

    string s;

    ////////////////////////////打印头信息开始//////////////////////////////////
    //设置中文粗体 + 四倍大小, "FS ! n", n = 4 + 8+128, 
    s= "\\x1C\\x21\\x8C";
    WriteData(s);

    s="商店-上海鼎捷\\x0A";
    WriteData(s); //打印

    //取消中文放大设置
    DWORD iBytesLength;
    char chSetCode[] = "\\x1C\\x21\\x0";
    WriteFile(hPort, chSetCode, (DWORD)3L, &iBytesLength, NULL);
    //////////////////////////打印头信息结束///////////////////////////////////////

    //////////////////////////打印商品开始////////////////////////////////////////
    s="山东苹果\\t4.00\\t2x\\t8.00元\\x0A";
    WriteData(s); //打印
    s="福建橘子\\t5.00\\t3x\\t15.00元\\x0A";
    WriteData(s); //打印
    s="\\x0A";
    WriteData(s); //打印
    ////////////////////////////打印商品结束//////////////////////////////////////
    s="小计:23.00元\\x0A";
    WriteData(s); //打印

    //进纸到切纸位置,再切纸,"GS V m n", n=需要多进的行数
    s= "\\x1D\\x56\\x41\\x01";  //m=65 65是全切,66是半切, n=1 0<=n<=255
    WriteData(s); //打印

    CloseHandle(hPort);//关闭端口

    return 0;
}
void InitializeDevicePar(PrintDevice &device)
{
    device.Port="COM4";
    device.BawdRate=9600;
    device.DataBits=8;
    device.StopBits=ONESTOPBIT;
    device.Parity=NOPARITY;  //NONE
    device.ReceiveBuffer=256;
}
int InitPort(PrintDevice &device)
{
    hPort = CreateFile(device.Port.c_str(), GENERIC_READ | GENERIC_WRITE,
        0, NULL, 
        OPEN_EXISTING,
                            FILE_ATTRIBUTE_NORMAL, NULL );

    if (hPort == INVALID_HANDLE_VALUE) 
    {   // 打开端口失败
        return false;
    }
    else
    { 
        //设置端口缓冲
        SetupComm(hPort, 1024, 1024); 

        // 设定通讯端口超时参数
        COMMTIMEOUTS tmouts;
        tmouts.ReadIntervalTimeout = 100;
        tmouts.ReadTotalTimeoutMultiplier = 100;
        tmouts.ReadTotalTimeoutConstant = 100;
        tmouts.WriteTotalTimeoutConstant = 100;
        tmouts.WriteTotalTimeoutMultiplier = 100;
        SetCommTimeouts(hPort, &tmouts);

        //设定通讯端口通讯参数
        DCB dcb;
        BOOL bol = TRUE;

        //dcb.DCBlength = sizeof(dcb);
        bol=GetCommState(hPort, &dcb);
        dcb.BaudRate = device.BawdRate;
        dcb.ByteSize =device.DataBits;
        dcb.StopBits = device.StopBits;
        dcb.Parity = device.Parity;

        bol = SetCommState(hPort, &dcb); //配置串口
        // 清除通讯端口缓存
        PurgeComm(hPort, PURGE_TXCLEAR | PURGE_RXCLEAR | PURGE_TXABORT | PURGE_RXABORT);

        // 初始化重叠IO对象
        OVERLAPPED m_OverlappedRead;
        OVERLAPPED m_OverlappedWrite;
        HANDLE m_hStopCommEvent;
        HANDLE m_hDataReady;
        memset(&m_OverlappedRead, 0, sizeof(OVERLAPPED));
        m_OverlappedRead.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
        memset(&m_OverlappedWrite, 0, sizeof(OVERLAPPED));
        m_OverlappedWrite.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);

        // 初始化事件对象
        m_hStopCommEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
        m_hDataReady = CreateEvent(NULL, FALSE, FALSE, NULL);

        //初始化打印ESC @
        DWORD iBytesLength;
        char chInitCode[] = "\\x0D\\x1B\\x40";
        WriteFile(hPort, chInitCode, (DWORD)3L, &iBytesLength, NULL);
    }

    return 0;

}
int   WriteData(string meg)
{
    DWORD dwWrite;
    WriteFile(hPort, meg.c_str(), (DWORD)meg.length(), &dwWrite, NULL);
    return 0;
}
//该片段来自于http://outofmemory.cn

热敏打印机打印二维码图片
https://blog.csdn.net/sdvch/article/details/45079375

GSMMODEM.cs源代码,串口调试程序
http://www.inextera.com/forum.php?mod=viewthread&tid=40

这里写图片描述
C# 写的

这里写图片描述
书名:《C/C++串口通信典型应用实例编程实践》(电子工业出版社.曹卫杉)
PDF扫描版,全书共分10章,共316页。

内容介绍
本书从工程应用的角度出发,对目前流行的三种不同类型的C/C++语言(包括C++ Builder、Visual C++和LabWindows/CVI)开发串口通信(也称为串行通信)程序进行了阐述。
基础篇简单介绍了C/C++语言实现串口通信需要的基本知识;应用篇通过PC与PC、PC与单片机、PC与智能仪器、PC与PLC、PC与GSM短信模块、PC与远程I/O模块等典型应用实例,详细介绍了C/C++语言利用MSComm控件、API函数实现串口通信的程序设计方法。每个实例的设计任务同时采用C++ Builder、Visual C++和Labgrmdows/CVI实现。
本书内容丰富,结构清晰,文字叙述深入浅出,通俗易懂,以实践应用为主,突出程序设计,重在功能实现,有较强的实用性和可操作性。
本书可作为高等院校计算机应用、测控技术、机电一体化、自动化等专业的研究生、本科生以及计算机测控系统研发的工程技术人员等学习C/C++串口通信编程技术的参考书。

Win32串口API
https://www.cnblogs.com/xi52qian/archive/2011/08/30/2159675.html

深入浅出VC++串口编程之基于Win32 API
http://dev.yesky.com/401/2308901.shtml

Win32串行通信中文版(Serial Communications In Win32)
https://blog.csdn.net/zcube/article/details/8591972

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值