精华内容
下载资源
问答
  • 目前市场上出现新的需求,就是通过在收银机和小票打印机中间添加硬件的方式,采集每一张小票的信息,并且追加...数贝通是一个硬件小票采集器,可以兼容USB、并口、串口、网口的小票打印机,高效,精准识别每一张需要

    目前市场上出现新的需求,就是通过在收银机和小票打印机中间添加硬件的方式,采集每一张小票的信息,并且追加打印二维码。往往应用在商超,购物中心,景点娱乐,金融监控等方面,

    这种方式最大的优点是不需要在收银机上安装任何软件或者修改收银机设置,收银员也不需要任何操作,即插即用。

    数贝通(TB有售)正是这样的产品。数贝通是一个硬件小票采集器,可以兼容USB、并口、串口、网口的小票打印机,高效,精准识别每一张需要打印的小票,并且上传指定服务器。

    数贝通(TB有售)跟其他同类产品最大的区别是,数贝通已经对小票进行了数据识别,不需要用户再进行二次开发,并且可以追加打印二维码,真正做到了即插即用。

    展开全文
  • Arduino-01 串口读取以及提取参数

    千次阅读 2020-05-27 17:14:16
    Arduino对串口命令中参数的提取串口命令的来源可以是Matlab,例如:https://blog.csdn.net/jell14/article/details/106354163
    Serial.begin(9600); //baud rate 9600
    
    void jRead()
    {
      comdata = "";
      while (flag == 0)
      {
        while (Serial.available() > 0) {
          comdata += char(Serial.read());  
          delay(2);
        }
        if (comdata[0] == 49) {
          flag = 1;
          T1 = comdata.substring(2, 5).toDouble();
          T2 = comdata.substring(6, 9).toDouble();
          N = comdata.substring(10, 13).toInt();
          flag1 = comdata.substring(14, 15).toInt();
          Serial.println(T1);
          Serial.println(T2);
          Serial.println(N);
          Serial.println(flag1);
        }
        else {
          Serial.println("1-T1-T2-N-En: 1-001-002-005-1");
    
        }
        delay(200);
      }
      flag = 0;
    }
    

    以上代码是Arduino对串口命令中参数的提取。串口命令的来源可以是Matlab,例如:https://blog.csdn.net/jell14/article/details/106354163

    展开全文
  • 单片机之串口数据处理

    千次阅读 2018-05-17 18:08:53
    例如:GPRS模块、GPS模块、语音模块、热敏微型打印机串口摄像头等等。在与这些模块进行数据通信都离不开串口,而对于串口的操作,由于串口本身没有标准的通信协议,所以很难做到非常统一的操作过程。一般来说,...

    随着硬件系统的模块化发展,很多电子产品都做出模块并采用串口进行数据通信。例如:GPRS模块、GPS模块、语音模块、热敏微型打印机、串口摄像头等等。在与这些模块进行数据通信都离不开串口,而对于串口的操作,由于串口本身没有标准的通信协议,所以很难做到非常统一的操作过程。一般来说,不同的模块其有着特殊的通信协议,我们只能根据其协议进行数据解码。

      虽然说串口没有标准协议,但是我们却可以把它们的相似部分提取出来,做成模块化的程序,方便代码的移植和理解。下面我们简单谈到串口数据的处理方法。。。。。
    

    串口数据处理流程:

    一般来说,串口数据的接收都是采用中断方式,中断中只复制把串口发送的数据放入数据缓冲区中。而发送一般都是采用查询方式比较方便。不管是与什么设备通信,这一点完全是一致的。所以,我们完全可以把这部分代码独立起来。

    定义数据结构如下:
    typedef struct
    {
    u16 WtCnt; // 写指针
    u16 RdCnt;// 读指针
    u16 BufLen;缓冲尺寸
    u8 *RwBuf;// 读写缓冲

    } DF_RCV;
    复制代码
    对于这个结构来说非常简单,参数1是用于结束数据计数,参数2为处理数据计数,参数3为缓冲的大小,参数4为缓冲区指针,这里用指针是为了保证这个结构的独立,否则无法满足各种需求。

    实现函数:

    1. 初始化函数

      本函数用于对串口结构体中的各种数据进行初始化。
      /****************************************************************************

      • FunctionName : DFInit()
      • Description : 初始化
      • EntryParameter : None
      • ReturnValue : None
        ****************************************************************************/
        void DFInit(DF_RCV *pRcv)
        {
        u16 i;

      pRcv->WtCnt = 0x0000;
      pRcv->RdCnt = 0x0000;

      for (i=0; iBufLen; i++)
      {
      pRcv->RwBuf[i] = 0x00;
      }
      }
      复制代码

    2. 接收一字节数据

      本函数用于把串口中断接收的数据放入数据缓冲区中,并且接收计数器加1.
      /****************************************************************************

      • FunctionName : DFWriteByte()
      • Description : 数据接收(接收中断调用)
      • EntryParameter : None
      • ReturnValue : None
        ****************************************************************************/
        void DFWriteByte(u8 dat, DF_RCV *pRcv)
        {
        pRcv->RwBuf[pRcv->WtCnt] = dat; // 数据存入

      if (++(pRcv->WtCnt) >= pRcv->BufLen) // 缓冲判断
      {
      pRcv->WtCnt = 0;
      }
      }
      复制代码

    3. 读取一字节数据

      本函数用于从接收缓冲区中读取未处理的一字节数据,读计数器加1.
      /****************************************************************************

      • FunctionName : DFReadByte()
      • Description : 从接受缓冲中读取一字节数据
      • EntryParameter : None
      • ReturnValue : 返回读取数据
        ****************************************************************************/
        u8 DFReadByte(DF_RCV *pRcv)
        {
        u8 val = 0x00;

      val = pRcv->RwBuf[pRcv->RdCnt]; // 读取一字节
      if (++(pRcv->RdCnt) >= pRcv->BufLen)
      {
      pRcv->RdCnt = 0; // 清零
      }

      return val; // 返回数据
      }
      复制代码

    4. 获取缓冲区中未处理数据的长度

      本函数用于读取串口缓冲区中还未处理的数据的大小。
      /****************************************************************************

      • FunctionName : DFGetLen()
      • Description : 获取缓冲区中未读数据长度
      • EntryParameter : None
      • ReturnValue : 返回数据长度
        ****************************************************************************/
        u16 DFGetLen(DF_RCV *pRcv)
        {
        return ((pRcv->WtCnt >= pRcv->RdCnt) ? ((pRcv->WtCnt - pRcv->RdCnt)) :
        ((pRcv->WtCnt + pRcv->BufLen) - pRcv->RdCnt));
        }
        复制代码
        有了以上几个函数,串口的处理就非常简单了。这几个函数可以应用到任何串口中,也可以应用到任务微处理器上,一致非常简单,应用也非常方便。下面我们说说实际的应用。

    这部分代码为应用代码

    为了保证数据的相对独立和模块化,下面代码将写入应用代码中,和上面的程序不能放在相同的文件中。

    1. 数据定义

      首先需要定义一个缓冲区,这个缓冲区的大小根据实际应用定义,其大小一般为数据帧的最大值的2倍。之后需要定义一个DF_RCV数据,在这个数据中需要初始化这个结构图的参数。特别需要注意,缓冲的大小,和缓冲区指针赋值。
      u8 AU_Buf[AU_BUF_ZISE] = {0};
      DF_RCV AU_Rvc = {0, 0, AU_BUF_ZISE, AU_Buf};
      复制代码

    2. 编写数据接收函数

      本函数把串口数据放入缓冲区中,此函数必须在串口中断中调用。
      /****************************************************************************

      • FunctionName : AURcvDat()
      • Description : 串口数据接收(串口中断服务调用)
      • EntryParameter : None
      • ReturnValue : None
        ****************************************************************************/
        void AURcvDat(u8 dat)
        {
        DFWriteByte(dat, &AU_Rvc);
        }
        复制代码
    3. 数据处理函数

      本函数判断缓冲区中是否有数据,如果有,逐个读取并处理。
      /****************************************************************************

      • FunctionName : AUTaskCtrl()
      • Description : 通信数据处理
      • EntryParameter : None
      • ReturnValue : None
        ****************************************************************************/
        void AUTaskCtrl(void)
        {
        u8 tmpDat;
        u16 i, len = 0;
        static u8 sendMark = 0;

      len = DFGetLen(&AU_Rvc); // 获取未读数据长度
      for (i=0; i < len; i++)
      {
      tmpDat = DFReadByte(&AU_Rvc); // 读一字节数据
      AU_PrcRcvDat(tmpDat);
      }
      }

    复制代码

    函数AU_PrcRcvDat(tmpDat)是数据处理函数,首先是数据帧判断,如果是一帧数据,就进行相应操作,并把操作结果返回。了解了这个过程,串口的编程就变得非常简单。而且我们在读程序时,只要看懂一个串口处理过程,其他串口的程序就自然懂了,非常方便吧。
    关键字:单片机 串口数据处理
    编辑:什么鱼 引用地址:http://www.eeworld.com.cn/mcu/article_2016071427571.html

    展开全文
  • 热敏打印机工作原理

    2021-12-29 10:39:00
    热敏打印机打印机

    1、前言

    本文章主要讲述热敏打印机的基本工作原理,涉及到更流畅的逻辑功能本文不展示,但可以简单的教明白你热敏打印机的工作流程,完成类似毕业设计,学习科目的小项目算是卓卓有余;写这篇文章主要原因也是因为网上关于热敏打印机的文章,少之又少,工作中如果项目涉及到,又没有开发经验的话,希望这篇文章可以帮助到你。

    2、热敏打印机的优势

           打印均匀、运行平稳;机芯具有体积小, 工作电压宽、打印速度快、工作电源宽、打印精度高、寿命长、低耗电、噪音低,独特的立式机构设计,使得机芯具有易装纸,高可靠性等特点,且大大节约了产品空间高效等特点。

    3、打印机特性(摘重点)

    1、有效打印宽度(毫米):48

    2、点密度(点/毫米):8

    3、打印点数:384 点/行(市面上还有576 点/行,工作原理一样,只是加热脚多了)

    4、打印机工作电压:3.13~8.5V(重要,会影响打印浓度和走纸马达)

    5、支撑板最大温度:65°C

    4、打印机——步进电机

    步进电机是一种将电脉冲信号转换成相应角位移或相位移的电动机。每输入一个脉冲信号,转子就转动一个角度或前进一步,其输出的角位移或相位移与输入的脉冲数成正比,转速与脉冲频率成正比。因此,步进电动机又称脉冲电动机。

    4.1、

    步进电机相信很多人在开发项目中都有使用过,热敏打印机的步进电机一般采用“1-2相”或“2-2相”的驱动方式。

    4.2、

    打印机的步进电机需要步进电机驱动芯片来驱动马达,我使用的驱动芯片是HR8833,比较常见的一款驱动芯片。

    4.3、时序图

    1-2相:半步

    2-2相:全步

    4.4、

    只要主控给出驱动芯片需要的高低电平,驱动芯片就会输出相应的电平给到打印机机芯,就可以转动马达走纸。

    4.5、

    打印机走一点行需要走的相位。

    1-2相的驱动方式走8个相位马达才会转动一圈,但走一点行只需走4个相位,就是转半圈。

    2-2相的驱动方式走4个相位马达才会转动一圈,但走一点行只需走2个相位,就是转半圈。

     4.6、驱动程序

    1-2相

    void TestMotor(int i)
    {
      while(i--)
      {
    			PRINTER_MOTOR_A1_ON;     //1
    			PRINTER_MOTOR_A2_ON;
    			PRINTER_MOTOR_B1_ON;
    			PRINTER_MOTOR_B2_OFF;
    			udelay(400);
    			
    			PRINTER_MOTOR_A1_ON;     //2
    			PRINTER_MOTOR_A2_OFF;
    			PRINTER_MOTOR_B1_ON;
    			PRINTER_MOTOR_B2_ON;
    			udelay(400);
    
    			PRINTER_MOTOR_A1_ON;     //3
    			PRINTER_MOTOR_A2_OFF;
    			PRINTER_MOTOR_B1_ON;
    			PRINTER_MOTOR_B2_ON;
    			udelay(400);
    
    			PRINTER_MOTOR_A1_ON;     //4
    			PRINTER_MOTOR_A2_OFF;
    			PRINTER_MOTOR_B1_OFF;
    			PRINTER_MOTOR_B2_ON;
    			udelay(400);
    			
    			PRINTER_MOTOR_A1_ON;     //5
    			PRINTER_MOTOR_A2_ON;
    			PRINTER_MOTOR_B1_OFF;
    			PRINTER_MOTOR_B2_ON;
    			udelay(400);
    			
    			PRINTER_MOTOR_A1_OFF;     //6
    			PRINTER_MOTOR_A2_ON;
    			PRINTER_MOTOR_B1_OFF;
    			PRINTER_MOTOR_B2_ON;
    			udelay(400);
    			
    			PRINTER_MOTOR_A1_OFF;     //7
    			PRINTER_MOTOR_A2_ON;
    			PRINTER_MOTOR_B1_ON;
    			PRINTER_MOTOR_B2_ON;
    			udelay(400);
    			
    			PRINTER_MOTOR_A1_OFF;     //8
    			PRINTER_MOTOR_A2_ON;
    			PRINTER_MOTOR_B1_ON;
    			PRINTER_MOTOR_B2_OFF;
    			udelay(400);
    	}
    }

    2-2相

    void FirstFeed(int i)
    {
    	while(i--)
      {
    			PRINTER_MOTOR_A1_ON;     //1
    			PRINTER_MOTOR_A2_OFF;
    			PRINTER_MOTOR_B1_ON;
    			PRINTER_MOTOR_B2_OFF;
    			udelay(1000);
    			
    			PRINTER_MOTOR_A1_ON;     //2
    			PRINTER_MOTOR_A2_OFF;
    			PRINTER_MOTOR_B1_OFF;
    			PRINTER_MOTOR_B2_ON;
    			udelay(1000);
    
    			PRINTER_MOTOR_A1_OFF;     //3
    			PRINTER_MOTOR_A2_ON;
    			PRINTER_MOTOR_B1_OFF;
    			PRINTER_MOTOR_B2_ON;
    			udelay(1000);
    
    			PRINTER_MOTOR_A1_OFF;     //4
    			PRINTER_MOTOR_A2_ON;
    			PRINTER_MOTOR_B1_ON;
    			PRINTER_MOTOR_B2_OFF;
    			udelay(1000);
    	}
    }

    5、打印机——通信 

     5.1、SPI介绍

           打印机采用SPI通信,相信大家对SPI通信再熟悉不过了;SPI接口共有4根信号线,分别是:设备选择线、时钟线、串行输出数据线、串行输入数据线。

     

    (1)MOSI:主器件数据输出,从器件数据输入
    (2)MISO:主器件数据输入,从器件数据输出
    (3)SCLK:时钟信号,由主器件产生
    (4)/SS:从器件使能信号,由主器件控制

    5.2、优缺点

    优点:
         1)  支持全双工操作;
         2)  操作简单;
         3)  数据传输速率较高。
    缺点:
         1)  需要占用主机较多的口线(每个从机都需要一根片选线);
         2)  只支持单个主机。     
         3) 没有指定的流控制,没有应答机制确认是否接收到数据。

    5.3、SPI通信的四种模式

           SPI的四种模式,简单地讲就是设置SCLK时钟信号线的那种信号为有效信号

           SPI通信有4种不同的操作模式,不同的从设备可能在出厂是就是配置为某种模式,这是不能改变的;但我们的通信双方必须是工作在同一模式下,所以我们可以对我们的主设备的SPI模式进行配置,通过CPOL(时钟极性)和CPHA(时钟相位)来
    控制我们主设备的通信模式,具体如下:

    时钟极性(CPOL)定义了时钟空闲状态电平:

    CPOL=0,表示当SCLK=0时处于空闲态,所以有效状态就是SCLK处于高电平时
    CPOL=1,表示当SCLK=1时处于空闲态,所以有效状态就是SCLK处于低电平时

    时钟相位(CPHA)定义数据的采集时间。

    CPHA=0,在时钟的第一个跳变沿(上升沿或下降沿)进行数据采样。,在第2个边沿发送数据
    CPHA=1,在时钟的第二个跳变沿(上升沿或下降沿)进行数据采样。,在第1个边沿发送数据

    例:

    Mode0:CPOL=0,CPHA=0:此时空闲态时,SCLK处于低电平,数据采样是在第1个边沿,也就是SCLK由低电平到高电平的跳变,所以数据采样是在上升沿(准备数据),(发送数据)数据发送是在下降沿。

    Mode1:CPOL=0,CPHA=1:此时空闲态时,SCLK处于低电平,数据发送是在第1个边沿,也就是SCLK由低电平到高电平的跳变,所以数据采样是在下降沿,数据发送是在上升沿。

    Mode2:CPOL=1,CPHA=0:此时空闲态时,SCLK处于高电平,数据采集是在第1个边沿,也就是SCLK由高电平到低电平的跳变,所以数据采集是在下降沿,数据发送是在上升沿。

    Mode3:CPOL=1,CPHA=1:此时空闲态时,SCLK处于高电平,数据发送是在第1个边沿,也就是SCLK由高电平到低电平的跳变,所以数据采集是在上升沿,数据发送是在下降沿。


    5.4、时序图分析

     CLK低电平时空闲,CLK下降沿采集数据。

     5.5、程序

    程序就不放了,每个芯片的SPI的通信都会有点差别,不过都是大同小异,具体用什么芯片就找对应芯片的参考案列即可。打印机只负责接收,不负责发送,你只需要把你需要的数据扔过去就好了。

    6、打印机——数据锁存

    LATCH:锁存脚,数据发送到打印机,我们需要将数据锁住,然后加热。

    空闲的时候,我们把锁存脚置高,当你发送完数据之后,就把锁存脚拉低,延时1us之后,拉高即刻锁存数据;延时的时间其实也不需要1us,最短时间规格书有明确写,如下:

     延时时间100ns即可,但是延时长一点也无所谓的。

    7、打印机——加热

    加热其实就是一个管脚给出高低电平即可,加热把GPIO拉高,加一定的延时,一般不要太长,1ms差不多了,加热完把GPIO拉低;加热的浓度就是看你的延时时间多少,延时越长,浓度越高(特别注意加热过度,会烧坏加热值和加热板,延时时间一定要控制好)

    8、整体思路流程

    while(1)
    {
        1、发送数据
        2、锁存数据
        3、加热数据
        4、转动走纸马达,走一点行
    }

     9、附简单测试代码

    9.1、主程序

    	while(1)
    	{
    		if(!PRINTER_GPIO_KEY_READ)          //按按键出发
    		{
    			mdelay(50);
    			if(!PRINTER_GPIO_KEY_READ)
    				{
    					PRINTER_POWER_ON;       //打开打印机电源
    					mdelay(1000);           //适当延时
    				    TestPrinterGoOn();
    					PRINTER_POWER_OFF;      //关闭打印机电源
    				}
    		}
    	}	

    9.2、打印测试函数

    u8 const MOTOR_CTRL_BYTE_TABLE_2_2[5][4] =
    {
    	{1,0,1,0},
    	{1,0,0,1},
    	{0,1,0,1},
    	{0,1,1,0},
    	{0,0,0,0},
    };
    
    #define PRN_MOT_OUT_2_2(x)      do{if(MOTOR_CTRL_BYTE_TABLE_2_2[x][0])GPIO_SetBits(GPIOC,     
             GPIO_Pin_6);else GPIO_ResetBits(GPIOC, GPIO_Pin_6);\																 
             if(MOTOR_CTRL_BYTE_TABLE_2_2[x][1])GPIO_SetBits(GPIOC, GPIO_Pin_7);else 
             GPIO_ResetBits(GPIOC, GPIO_Pin_7);\															 
             if(MOTOR_CTRL_BYTE_TABLE_2_2[x][2])GPIO_SetBits(GPIOC, GPIO_Pin_8);else 
             GPIO_ResetBits(GPIOC, GPIO_Pin_8);\																 
             if(MOTOR_CTRL_BYTE_TABLE_2_2[x][3])GPIO_SetBits(GPIOC, GPIO_Pin_9);else 
             GPIO_ResetBits(GPIOC, GPIO_Pin_9);\}while(0)              //转动马达 直接写寄存器
    
    static const char *mystr[]={
        "     VERY GOOD BOY                             ",
        "VB B B B B B B B B B B B B B B B B B B B B B B ",
        "M C C C C C C C C C C C C C C C C C C C C C C C",
        "U D D D D D D D D D D D D D D D D D D D D D D D",
        "TE E E E E E E E E E E E E E E E E E E E E E E ",
        "GFF  FF  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
        "MGG GGGGG GGGGGG XGGGGG ZGGGGG YGGGGG WGGG GGGG",
    };
    
    static int extract_32X32(uint8_t *str,uint8_t *otmep,uint8_t *outbuf,int *olen)
    {
        uint8_t  *ptr = str;
        uint8_t  *cp = str;
        uint8_t ch;
        int k = 0;
        for (int j = 0; j < PRINTER_LINE_LEN; j++) 
    	  {  				//一行有多少个字符	 
            ptr = str + k;   				//一行中的第几个字  
            if (*ptr < 0x80) { //英文
                if (*ptr < 0x21) 
    						{
                    j++;      //一个字节占两个字节
                    k++;
                    //continue;
                } 
    						else 
    						{					
                    cp = (uint8_t *)&ASCII16x32[((*ptr) - 0x21) * 64];
                    memcpy(otmep, cp,64);
                    for(int i = 0; i < 32; i++) 
    							  {
                        memcpy(&outbuf[i*PRINTER_LINE_LEN+ j],&otmep[i * 2], 2);						
                    }
                    j++;
                    k++;
                } 
                
            }
        }
    }
    
    void TestPrinterGoOn(void)
    {
            static int pos = 0;         //解析字符数据行数
            int i = 0; 
            int nlines = 32;
            u32 g_motor_phase = 0;
    		uint8_t *bux = malloc(48 * 48);
    		uint8_t *tmx = malloc(48 * 48);
    		int strlen = sizeof(mystr)/sizeof(mystr[0]);
    		memset(bux,0,48 * 48);
    		memset(tmx,0,48 * 48);
    	    FirstFeed(20);
    		while(pos < 7)
    		{
                //mystr数组有七行,将每一行字符分解为32行的数据放到bux里面。
    			extract_32X32((uint8_t *)mystr[pos%strlen],tmx,bux,NULL);
                mdelay(10); 
    			while(nlines)
    			{
    				PRN_MOT_OUT_2_2(g_motor_phase);
    				udelay(400);                            //换一次相需要停一下,太快
    		        g_motor_phase = (g_motor_phase + 1) & 0x03;
    				if ((g_motor_phase % 2) == 0)           //走两个相就发一次数据
    				{
    					prtdrv_hspi_write(bux + i,48);		//一行发送48个数据
    					PRN_LATCH_PLUS;
    					PRINTER_STB_ON;
    					udelay(1500);
    					PRINTER_STB_OFF;
    					i += 48;
    					nlines--;             //发送一次减一行,总共32行
    				}
    			}
    			TestMotor(5);
    			pos++;
    			nlines = 32;
    			i = 0;
    		}
    		TestMotor(100);
    		pos = 0;
    		printf("print end\r\n");
    }

    9.3、

    ASCII16x32这个字符库的头文件我扔到网盘上,调试的话自行去下载:
    链接:https://pan.baidu.com/s/1qjDiM7MXQDMW9aK3vjVUFA 
    提取码:i038 

    10、总结

          热敏打印机其实玩起来也是蛮有意思的,有兴趣的可以自己买一个开发玩玩,也不是很难,市面很多设备都有应用到打印机,最多的就是付款的时候用到,都是用这种热敏打印机;做毕业的话用热敏打印机杠杠的完爆身边同学的流水灯。

    展开全文
  • 写这篇文章是为了记录RS232串口通讯,当时有个央企项目里需要实现自动抓取RS232串口数据,需要支持主要浏览器:Chrome,Firefox,IE8以上等。看了很多有关rs232的资料和也找了很多方法,终于找到了解决方案,实现了...
  • 有关热敏打印机接口程序

    千次阅读 2008-10-28 15:25:00
    /* ***************** * 卡交易数据结构 ********************* */typedef struct tag_StrRecoder //交易数据结构{ unsigned char DealNo[4]; //卡号 0x12 0x34 0x56 0x7F;目的是显
  • Linux串口读取与解析

    2021-02-02 10:27:10
    串口协议包的接收及解析处理 对于串口接收问题前面之前有文章介绍过串口缓存机制的应用。当然这里不应用缓存机制也是完全可行的。... 将接收到的数据全部存入缓存,从缓存中提取数据并做处理。 ...
  • 截取打印

    2007-07-21 23:45:00
    以前用户在打印网页内容时,一般直接选择IE的打印功能就行。有的WEB页面上也有“打印此文档”的链接...我也仅仅提供了一个思路,因为家中未装打印机,所以未尝试。如果你们在实际使用中发现有问题,希望给予指正了。  
  • 串口协议包的接收及解析处理

    千次阅读 2020-03-10 15:34:07
    串口协议包的接收及解析处理 串口是单片机应用中应用最多的外设之一。很多电子硬件都会提供串口,如蓝牙模块、WIFI模块、串口屏等。如果我们想开发基于串口通信的产品或使用基于串口通信的电子硬件时,都避不开通信...
  • 1.1运行环境 树莓派:型号为树莓派3B+,使用的镜像为:2018-04-18-raspbian-stretch.img 蓝牙打印机:深圳市邦贝特科技有限公司的DL58蓝牙热敏手持打印机 ...提取码:ksvp 1.2 使用工具 5寸HDMI显示屏、键...
  • 第一部分:介绍如何与Zebar进行连接,把ZPL指令或者模板文件发送到斑马打印机进行打印。 第二部分:介绍如何接收Zebar进行打印之后如何得到斑马打印机的反馈信息,防止打印出错的情况下继续进行工业的操作。需要用...
  • 树莓派:获取传感器数据

    千次阅读 2019-12-27 16:58:44
    树莓派:获取传感器数据 前言 物联网开发中分享一下在树莓派实验中遇到的问题和心得 正文 实验基于树莓派3B开发板,通过USB转串口连接倾斜度传感器。 首先连接好设备,将树莓派插上网线或配置wifi,使用VNC远程登陆...
  • 文章目录前言一、开发前准备二、开发java项目时所依赖的RXTXcom.jar包(window)三、开发java代码...本次的背景是在一个服务器数据会从R422串口发送数据到R232串口服务器。 开发任务就是在接收数据的服务器上开发一个java
  • stm32开发3D打印机(二)——方向、相关资料链接

    千次阅读 多人点赞 2020-08-14 21:09:45
    首先需要正确的方向,而不是盲目的乱肝,在这编文章里,我将写下3D打印机如何运作及之后写文章的大致方向 打印机是如何运作的 首先需要一个3D模型,一般后缀名为stl,在切片软件完成切片,生成后缀为gcode的G代码...
  • 这篇文章为读取打印文件(后缀为...提取码:6718 那么从这里,我们完成了对TF卡的初始化及其FATFS文件系统初始化。 现在我们可以调用FATFS内的函数。 首先我们需要知道如何打开文件,并读取文件的代码 首先对SD卡初
  • 蓝牙技术在打印机上的应用使传统打印机摆脱了连接带来的不便,实现了无线打印,并通过移动打印提高了便利性和生产率,从而有助于提高经济效益。各种外卖平台的开发要求打印机具有多个蓝牙连接。当前,具有BC04蓝牙...
  • 串口通讯协议

    万次阅读 多人点赞 2018-03-02 10:02:47
    文章转载自http://www.cnblogs.com/firege/p/5805753.html20.1 串口通讯协议简介串口通讯(Serial Communication)是一种设备间非常常用的串行通讯方式,因为它简单便捷,大部分电子设备都支持该通讯方式,电子工程师...
  • USB转串口与虚拟串口相关

    千次阅读 2019-10-29 16:18:34
    不是原创,网上查询整理。 目录 一、串口与并口 ...(一)串行接口(即COM口): 简称串口,也称串行通信接口。按电气标准及协议来分包括RS-232-C、RS-422、RS485、USB、TTL等。 RS-232-C、RS-422...
  • 在各种软件系统中,数据打印也是常用的功能之一,一般来说会对查询的数据结果导出到excel,还会对查询的数据结果直接打印,在Qt中提供了打印机类QPrinter,在printsupport组件中,可以将文本内容传入QTextDocument,...
  • Window CE 打印机驱动实现

    千次阅读 2010-03-08 22:22:00
    转自 ... Window CE 打印机驱动实现2008-03-20 嵌入式在线 收藏 | 打印 Windows CE 2.0及其以上版本包括对打印机的支持。Windows CE操作系统使用的打印模型是为基于WindowsCE的桌面平台定
  • 若按数据传输的顺序来划分的话,可以分为并行传输和串行传输;在串行传输时,若按通信两端的同步方式来划分的话可以分为同步传输和异步传输;若按数据传输的方向可以分为单工、半双工、全双工传输;若按照传输信号的...
  • C#串口通信模块使用

    千次阅读 多人点赞 2020-04-06 16:09:22
    C#串口通信模块使用
  • 232 DB9连接线3、Microsoft .Net提供的串口通信控件SerialPort介绍4、FA1204电子天平与PC机之间串口通信流程图设计4.1、基本代码示例4.1.1、串口通信参数设置及其串口的打开4.1.2、串口通信中数据帧的解析4.2、串口...
  • 串口通讯协议简介1.1 物理层1.1.1 电平标准1.1.2 RS-232 信号线1.2 协议层1.2.1 波特率1.2.2 通讯的起始和停止信号1.2.3 有效数据1.2.4 数据校验2. STM32 的 USART 简介3. USART 功能框图3.1 校验控制3.2 中断控制4...
  • 然而,opencl尚未应用到硬拷贝打印机和多功能打印机(mfp)市场。传统上,打印机/mfp市场使用全定制系统级芯片(soc或asic)、专用集成电路进行图像处理。在本文中,我们探讨了配合alterasoc fpga(现场可编程门阵列...
  • 计算机和打印机之间的连接方式:usb口、串口、并口、网口、蓝牙等。 由于工作中使用的是usb口的热敏打印机,所以就以此类型做介绍。(目前市场上常用的是usb口打印机) 热敏打印机工作原理:是打印头上安装有...
  • 文章内容:完成一个STM32的USART串口通讯程序(查询方式即可,暂不要求采用中断方式),要求:1)设置波特率为115200,1位停止位,无校验位;2)STM32系统给上位机(win10)连续发送“hello windows!”。win10采用...
  • 1.串口通信(转)

    千次阅读 2017-06-04 12:38:12
    转(原文出处:... 第20章 USART—串口通讯 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/firege

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,433
精华内容 973
关键字:

串口打印机数据提取