基于ARM数字式人体脉搏仪设计

上传人:无*** 文档编号:99492321 上传时间:2022-06-01 格式:DOC 页数:23 大小:196.50KB
收藏 版权申诉 举报 下载
基于ARM数字式人体脉搏仪设计_第1页
第1页 / 共23页
基于ARM数字式人体脉搏仪设计_第2页
第2页 / 共23页
基于ARM数字式人体脉搏仪设计_第3页
第3页 / 共23页
资源描述:

《基于ARM数字式人体脉搏仪设计》由会员分享,可在线阅读,更多相关《基于ARM数字式人体脉搏仪设计(23页珍藏版)》请在装配图网上搜索。

1、-嵌入式系统设计题目:基于ARM的数字式人体脉搏仪的设计专业:电气工程及其自动化 *:K030941441 :雄 2021年11月14日. z-一 数字式人体脉搏器测量系统总体方案设计1.1 系统硬件电路设计方案数字式人体脉搏器是通过脉搏传感器采集脉搏信息输出电压信号,经信号放大电路对其进展放大。然后,将放大后的脉搏信号通过A/D转换模块转换为单片机易于处理的脉冲信号。通过对单片机进展编程来实现对脉搏波动频率的测量和计算,最终在显示电路中直观的显示出来。硬件原理框图如图1.1所示: 图1.1 数字式人体脉搏仪测量系统硬件原理框图由图可知,本系统硬件局部主要由以下局部构成:脉搏传感器局部、信号放

2、大电路局部、A/D转换电路局部、单片机处理电路局部及显示电路局部。其中各局部实现功能如下:1脉搏传感器局部。选用适宜的脉搏传感器,将脉搏信号转换成电信号输出。脉搏传感器的精度、灵敏度、抗干扰能力及安装方式决定了脉搏测量精度,因此其选型对整个设计具有决定性的作用。2信号放大电路局部。脉搏传感器出来的电压信号较弱,一般在毫伏级,需要进展放大。所以,设计信号放大电路,将脉搏传感器出来的信号进展放大,使之成为一个幅值适当的信号,便于后续电路的处理。3A/D转换电路局部。单片机是数字信号处理工具,输入单片机的信号必须是离散的数字信号或者是脉冲信号,经A/D转化,便于单片机处理。4单片机处理电路局部。本设

3、计作为一个简单脉搏测量仪,最后需给出脉搏波动频率,以单片机作为信息处理中心,通过对单片机进展编程,完成信号输入检测、信息分析处理及信息显示。5显示电路局部。单片机处理得到的脉搏波动频率信息,最后在显示电路中直观地显示出来。所以,需要选用适宜的显示设备及显示电路,来实现对脉搏波动频率信息的显示。1.1.1 脉搏传感器的选择传感器又称为换能器、变换器等。脉搏传感器是脉搏检测系统中重要的组成局部,其根本功能是将切脉压力和桡动脉搏动压力这样一些物理量(非电量)转换成为便于测量的电量。脉搏传感器的精度、灵敏度、抗干扰能力及安装方式决定了脉搏测量精度,因此其选型对整个设计具有决定性的作用。目前,脉搏信号的

4、测量方式主要有:1光电脉搏波传感器。血管不受压力时,血流均匀,反射光也比拟均匀,故传感器无脉搏信号输出;当血管受压血液不流动时,传感器也无输出信号;只有当血管受到挤压,血管中的血液断续流动时,反射光也随之变化,这时传感器输出脉搏信号,到达了测量脉搏的作用。这种传感器的特点是构造简单、可靠性高、抗干扰能力强,主要用于测量脉搏的跳动次数。人体不同部位的脉搏波波形存在差异,光电脉搏波传感器不适合用于提取不同部位的脉搏波信号。2压力传感器测量。压电传感器主要应用在加速度、压力和力等的测量中。压电式加速度传感器是一种常用的加速度计。它具有构造简单、体积小、重量轻、使用寿命长等优异的特点。压电式加速度传感

5、器在飞机、汽车、船舶、桥梁和建筑的振动和冲击测量中已经得到了广泛的应用,特别是航空和宇航领域中更有它的特殊地位。压电式传感器也可以用来测量发动机部燃烧压力的测量与真空度的测量。也可以用于军事工业,例如用它来测量枪炮子弹在膛中击发的一瞬间的膛压的变化和炮口的冲击波压力。它既可以用来测量大的压力,也可以用来测量微小的压力。图1.2 信号发生局部其测量原理是,将测力传感器的受力端压在人体桡动脉处,模仿人的指头。这种方式通常采用压阻式传感器,它具有抗干扰能力强的特点,但由于动脉血管产生的力很小,故量程小,抗冲击力不强。脉搏信号还表现为皮肤振动,因此可以用加速度传感器进展检测,其特点是构造简单、体积小、

6、波形测量精度较高。本设计中的脉搏传感器用MP*4115压力传感器3,如图2.2所示。表2.1说明了引脚连接,脚1接运算放大电路输入端,脚2接地,脚3接+5V电源等。表2.2,2.3分别为传感器的一些参数。表1.1 MP*4115引脚功能Vout地VsN/CN/CN/C表1.2 最大额定值(Tc=25)参 数符 号数 值单 位 最大压力P1P2Pma*400KPa 存贮温度Tstg-40+125 操作温度TA-40+125表1.3 传感器工作特性参数 VS=5.1Vdc,T=25参 数符 号最 小典 型最 大单 位压力围Pop15-115KPa供电电压Vs4.855.15.35Vdc 供电电流L

7、o-7.010mAdc 最大压力偏置 085 Vs=5.0VVpss0.1350.2040.273Vdc满量程输出 085Vs=5.0VVoff4.7254.7944.863Vdc满量程比例 085Vs=5.0V VFSS4.5214.5904.695Vdc精度 085 -1.5%VPSS 灵敏度V/P-45.9-mV/KPa响应时间10%90%tR-1.0-ms 上升报警时间-20-ms偏置稳定性 -0.5-%VFSS1.1.2 信号放大电路的选择脉搏传感器出来的电压信号较弱,一般在毫伏级,需要对其进展放大。所以,设计信号放大电路,将脉搏传感器出来的信号进展放大,使之成为一个幅值适当的信号,

8、便于后续电路的处理。MP*4115型压电式脉搏传感器输出电压大约为-10mv40mv,在后续电路中需要将其通过差动式放大电路,将信号放大,然后通过A/D转换电路转换为数字脉冲信号。差动放大电路广泛地应用于模拟集成电路中,它具有很高的共模抑制比。诸如由电源波动、温度变化等外界干扰都会引起工作点不稳定,它们都可以看作是一种共模信号。差动放大电路能抑制共模信号的放大,对上述变化有良好的适应性,使放大器有较高的稳定度。所以本设计选择了差动放大电路。1.1.3 单片机的选择本设计作为一个简单脉搏测量仪,最后需给出脉搏波动频率。以单片机作为信息处理中心,通过对单片机进展编程,完成信号输入检测、信息分析处理

9、及信息显示。1AVR单片机AVR单片机4是ATMEL公司生产的单片机。1997年,由ATMEL公司挪威设计中心的A先生与V先生利用ATMEL公司的Flash新技术, 共同研发出RISC精简指令集的高速8位单片机,简称AVR。相对于出现较早也较为成熟的51系列单片机,AVR系列单片机片资源更为丰富,接口也更为强大,同时由于其价格低等优势,在很多场合可以替代51系列单片机。其特点是高速度(50ns)、低功耗,硬件应用Harward构造,具有预取指令功能,使得指令可以在一个时钟周期执行,而MSC-51要12个时钟周期执行一条指令。AVR单片机如LPC2131等。2凌阳单片机凌阳是凌阳公司推出的单片机

10、,具有高速度、低价、可靠、实用、体积小、功耗低和简单易学等特点,它的CPU核采用凌阳推出的Microcontroller and Signal Processor 16位微机处理器芯片,以下简称µnSP 。围绕micro;nSP 所形成的16位unSP 系列单片机,以下简称µnSP 家族。采用的是模块式集成构造,它以µnSP 核为中心集成不同规模的ROM PAM和功能丰富的各种外设部件。µnSP 核是一个通用的和构造。除此之外的其它功能模块均为可选构造。以及这种构造可大可小可有可无,借助这种通用构造附加可选构造的积木式的构成,便可成为各种系列的派

11、生产品,以适合不同场合,这样做无疑会使每种派生产品具有更强的功能和更低的本钱。µnSP 家族有有以下特点:体积小 ,集成度高,可靠性好易于扩展。µnSP 家族把各功能把各功能部件模块化地集成在一个芯片里。部采用总线构造,因为减少了各功能部件之间的连接,提高了其可靠性和抗干扰能力,另外,模块化的构造易于系列的扩展,以适应不同用户的需求。具有较强的中断处理能力。nSPTM家族的中断系统支持10个中断向量及10余个中断源,适合实时应用领域。高性能价格比:nSPTM家族片带有高寻址能力的ROM,静态RAM和多功能的I/O口,另外nSPTM的指令系统提供出具有较高运算速度的16位

12、,16位的乘法运算指令和积运算指令,为其应用添加了DSP功能,使得nSPTM家族运用在复杂的数字信号处理方面既很便利又比专用的DSP芯片廉价。如SPCE061等。351单片机51单片机是对目前所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flash rom技术的开展,8031单片机取得了长足的进展,成为目前应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。目前很多公司都有51系列的兼容机型推出,在目前乃至今后很长的一段时间将占有大量市场。51单片机是根底入门的一个单片机,还是应用最广

13、泛的一种。51单片机是INTEL公司生产的。它具有构造简单,价格廉价,易于开发的特点。通用型,有总线扩展,有较强的位处理功能,有全双工异步串行通信口。但是其功能相对较少,外部数据有瓶颈,作电压围窄。本设计中,单片机只需要对脉搏信号的波动频率进展测量、计算和显示,对单片机的要求不是很高。而对51单片机,本人比拟熟悉,所以,本设计中选择51单片机作为信息处理中心。在51系列单片机中,AT89系列单片机是美国ATMEL公司推出的一种新型高性能低价位、低电压低功耗的8位CMOS微型计算机。AT89S51就是其中一款,它可以完全满足本设计的设计要求,而且,AT89S51的价格较低。1.2 系统软件方案选

14、择1.2.1 脉搏波动频率测量方案的选择通过放大电路经A/D转换之后的信号为脉冲信号。脉冲信号的频率是指在单位时间由信号所产生的交变次数或脉冲个数,即。可以看出测量f*必须将N或t两个量之一作为闸门或基准,对另一个量进展测量。对于不同的频率围,有三种不同的测量方法。1周期测量法:适用于低频信号。采用单片机的一个定时/计数器,以单片机的标准机器周期作为标准时基信号Ts。被测信号的周期作为信号闸门,由程序控制开关对时基进展计数得n*,因此被测信号周期为,每分钟脉搏跳动次数为。2多周期同步法:适用于中频信号。其特点是标准频率信号不是用来填充待测信号的周期,而是与待测信号分别输入到两个计数器进展同步计

15、数。3频率测量法:适用于高频信号。充分利用单片机的两个定时/计数器,一个作为定时器,给出标准闸门信号,另一个作为计数器。人体脉搏波动频率一般为6080次/min,其频率成分主要分布在020Hz之间,属于次声,最高频率不超过40Hz,一般情况下为1Hz左右,属于低频信号。所以,本设计中选择周期测量法。1.2.2 单片机工作方式的选择单片机数据传送方式一般有以下几种:1查询方式:由于CPU与外设之间存在时序、速度等差异,在数据传送前必须检测接口状态,探查外设是否数据准备就绪。查询方式优点是构造简单,硬件开销小;缺点是CPU在整个传送过程中需要不断检测外设状态,由于CPU的速度远远高于外设,因此通常

16、处于等待状态,工作效率很低。2中断方式:CPU无需检测外设是否数据准备就绪,不占据CPU时间,因此CPU与外设并行工作,提高了CPU的工作效率,还满足了外设的实时要求。本设计中,只对A/D转换后的脉冲信号进展频率计算,CPU工作不是很繁忙,可以选择查询方式。1.2.3 显示电路方案的选择脉搏信号经过单片机处理,得到脉搏波动频率之后,需要在显示电路中直观地显示出来。所以,需要选用适宜的显示设备及显示电路,来实现对脉搏波动频率信息的显示。人体脉搏信号从时域上看,是一个周期性较强的准周期信号。脉搏波动频率一般为6080次/min。本设计中,显示位数较多。可以选择LCD字符液晶屏来对脉搏波动频率信息进

17、展显示。它具有:电参数(VDD=5.0V 10%,VSS=0V,Ta=25 )显示容:16字符* 2 行字符点阵:5 * 8点驱动方式:1/16D可供型号:TN STN(黄绿模灰模黑白模)反射型带EL或LCD背光源5LCD常用显示方法有两种:静态显示和动态扫描显示。1静态显示:所谓静态显示,就是每一个显示器都要占用单独的具有锁存功能的 I/O接口用于笔划段字形显示。这样单片机只要把要显示的字形代码发送到接口电路,就不用管它了,直到要显示新的数据时,再发送新的字形码,因此,使用这种方法单片机中CPU的开销小,较小的电流能得到较高的亮度且字符不闪烁。静态显示适用于显示器位数较少时。2动态扫描显示:

18、所谓动态显示,就是一位一位地轮流点亮显示器各个位扫描,对于显示器的每一位来说,每隔一段时间点亮一次。利用人的视觉暂留功能可以看到整个显示,但必需保证扫描速度足够快,字符才不闪烁。当显示位数较多时,用静态显示所需的I/O太多,一般采用动态显示的方法。本设计中,显示的脉搏波动频率,同时显示脉搏次数和测试时间,选用动态显示。二 数字式人体脉搏仪测量系统硬件电路设计本设计中,脉搏波动频率测量的实现是通过脉搏传感器采集脉搏信息输出电压信号,经信号放大电路对其进展放大。然后,将放大后的脉搏信号通过A/D转换电路转换为单片机易于处理的脉冲信号。通过对单片机进展编程来实现对脉搏波动频率的测量和计算,并在显示电

19、路中直观的显示出来。为到达电路构造简单实用的设计目的,从设计要求出发,设计了信号放大电路、A/D转换电路,单片机处理电路及LCD显示电路等。本章对各局部电路的设计进展详细论述与分析。2.1 信号放大电路的设计脉搏传感器6出来的电压信号较弱,在毫伏级,需要对其进展放大。所以,设计信号放大电路,将脉搏传感器出来的信号进展放大 ,使之成为一个幅值适当的信号,便于后续电路的处理。本设计中采用的是差动式放大电路,如图2.1所示:图2.1 差动式放大电路根本差动放大电路由两个完全对称的共发射极单管放大电路组成,该电路的输入端是两个信号的输入,这两个信号的差值,为电路有效输入信号,电路的输出是对这两个输入信

20、号之差的放大。设想这样一种情景,如果存在干扰信号,会对两个输入信号产生一样的干扰,通过二者之差,干扰信号的有效输入为零,这就到达了抗共模干扰的目的。差动放大电路的根本形式对电路的要:两个电路的参数完全对称两个管子的温度特性也完全对称。 它的工作原理是:当输入信号Ui=0时,则两管的电流相等,两管的集点极电位也相等,所以输出电压Uo=UC1-UC2=0。温度上升时,两管电流均增加,则集电极电位均下降,由于它们处于同一温度环境,因此两管的电流和电压变化量均相等,其输出电压仍然为零。共模信号的作用,对两管的作用是同向的,将引起两管电流同量的增加,集电极电位也同量减小,因此两管集电极输出共模电压Uoc

21、为零。因此:于是差动电路对称时,对共模信号的抑制能力强差模信号的作用,由于信号的极性相反,因此T1管集电极电压下降,T2管的集电极电压上升,且二者的变化量的绝对值相等,所以,由此我们可以看出差模电压放大倍数等于单管电压的放大倍数。图2.2 A/D转换电路2.2 A/D转换电路的设计放大后的脉搏信号,幅值为-1V4V,而在后续电路中,需要把放大后的脉搏信号转换为易于单片机处理得到脉搏波动频率信息的脉冲信号。单片机是数字信号处理工具,输入单片机的信号必须是离散的数字信号或者是脉冲信号,经A/D转化,便于单片机处理。其原理图如图3.2所示。只有当信号幅值在一定围时才会实现模数转换功能,以便记录脉搏次

22、数。2.3 单片机微处理系统的设计本设计作为一个简单脉搏测量仪,最后需给出脉搏波动频率,以单片机作为信息处理中心,通过对单片机进展编程,完成信号输入检测、信息分析处理及信息显示。从实用性、设计、货源及价格的角度出发,并且考虑到本设计对单片机没有特殊的要求,选用了常用的AT89S51单片机7,其引脚如图2.3所示:图2.3 AT89S51单片机引脚图在AT89S51单片机引脚图中,P3口是一个带部上拉电阻的8位双向I/O口。P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,如表3.1所示。本设计正是利用T0口的定时功能实现对脉搏波动频率的测量。AT89S51单片机不仅完全可以实现对脉

23、搏波动频率测量的控制要求,而且可以在线编程调试,符合设计的要求。表2.1 P3口第二功能端口引脚第二功能P3.0R*D串行输入口P3.1T*D串行输出口P3.2INTO外中断0P3.3INT1外中断1P3.4T0定时/计数0外部输入P3.5T1定时/计数1外部输入P3.6WR外部数据存储器写选通P3.7RD外部数据存储器读选通本设计中对脉搏频率的测量,采用周期测量法。将单片机定时/计数器T0定为16位定时器,对部机器周期计数。将A/D转换出来的脉冲信号接到单片机的P2.5口上,则定时器的开关由程序根据P2.5口上的状态进展控制。检测到上升沿时开T0计数,当紧接着的另一个上升沿被检测到时关T0计

24、数。单片机微处理系统硬件电路如图3.4所示。图2.4 单片机微处理系统硬件电路P1.0 T2定时器/计数器T2的外部计数输入,时钟输出;P1.1 T2E*定时器/计数器T2的捕捉/重载触发信号和方向控制;P1.5 MOSI在系统编程用;P1.6 MISO在系统编程用;P1.7 SCK在系统编程用。图2.5 LCD1602液晶显示 表2.2 1602液晶时序参数时序参数符号最大值典型值最小值单位测试条件E信号周期tC400-ns引脚EE脉冲宽度tRW150-ns引脚EE上升/下降时间tR tF-25ns引脚E地址建立时间tSP130-ns引脚ERSRW地址保持时间tHD110-ns引脚ERSRW

25、数据建立时间读操作tD-100ns引脚DB-DB7数据保持时间读操作tHD220-ns引脚DB-DB7数据建立时间写操作tSP240-ns引脚DB-DB7数据保持时间写操作tHD310-ns引脚DB-DB72.4 LCD显示硬件电路的设计脉搏信号经过单片机处理,得到脉搏波动频率之后,需要在显示电路中直观地显示出来。所以,需要选用适宜的显示设备及显示电路,来实现对脉搏波动频率信息的显示。本设计中,采用1602字符液晶屏8动态显示方式来显示脉搏波动频率信息。显示电路如图2.5所示,1602字符液晶屏时序参数如表2.2所示,硬件端口定义及软件资源分配如表2.3所示。表2.3 液晶驱动程序硬件端口资源

26、分配表硬件端口分配资源说 明RSP0.0存放器选择控制线RWP0.1LCD读写控制线EP0.2启用控制线,高电平动作LCDP2双向数据总线POS_FLAG20H字符串显示位置标志,为0时显示在第一行,为1时显示在第二行BLANK30H清行时填入的空格个数控制变量LCD初始化液晶显示模块1602的控制指令:1602的控制指令共11条,其中9条针对命令存放器IR的,另外2条是针对数据存放器DR的,具体指令如表3.4所示。表2.4 1602指令表注:表示可以为0或1编号指 令RSRWD7 D6D5D4D3D2D1D01清屏显示00000000012光标返回0000000013置输入模式0000000

27、1I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L6置功能00001DLNF7置字符发生存储器地址0001字符发生存储器地址(AGG)8置数据存储器地址001显示数据存储器地址(ADD)9读忙标志或地址01BF计数器地址(AC)10写数到CGRAM或DDRAM10要写的数据11从CGRAM或DDRAM读数11读出的数据表2.4的相关命令设置如表2.5所示:表2.5 1602指令相关设置命 令设置命 令设置I/D1增量方式,0减量方式S/C1显示器移位,0光标移位S1不移动,0移动R/L1右移,0左移D1显示,0不显示DL18BIT,06BITC1显示光标,0

28、不显示光标N12 行,01 行B1光标闪烁,0光标不闪烁F15*10 字型,05*7 字型BF1正在执行部操作,0可接收命令控制信号RS、RW、E与对应功能的真值表如表3.6所示:表2.6 控制使能端真值表RSRWE功能RSR/WE功能00下降沿写指令代码10下降沿写数据01上升沿读忙标志和AC码10上升沿读数据三 数字式人体脉搏仪测量系统软件设计从脉搏传感器出来的脉搏信号,经过放大电路、电压基准变化电路、过零比拟器,转换为脉冲信号之后,需要对单片机进展编程,实现对脉搏波动频率的测量、计算和显示。本设计中,软件设计采用模块化构造。根据脉搏波动频率测量系统的设定功能,将软件划分为假设干个功能相对

29、独立的模块,主要有系统主程序和脉搏波动频率测量模块。本章给出主要模块的程序设计思想和流程图。3.1 脉搏频率测量原理脉冲信号的频率是指在单位时间由信号所产生的交变次数或脉冲个数,即f*=N/t可以看出测量f*必须将N或t两个量之一作为闸门或基准,对另一个量进展测量。周期测量法:适用于低频信号。采用单片机的一个定时/计数器,以单片机的标准机器周期作为标准时基信号Ts,如图3.1所示。被测信号的周期作为信号闸门,由程序控制开关对时基进展计数得n*,因此被测信号周期为。图3.1周期测量法原理多周期同步法:适用于中频信号。其特点是标准频率信号不是用来填充待测信号的周期,而是与待测信号分别输入到两个计数

30、器进展同步计数。首先,由单片机给出闸门开启信号,此时,计数器并不开场计数,而是等到被测信号的上升沿到来时,才真正开场计数。然后,两级计数器分别对被测信号和标准信号计数。当单片机给出闸门关闭信号后,计数器并不立即停顿计数而是等到被测信号上升沿来到的时刻才真正完毕计数,完成一次测量过程。如图3.2所示,可以看出,实际闸门与参考闸门并不严格相等,但最大差值不超过被测信号的一个周期。设对被测信号的计数值为N*,对时基信号的计数值为N0,时基信号的频率为f0,则被测信号的频率为: 。图3.2 多周期测量法原理频率测量法:适用于高频信号。充分利用单片机的两个定时/计数器。一个作为定时器,给出标准闸门信号T

31、z,另一个作为计数器,对f*的变化次数直接进展计数得N*,如图3.3所示。图3.3 脉搏波动频率测量法原理人体脉搏信号从时域上看,是一个周期性较强的准周期信号。脉搏波动频率为6080次/min,其频率一般情况下为1Hz左右,属于低频信号。所以,本设计中采用周期测量法。3.2 系统主程序的设计系统主程序控制单片机系统按预定的操作方式运行,是单片机系统程序的框架。系统主程序流程图如图4.4所示。图3.4 系统主程序流程图上电后,首先进展整机初始化处理。主程序的初始化模块主要完成仪器硬件、软件的初态设置,单片机专用存放器的设定,单片机工作方式及各端口的工作状态的规定。整机初始化完毕后,检测P3.2口

32、的状态,如果检测到上升沿,则进入脉搏波动频率测量子程序,测得脉搏波动频率之后,送到LCD显示单元进展显示。3.3 数字式人体脉搏仪测量子程序的设计本设计中对脉搏频率的测量采用周期测量法。可将单片机定时/计数器T0定为16位定时器,对部机器周期计数,即方式控制字为*01H。脉搏波动频率测量子程序流程图如图3.5所示。定时器的开关由程序根据P3.2口上的状态进展控制,检测到上升沿时开T0计数,当紧接着的另一个上升沿被检测到时关T0计数。T0中的计数值为n*,则被测脉搏信号周期对于12MHz晶振,Ts=1s,每分钟跳动次数。图3.5 脉搏波动频率测量子程序流程图考虑到脉搏的频率很低,大约为1Hz左右

33、,而16 位定时/计数器的最高计数值为65535,这样定时/计数器将发生溢出,且最后脉搏波动频率的计算涉及到双字节除法,编程较复杂。为此,采用定时器中断方式,即在一个脉搏周期,隔一段时间T1,T1即为中断周期。设N为每分钟脉搏跳动次数,T为脉搏跳动周期,则本设计中,设定显示的每分钟脉搏跳动次数误差不超过1次,则假设T=2,则定时器周期不超过1/15秒。假设T=1,则定时器周期不超过1/60秒。取T=1,即定时器周期不超过1/60秒。设中断周期为T1,中断次数为n,则:为方便计算,取: 。由于定时器周期不超过1/60秒,即, ,故取m=7。即中断周期为。每分钟脉搏跳动次数,为方便计算,取。系统程

34、序见下。数字式脉搏器的设计程序*include*include*include *include *define uchar unsigned char*define uint unsigned int*define BUSY 0*80 / LCD *define DATAPORT P0/ 参sbit LCM_RS=P20;/ 数sbit LCM_RW=P21; / 配sbit LCM_EN=P22; / 置sbit reset=P37;sbit bj=P30;sbit time_start=P32; sbit time_over=P33;sbit EOC=P23; /OE1,输出转换得到的数

35、据;OE0,输出数据线呈高阻状态。sbit START=P24; /START为转换启动信号。当START上跳沿时,所有部存放器清零;下跳沿时,开场进展A/D转换;在转换期间,ST应保持低电平。sbit OE =P25; /EOC为转换完毕信号。当EOC为高电平时,说明转换完毕;否则,说明正在进展A/D转换。sbit AD_ALE=P26; /ad 转换sbit CLK=P27;unsigned long int getdata;void ADC0809();uchar code str0=Throb: ;uchar code str1=Time: ;void delay(uint k); /

36、延时void lcd_wait(); /LCM忙检测void WritemandLCM(uchar WCLCM,uchar BusyC); /写指令到LCM子函数void WriteDataLCM(uchar WDLCM); /写数据到LCM子函数void DisplayOneChar(uchar *,uchar Y,uchar DData); /显示指定坐标的一个字符子函数void DisplayListChar(uchar *,uchar Y,uchar code *DData); /显示指定坐标的一串字符子函数void initLCM( void); /LCD初始化子程序uchar m=

37、0;uint counter=0,counter_0=0;uchar second_0=0;uint totle_1;float totle_0;void main()uint i,j,k; TMOD=0*02;TL0=0*fe;TH0=0*fe; /AD频率TR0=1;ET0=1;TH1=0*60;TL1=0*78;/定时5msET1=1;P*1=1;E*0=1;IT0=1;E*1=1;IT1=1;EA=1;delay(100); /系统延时500ms启动 initLCM( ); WritemandLCM(0*01,1); /清显示屏 DisplayListChar(0,0,str0);Di

38、splayListChar(0,1,str1);AD_ALE=0;START=0;OE=0;while(1)ADC0808();/v=getdata;if(getdata=300&getdata=300&getdata400)counter+; if(m=1)PT1=1;TR1=1;m=0;/DisplayOneChar(7,0,0*30+getdata/100);/DisplayOneChar(8,0,0*30+getdata%10);/DisplayOneChar(9,0,0*30+getdata/10%10);if(counter=100) DisplayOneChar(7,0,0*30

39、+counter/100);DisplayOneChar(8,0,0*30+counter/10%10);DisplayOneChar(9,0,0*30+counter%10); if(second_059) second_0=0;DisplayOneChar(7,1,0*30+second_0%10);DisplayOneChar(6,1,0*30+second_0/10);if(reset=0)counter=0;counter_0=0;second_0=0;totle_0=0;totle_1=0;bj=0;totle_1=(int)totle_0;DisplayOneChar(9,1,0

40、*30+totle_1/100);DisplayOneChar(10,1,0*30+totle_1/10%10);DisplayOneChar(11,1,0*30+totle_1%10);DisplayOneChar(12,1,/);DisplayOneChar(13,1,m);DisplayOneChar(14,1,i);DisplayOneChar(15,1,n);if(totle_1120)for(k=0;k100;k+)for(i=0;i25;i+)bj=0;for(j=0;j25;j+)bj=1;if(reset=0)counter=0;counter_0=0;second_0=0;

41、totle_0=0;totle_1=0;bj=0;if(totle_10)for(k=0;k100;k+)for(i=0;i25;i+)bj=0;for(j=0;j25;j+)bj=1;if(reset=0)counter=0;counter_0=0;second_0=0;totle_0=0;totle_1=0;bj=0;/*外部中断0*/void intr0_int() interrupt 0 using 3m=1;/*外部中断1*/ void intr1_int() interrupt 2 using 3PT1=0;TR1=0;totle_0=(float)counter/second_0

42、*60;/*定时中断0*/void timer0_int() interrupt 1 using 1 CLK=CLK; /*定时中断1*/void timer1_int() interrupt 3 using 2TH1=0*60;TL1=0*78;counter_0+; if(counter_0=190)counter_0=0;second_0+;/*延时K*1ms,12.000mhz*/void delay(uint k) uint i,j; for(i=0;ik;i+) for(j=0;j100;j+);/*lcm部等待函数*/ /从这里到AD前面都是 LCD的驱动程序void lcd_w

43、ait(void) DATAPORT=0*ff; /读LCD前假设单片机输出低电平,而读出LCD为高电平,则冲突,Proteus仿真会有显示逻辑黄色LCM_EN=1; LCM_RS=0; LCM_RW=0; LCM_RW=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); while(DATAPORT&BUSY) LCM_EN=0; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); LCM_EN=1; _nop_(); _n

44、op_(); _nop_(); _nop_(); _nop_();_nop_();_nop_(); LCM_EN=0;/*写指令到LCM子函数*/void WritemandLCM(uchar WCLCM,uchar BusyC) if(BusyC)lcd_wait();DATAPORT=WCLCM; LCM_RS=0; / 选中指令存放器 LCM_RW=0; LCM_RW=0; / 写模式 LCM_EN=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); LCM_EN=0;/*写数据到LCM子函数*/void W

45、riteDataLCM(uchar WDLCM) lcd_wait( ); /检测忙信号 DATAPORT=WDLCM; LCM_RS=1; / 选中数据存放器 LCM_RW=0; / 写模式 LCM_EN=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_();_nop_(); LCM_EN=0;/*显示指定坐标的一个字符子函数*/void DisplayOneChar(uchar *,uchar Y,uchar DData) Y&=0*01; *&=0*0f; if(Y)*|=0*40; /假设y为1显示第二行,地址码

46、+0*40 *|=0*80; /指令码为地址码+0*80 WritemandLCM(*,1); WriteDataLCM(DData);/*显示指定坐标的一串字符子函数*/void DisplayListChar(uchar *,uchar Y,uchar code *DData) uchar ListLength=0; Y&=0*01; *&=0*0f; while(*16) DisplayOneChar(*,Y,DDataListLength); ListLength+; *+; /*LCM初始化子函数*/void initLCM( ) LCM_EN=0; DATAPORT=0;delay

47、(15);WritemandLCM(0*38,0); /三次显示模式设置,不检测忙信号 delay(5); WritemandLCM(0*38,0); delay(5); WritemandLCM(0*38,0); delay(5); WritemandLCM(0*38,1); /8bit数据传送,2行显示,5*7字型,检测忙信号 WritemandLCM(0*08,1); /关闭显示,检测忙信号 WritemandLCM(0*01,1); /清屏,检测忙信号 WritemandLCM(0*06,1); /显示光标右移设置,检测忙信号 WritemandLCM(0*0c,1); /显示屏翻开,

48、光标不显示,不闪烁,检测忙信号/*读电压*/ /AD转换的驱动程序,就这一局部void ADC0809()AD_ALE=1; /锁存输入通道_nop_();_nop_();START=0; /驱动AD转换 START=1;AD_ALE=0;_nop_();_nop_(); START=0; /保持低电平while(EOC=0); /等待AD转换完毕 / TR0=0; /AD转换完毕时先停顿T0P1=0*ff; OE=1; /转换完毕,允许AD值输出 getdata=P1; /读出AD值. OE=0; /制止输出getdata=(unsigned long int)(unsigned long int)(getdata*500)/255);/转换成电压 /TR0=1; /重新启动T0 . z

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!