基于热敏打印机的心电图形快速打印方法的研究及应用实例
时间:10-30
来源:互联网
点击:
DAT_OUT: | |
MOV A,@R0 ;从缓冲区读数据 | |
MOV R7,#08H ;初始化R7控制并/串数据转换 | |
CONT_CHG: | |
RRC A ;对ACC循环右移实现并-串转换 | |
MOV P1.3,C 将串行数据送至打印机 | |
SETB P1.1 ;模拟SPI时钟 | |
NOP | |
CLR P1.1 | |
DJNZ R7,CONT_CHG ;判断1字节数据是否转换完 | |
DEC R0 ;寻址下一字节 | |
CJNE R0,#15H,DAT_OUT;判断数据是否全部转换完 | |
CLR P1.2 ;产生数据锁存信号 | |
NOP | |
SETB P1.2 | |
NOP | |
CLR P1.0 ;产生加热脉冲 | |
LCALL HEATDLY ;调用加热延时程序 | |
SETB P1.1 | |
LCALL MOTOR_RUN ;步进电机走纸 | |
恢复现场 | |
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个字节。对于加法,也只需将大数对应位置数据中的非零字节进行加法,即进行单字节加法。 |
ADC 电子 单片机 步进电机 电路 总线 MCU 相关文章:
- 低价位嵌入式处理开发套件--Spartan-3E 1600E (07-07)
- Broadcom推出高清卫星机顶盒单芯片系统解决方案(08-16)
- 一种基于ADC的高性价比键盘输入设计(07-01)
- 基于ADC技术的MCU系统数据采集方案(11-09)
- AVR 模数(AD)转换程序(11-19)
- 基于C2000内置12位ADC的电能计量方案(11-17)