我的快乐小窝 > 百科常识 >热敏打印机心电图形怎么快速打印 【打印方法】

热敏打印机心电图形怎么快速打印 【打印方法】

随着电子技术的发展,打印机已经广泛应用于各个领域,成为各种智能数字仪器的重要数据输出手段。其中,热敏打印机以其体积小、重量轻、可靠性高、打印字符清晰、无噪音、送纸均匀等独特特点越来越受欢迎,率先成为心电图机等小型医疗仪器。

以作者课题组研制的12导联同步心电图机为例,介绍了应用串行热敏打印机,以普通52单片机为主控芯片,实现多种方式的心电图打印,并着重描述了12导联同步打印模式的程序实现方案。

1系统硬件设计

系统配有内置数码打印机,主要由热敏打印头(W216-QS)和步进电机组成。W126-QS点阵热敏打印头的打印数据采用串行输入,不仅包含C-MOS集成芯片组成的1728移位寄存器,还包含高密度厚膜工艺制作的发热元件。这些加热元件由锁存和开关晶体管驱动,可以在热敏打印纸上产生1728个点,对应的打印宽度为216mm,分辨率为8 dot/mm,热敏打印头所需的打印数据为串行数据,数据传输遵循SPI口的通信协议。系统采用端口线模拟SPI工作模式与打印头通信,电路如图1所示。

考虑到52单片机有256字节的内部RAM,系统还扩展了一个HM628128来存储12路心电数据和中间转换结果。

2系统软件编写

数字打印的两个关键问题:如何将心电数据转换成打印数据;如果数据输出到数字打印机。通常的方法是将数据转换后输出到打印机进行打印。这节省了存储空间;缺点是程序实现复杂,通用性差(不同打印方式的数据输出程序不一样),系统功能不易扩展,数据转换输出要考虑打印点的位置,每输出一点数据就要调用一次程序,增加了系统开销。系统软件中没有采用这种方法,而是在内存中打开一个216字节的打印缓冲区,热敏打印头的1728个点对应2168位数据,每次要打印的第一行数据转换后输出。这样在转换数据时只需要考虑打印位置和方式,输出程序只需要逐位输出216字节的数据,每打印一行数据只需要调用一次输出子程序,减少了系统开销。缺点是占用系统资源,在12通道同步打印中尤为明显。

系统程序实现了两次打印12导联数据、每次打印6导联数据、同步打印12导联数据和垂直打印三种打印模式(打印效果如图2所示)。在每个打印程序中,模拟SPI口向数字打印机发送打印数据的子程序是共享的,区别在于如何将心电数据转换成打印数据。

2.1 I/O端口线路模拟SPI端口

SPI(串行外设接口)总线串口是摩托罗拉公司提出的同步串行外设接口。它通过时钟线(SPKCLK)、数据输出线(SPIMISO)、数据输出线(SPIMOSI)和片选线(CS)四条线进行通信,内部通过SPIDAT寄存器完成串并/并串转换。它主要工作在主从系统中。一个主设备可以带多个从设备,主设备通过片选控制总线冲突,使得同一时间只有一个从设备与从设备交换数据。

系统使用的串行热敏阵列打印机采用SPI时序进行数据传输,而普通的52单片机没有SPI口,所以采用I/O口线来模拟SPI时序。考虑到系统中作为主设备的MCU总是发送数据,而作为唯一从设备的数码打印机总是接收数据,所以只需要用接口线模拟SPI口的时钟线(SPIKCLK)和数据输出线(SPIMOSI),程序就可以模拟SPIDAT来完成并串转换。如上所述,打印头打印的数据量为1728点,分辨率为8mm/mV,对应216字节的数据。为此,从内部RAM中分配216字节的空间作为打印缓冲区,程序依次从缓冲区读取数据。在模拟时钟线的控制下,将并行数据转换成的串行数据逐位送到打印机的移位寄存器,然后发送锁存信号和打印头的加热脉冲选通,从而在热敏打印纸上打印出一行心电图。SPI端口仿真程序如下:

输出:

现场保护

LCALL INTRAM初始化内部打印缓冲区。

MOV R0,# Dat _ Buff将R0初始化为缓冲器的最后一个地址。

DAT_OUT:

MOV A,@ R0从缓冲区读取数据

MOV R7,# 08H初始化R7以控制并行/串行数据转换。

续CHG:

RRC A;通过右移ACC周期实现并串转换

MOV P1.3,C发送串行数据到打印机。

SETB p 1.1;模拟SPI时钟

nototherwiseprovided(for)除非另有规定

CLR P1.1

CHG的DJNZ R7判断1个字节的数据是否已被转换。

DEC R0寻址下一个字节

CJNE R0,#15H,DAT _ OUT判断是否所有数据都已转换。

CLR P1.2产生数据锁存信号

nototherwiseprovided(for)除非另有规定

SETB P1.2

nototherwiseprovided(for)除非另有规定

CLR P1.0产生加热脉冲

l打电话热;调用加热延迟程序

SETB P1.1

LCALL MOTOR _ RUN步进电机送纸

还原现场

浸水使柔软

2.2打印算法

数字打印机本质上实现了数据与打印点的对应,也就是说8位心电数据的数值范围是0 ~ 255,对应热敏打印纸上的256个点,纸上的一个点被热敏单元涂黑显示数据的大小。因此,需要将表示实际心电图大小的数据(以下称为原始数据)转换为表示加热点位置的数据(以下称为位置数据),并通过位置数据的控制依次打印心电图数据对应的点,从而获得心电图。但是由于系统的A/D转换器得到的心电数据是离散的,如果只打印出它们对应的点,得到的只是离散的点。为了获得连续的心电图,需要按照一定的算法将相邻的离散点连接起来。对于垂直打印和水平打印,连接离散点的算法是不同的。由于篇幅的限制,在下面描述的打印方式的实现中,只详细描述了横向12导联同步打印和纵向打印,而6导联打印只介绍其实现思路。

2.2.1水平6引脚印刷

心电图纸长度为216mm,每个导联心电图信号分配32mm,对应打印缓冲区中连续的32个字节,打印数据转换后的位置数据存储在这32个字节中。12导联心电图数据分为两组,打印一组时打印剩余的6导联数据。具体实现过程可以参考横向12引线印刷模式。

2.2.2水平12引线同步印刷

在6导联打印过程中注意到,在大多数情况下,只有QRS波的主峰能够充满整个空间,其他波段的振幅较小,可以提供更多的信息。另外,单独打印12个导联也不利于医生同时比较不同导联的心电图波形。而使用12导联同步打印,虽然会有一些重叠的波形,但对一些心脏疾病的诊断作用不大,可以得到更直观的结果。

12导联同步打印程序的基本思路与6导联同步打印相同,但不同的是,12个导联的数据同时打印在216mm宽的打印纸上,这就不可避免地导致不同导联心电图图形的重叠和相应存储单元的重复使用。如果简单应用6导联打印程序,前一导联的数据会被相邻导联的数据冲掉,导致图形无法正确显示。图3列出了为每个导联分配的热敏打印纸空间和缓冲存储器单元(这里假设缓冲地址为0x1DH~0xEDH)。从图3中可以看出,除了第一行的第一个16毫米的间距和第六行的最后一个16毫米的间距之外,打印纸的其他所有间距都由两根导线共享。内部RAM的使用类似。为此,在外部RAM中打开一个内部打印缓冲区的图像区(大小为216字节,单元地址的低8位与存储器中对应的单元相同,例如内部RAM0x1DH单元对应外部RAM0xXX1DH),将12个导联分为两组:一组(I、III、aVL、V1、V3、V5)仍存储在内部存储器中,另一组(II、AVF、V2)。这样既能解决上述问题,又能节省内部资源,降低编程难度。

如上所述,不同导联占用不同的打印空间,所以对于某一导联心电信号,首先要确定打印区间,然后再确定打印数据在该区间内的相对位置。

假设一个导联占用打印空间的起始字节是第n个字节,要打印的心电图数据是m,将m除以8得到商k,余数为1,那么这个心电图数据对应的是点对数(n-k)字节的第一位。即,对应于ECG数据的位置数据是第(n-k)个字节(该字节的1位被设置为1,其他位被清零)。因此,在打印该ECG数据时,只有该导联要传输的32字节打印数据中的第(n-k)个字节的第一位为1,其他均为0。

类似于液晶显示,对于一个导联的心电信号,要打印心电,必须用导线连接两个心电数据。也就是说,对于一个心电图曲线,初始显示数据点在初始列中只显示1个点;从第二个数据点开始,从上一个数据点到当前数据点的线段应显示在下一列中。在热敏打印纸上,显示两个数据点之间的所有点都被加热,两点之间的数据设置为1对应内存。

对于导联1心电信号,先读取第一个心电数据,转换成32字节位置数据,直接打印。从第二个心电数据开始,除了转换成位置数据之外,还要和前面的数据进行比较,从一个小数对应的位置数据中减去一个大数对应的位置数据,然后把结果加到一个大数对应的位置数据上,结果就是这个心电数据应该打出的32字节的数据,也就是完成了和前面的心电数据连接的操作。发现连接算法只影响两个连接位置的数据中非零字节之间的数据。为了简化计算,只需要减去这些字节,而不需要计算所有32个字节。对于加法来说,只需要将一个大数对应的位置数据中的非零字节相加,即增加一个字节。

比如V6导联心电信号,前一个数据是37H,后一个数据是55H,V6导联分配的打印间隔是1DH~3DH。根据位置数据转换算法,37H的位置数据为37H字节,其内容为80H,其他字节为00H。55H的位置数据是33H字节,包含20H,其他字节是00H。既然37H〈55H,那么应该是心电图数据55H的位置数据减去33H的位置数据。计算如图4所示。

2.3垂直打印程序

垂直打印可以同步显示12导联数据,不会重叠。这样,医生可以同时参考和比较各个波形的变化趋势,为疾病的诊断提供了方便。

热敏打印纸的宽度为216mm,分辨率为8dot/mm,这样最多可以打印1728个点,这些点对应一个导联的1728个连续的心电图数据,即导联序列中的第n个数据对应一个线图中的第n个点。与模式打印相比,垂直打印仍然需要解决连接离散点的问题;但相对于横向顺序打印方式,即按时间顺序打印打印点,难点在于需要同时打印不同时间相同值的多个点,即按空间顺序打印打印点。

首先定义一个存储单元存储扫描值,扫描值从当前通道数据的最大值变为0,然后依次与该通道的各个数据进行比较:如果相同,则跟踪对应点;小的不被追查;如果很大,则需要将当前心电数据的两个相邻点与扫描值进行比较。只要其中一个大于扫描值,对应点就会被跟踪,内存中对应的数据位置就会被置1。

例如,如果打印的内存缓冲区的第一个字节为n,大小为216字节,当前导联序列中的第M个心电图数据为V,此时的扫描值为W: VW,继续比较第M个数据;v=w,则对应点需要被追踪;第五章.

本文来自网络,不代表本站立场,转载请注明出处:https://www.51din.com/a/74336.html

热敏打印机心电图形怎么快速打印,【打印方法】

我的快乐小窝后续将为您提供丰富、全面的关于热敏打印机心电图形怎么快速打印,【打印方法】内容,让您第一时间了解到关于热敏打印机心电图形怎么快速打印,【打印方法】的热门信息。小编将持续从百度新闻、搜狗百科、微博热搜、知乎热门问答以及部分合作站点渠道收集和补充完善信息。