1、基于51单片机的心率计设计报告 程序定时60s数字心率计设计摘 要:心率测量是现代日常生活中一个很常见的问题,本论文从生活实际出发,设计出了一个一个基于单片机技术的可以迅速准确测量出心率的数字心率计。首先,我们把待测信号经过放大整形;然后把信号送入单片机的定时计数器里进行计数,获得频率值;最后把测得的频率数值送入显示电路里进行显示。本文从心率计的原理出发,介绍了基于单片机的数字心率计的设计方案,选择了实现系统的各种电路元器件,主要对硬件电路进行了仿真。关键词:单片机 心率计 计数器The Heart Rate Meter DesignX.Zhang (BME0801)J.Zheng (BME0
2、801)Abstract: Nowadays it is common for people to measure heart rate in daily life. This thesis is a single chip micyoco heart rate measure system.We can measure our heart rate easily with this system. The working procedure is as following. First,we send the signal collected with the sensor to ampli
3、fying circuit .Then to the wave shaping circuit.Then the SCM controls the display unit to show the heart rate measured to us.Hardware design part contains Signal Extraction Circuit , Signal Amplification Circuit, SCM control Display Circuit.Key words: SCM Heart Rate Meter Counter 1. 引言 1.1 问题的提出 现代生
4、活中越来越多的人遇到心脏疾病问题,心率的测量在日常生活中也变得很普遍,而如何简单快速的进行心率测量成了我们考虑的课题。 1.2 设计目的 本课题从生活实际出发,设计出了基于8051单片机的简易心率测量和显示系统。2. 系统设计与原理 2.1 结构设计与分析1 图表1 整体电路结构分析:本设计包括信号提取电路,信号初级放大电路,低通滤波电路,比较整形电路,单片机控制电路,显示电路构成。采用正弦波作为输入信号来进行仿真测试。2.2 单元设计与分析 图表2 信号放大电路和低通滤波电路分析:信号放大电路选择NE5532运放做放大器,其中初级放大倍数为R2/R1=10倍,低通滤波电路3db截止频率为4H
5、Z,同时具有将信号放大2倍的作用。 图表 3 比较整形电路分析:比较整形电路选择741做比较器,参考电压为1v。图表 4 单片机控制电路分析:本系统选用AT89C51单片机作为控制核心。图表5 显示电路分析:显示电路采用7SEG-MPX4-CA作为显示器件,P2口输出位选信号,P0口输出字形信号。2.3 接口设计与分析(1)P2口输出位选信号,因为位选信号需要高电平,故在P2口P2.0-P2.3位后加上7404非门。(2) P0口输出字形码,因为共阳极显示器低电平输入有效,故在P0口加上下拉电阻。(3) P3.7/T1口作为整形后信号的输入端,计数器。3. 设计结果与数据 3.1 单元电路调试
6、(1)1.1HZ信号输入电路图表 6 1.1HZ信号初级放大图表 7 1.1HZ信号通过低通滤波图表 8 1.1HZ信号比较整形图表 9 显示心率为66(2)50HZ 信号输入图表 10 低通滤波器对工频有效抑制3.2 系统联调图表 11 系统联调结果3.3 数据分析 仿真时输入信号为1.1HZ,理论显示数据为66,实际显示数据为66,显示正确。4. 结论与心得 4.1 设计结论本设计基于51单片机,信号放大,滤波,整形,显示均到达要求。 4.2 心得 本系统在仿真测试中显示正确,是经过多次调试与修改的结果。由于单片机采用T0定时中断,T1计数,在实际调试时,定时时间越长,延时越长,故实际定时
7、并非60s,经过多次调试,定时45.5s,正好可以显示60s时的计数值。如果做出实际电路,定时时间也需要做相应的修改参考文献1康华光.电子技术基础模拟部分M.5版,北京:高等教育出版社,2006:418-419.2胡健.单片机原理及接口技术教程M.北京:机械工业出版社,2004:171-175.附件(电路图、程序清单、任务分工) 附件一:电路图附件二:程序清单#include #include #define uchar unsigned char#define uint unsigned intuchar seg_du= 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,
8、0xf8,0x80,0x90; /数码管的段选uchar dbuf4=0,0,0,0; /用来装显示数据的空数组uint count;uint cou,cou1;void delay(void) /延时函数用于数码管动态扫描 uchar i; for(i=0;i20;i+);void display() / 数码管显示函数 P2=0xfe; P0=seg_dudbuf3; delay(); P0=0xff; P2=0xfd; P0=seg_dudbuf2; delay(); P0=0xff; P2=0xfb; P0=seg_dudbuf1; delay(); P0=0xff; P2=0xf7;
9、 P0=seg_dudbuf0; delay(); P0=0xff; void timer0 (void )interrupt 1 /定时器中断,用与定时计数 count+; if(count =910) /定时45.5s, count=0; / 将定时标志清零 TR1=0; /关闭计数器 cou1=TL1-6; /将小于250次脉冲的计数加上 dbuf3=(cou*250+cou1)/1000; dbuf2=(cou*250+cou1)%1000)/100; dbuf1=(cou*250+cou1)%100)/10; dbuf0=(cou*250+cou1)%10; /显示处理函数 cou=
10、0; /计数器清零 TL1=6; / 打开计数器中断 TR1=1; /开启计数器,使之工作 void time1(void )interrupt 3 /计数器中断,用于计数 cou+;void time0_init() /定时器0初始化 TMOD=0x61; / 设置定时器0,和计数器1的模式 TH0=(65536-50000)/256; TL0=(65536-50000)%256; /定时器的初值,用于中断一次计时250us ET0=1; /开定时器0中断 TR0=1; /开定时器0void time1_init() / 计数器1初始化 TH1=6; TL1=6; /装载计数器的初值 ET1=1; /开计数器1 中断 TR1=1; /开计数器1 EA=1; /开总中断void main() count=0; time0_init(); time1_init(); while(1) display();
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1