大家好,玲玲来为大家解答以上问题,心电图纸的安装方法视频,心电图纸很多人还不知道,现在让我们一起来看看吧!
随着电子技术的发展,打印机已经广泛应用于各个领域,成为各种智能数字仪器的重要数据输出手段。其中,热敏打印机以其体积小、重量轻、可靠性高、打印字符清晰、无噪音、送纸均匀等独特特点越来越受欢迎,率先成为心电图机等小型医疗仪器。
以作者所在课题组研制的12导联同步心电图机为例,介绍了应用以普通52单片机为主控芯片的串行热敏打印机实现各种心电图打印,并重点介绍了12导联同步打印的程序实现方案。
1系统硬件设计
系统配有内置数码打印机,主要由热敏打印头(W216-QS)和步进电机组成。W126-QS点阵热敏打印头的打印数据采用串行输入,不仅包含C-MOS集成芯片组成的1728移位寄存器,还包含高密度厚膜工艺制作的发热元件。这些加热元件由锁存和开关晶体管驱动,可以在热敏打印纸上产生1728个点,对应的打印宽度为216mm,分辨率为8dot/mm,热敏打印头所需的打印数据为串行数据,数据传输遵循SPI口的通信协议。系统采用端口线模拟SPI的工作模式与打印头通信,电路如图1所示。
考虑到52单片机内部RAM为256字节,系统还扩展了一个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总是发送数据,而作为唯一从设备的数码打印机总是接收数据,所以只需要用port线模拟SPI口的时钟线(SPIKCLK)和数据输出线(SPIMOSI),程序模拟SPIDAT完成并串转换。如前所述,打印头打印的数据点数为1728,分辨率为8mm/mV,相当于216字节的数据。因此,从内部RAM中分配216字节的空间作为打印缓冲区。程序依次从缓冲区读取数据,在模拟时钟线的控制下,将并行数据转换成的串行数据逐位送到打印机的移位寄存器。之后,发送LATCH锁存信号和打印头加热脉冲选通,这样就可以在热敏打印纸上打印一行心电图。SPI仿真程序如下:
输出:
现场保护
LCALL INTRAM初始化内部打印缓冲区
MOV R0,# Dat _ BuffR0被初始化为缓冲器的最后一个地址。
DAT_OUT:
MOV A,@ R0从缓冲区读取数据
MOV R7,# 08HR7被初始化以控制并行/串行数据转换。
续CHG:
RRC A;ACC循环右移实现并串转换。
Pv1.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
l呼叫电机
恢复现场
RET
2.2 打印算法
数字打印机实质上实现了数据与打印点的对应,也就是说8位心电数据数值范围为0~255,对应于热敏打印纸上的256点,通过加热敏单元使纸上某点变黑显示数据的大小。这就需要将表征实际心电大小的数据(以下称为原始数据)转换成能够指示加热点位置的数据(以下称为位置数据),通过位置数据的控制将心电数据对应的点依次打印出来,就可获得心电图。但是由于系统模数转换器获得的心电数据是离散的,如果仅将它们对应的点打印出来,得到只是一些离散的点,要想获得连续的心电图形,需要将相邻的离散点按照一定的算法将它们连接起来,对于纵向打印方式和横向打印方式,离散点连线算法是不同的。限于篇幅,在下面介绍打印方式的实现中,仅对横向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中可以看出除了I导联前16mm空间和V6导联的后16mm空间没有被复用,打印纸的其它空间都是被两个导联共用。内部RAM使用情况也与之类似。为此在外部RAM开辟一个内部打印缓冲区的影像区(大小为216字节,单元地址的低8位与内存相应单元相同,如内部RAM 0x1DH单元与外部RAM 0xXX1DH相对应),将12导联分为两组:一组(I,III,aVL,V1,V3,V5)仍然存储于内部存储器,而另一组(II,aVF,V2,V4,V6)存储于外部影像区,在12导联一线数据转换完要打印时,将两部分按照对应单元相与即可。这样做不但可以解决上述问题,而且节省了内部资源、降低程序编写的难度。
如前所述不同导联所占的打印空间不同,所以,对于某导联心电信号,先要确定其打印区间,然后再确定打印数据在该区间的相对位置。
假定某导联所占打印空间的起始字节为第n个字节,而要打印的心电数据为m,将m除以8,得商k,余数为1,则此心电数据对应点对数(n-k)字节的第1位。即该心电数据对应的位置数据为第(n-k)字节(该字节的1位置1,其它位清零)。因此,打印此心电数据时,该导联所要传送的32字节打印数据中只有第(n-k)字节的第1位为1,其他都为0。
与液晶显示相类似,对于一个导联的心电信号,要实现心电图打印,必须将盯连两个心电数据用线连接。即对于一条心电曲线,起始显示数据点在起始列只显示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:①v>w,则继续比较第m+1个数据;②v=w,则对应点需要被描记;③v。
本文到此结束,希望对大家有所帮助。