1、基于光电式简易心率测量仪单片机原理与应用及C51程序设计课程设计题目 电子时钟设计 学院 机电与汽车工程学院 班级 13级汽服一班 姓名 王守瑞 学号 20137040119 摘 要单片机作为微型计算机的一个分支,产生于20世纪70年代,经过二三十年的发展,在各行各业中已经广泛应用。心率是指单位时间内心脏跳动的次数,一般指每分钟的心跳次数,是临床常规检查的生理指标。心率测量仪在我们的日常生活中已经得到了非常广泛的应用。在医学上,通过测量人的心率,便可初步判断人的健康状况。当心脏泵血时,血液的粘稠度会改变,使得皮肤的透光性发生改变,因此可以通过测量皮肤的透光性变化来间接测量心率。而对于皮肤的透光
2、性,可使用光电系统来测量,然后将测量得到的信号经过放大,滤波,AD转换后送入AT89C52单片机系统进行信号处理,信号显示与记录。该系统具有方便、显示直观、功耗低等优点。关键词:AT89C52 发光二极管 放大器 滤波器 AD1.设计任务心率是身体体征的重要参数之一,心率的测量由以前的把脉到现在的科学仪器测量,发生了重大变化,古时把脉只有医生才能做到,而现在的测量仪器一般只有医疗机构才有。本设计主要是开发一款便携、简易的心率测量仪,实现普通群众在足不出户的情况下测量心率的目的。1.1功能要求心率测量仪用LCD液晶显示器显示出实时的心率,并用按键来控制实现1分钟和3分钟的测试。1.2工作原理本设
3、计采用单片机AT89C52为控制核心,实现心率测量仪的基本测量功能。当手指放在红外发射二极管和接收三极管中间,随着心脏的跳动,血管中血液的流量将发生变换,红外接收三极管的电流也跟着改变,这就使红外接收三极管输出信号。该信号经放大、滤波、整形后输出,输出的信号作为单片机外部中断信号。单片机电路对输入的信号进行计算处理之后把结果送到LCD液晶显示器显示。1.3整体设计框图2.系统硬件设计2.1 AT89C52简介AT89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高
4、密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。AT89C52除了有AT89C51所有的定时/计数器0 和定时/计数器1 外,还增加了一个定时/计数器2。AT89C52单片机引脚图AT89C52为8 位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xC52 相同,其主要用于会聚调整时的功能控制。功能包括对会聚主IC 内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。主要管脚有:XTAL1
5、(19 脚)和XTAL2(18 脚)为振荡器输入输出端口,外接12MHz晶振。RST/Vpd(9 脚)为复位输入端口,外接电阻电容组成的复位电路。VCC(40 脚)和VSS(20 脚)为供电端口,分别接+5V电源的正负端。P0P3 为可编程通用I/O 脚,其功能用途由软件定义。P0口:是双向8位三态I/O口,也即地址/数据总线复用口。在访问外部数据存储器或程序存储器时,可分时用作低8位地址线和8位数据线;在Flash ROM编程时,P0口接收(输入)指令字节;而在验证程序时,P0口输出指令字节。P1口:P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TT
6、L逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。P2口:P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口P2写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。在访问外部程序存储器或16位地址的外部数据存储器时,P2送出高8位地址数据。在访问8位地址的外部数据存储器时,P2口输出P2锁存器的内容。P3口:P3口是一个带有内部上拉电阻的8位双向I/O口。P3口能驱动4个LSTTL门电路。在单片机中这8个引脚都有各自的第二功能,而在实际工作中,大多情况下都使用P3口的第二功能。RST:复位
7、信号输入端。要保持RST脚两个机器周期以上的高电平时间,才能使单片机复位。ALE/PROG:地址锁存允许信号。PSEN:外部程序存储器的读选通信号。EA/VPP:当EA保持低电平时,则在此期间外部程序存储(0000H-FFFFH),不管是否有内部程序存储器。当EA端保持高电平时,此间CPU访问并执行内部程序存储器的指令。2.1光源与传感器电路将手指放在红外发射二极管和接收三极管中间,随着心脏的跳动,血管中血液的流量发生变换来采集信号。P20与单片机P2.0引脚连接,控制LED的亮度。2.2放大电路放大器将LED采集来的信号进行放大、整形,传送到滤波器,由滤波器消除干扰,传送至单片机。可通过查看
8、示波器波形图检查电路是否出现问题。2.3显示电路显示电路是LCD和上拉电阻连接,由电源供电,D0D7接单片机P0口,所以用上拉电阻拉至高电平。2.4按键与指示灯电路P21和P22分别与单片机P2.1和P2.2引脚连接,当开关S1按下时,指示灯D3点亮,进行1分钟测量。当开关S2按下时,指示灯D2点亮,进行3分钟测量。2.5硬件原理图3.系统软件设计3.1软件设计系统软件采用模块化设计方法,每个功能由一个或多个函数实现,方便软件的调试,其中初始化主要完成1602的设置以及在1602屏幕上显示测试提示信息。按键连接至单片机P2口,并且按键在常开状态时通过上拉电阻拉为高电平,所以在按下时,该引脚变为
9、低电平。3.2系统软件流程图3.3 C程序#include#include#define uchar unsigned char#define uint unsigned int/这三个引脚参考资料sbit E=P27; /1602使能引脚sbit RW=P26; /1602读写引脚 sbit RS=P25; /1602数据/命令选择引脚sbit CS=P10; /ADC0831 sbit CLK=P11;sbit DO=P12;uint TimeOver=0;void delay() int i,j; for(i=0; i=100; i+) for(j=0; j=20; j+);void e
10、nable(uchar del) P0 = del; RS = 0; RW = 0; E = 0; delay(); E = 1; delay();void write(uchar del) P0 = del; RS = 1; RW = 0; E = 0; delay(); E = 1; delay();void L1602_init(void) enable(0x01); enable(0x38); enable(0x0c); enable(0x06); enable(0xd0);void L1602_char(uchar hang,uchar lie,char sign) uchar a;
11、 if(hang = 1) a = 0x80; if(hang = 2) a = 0xc0; a = a + lie - 1; enable(a); write(sign);void L1602_uint(uchar hang,uchar lie,uint n) L1602_char(hang,lie+,(n/1000)+0); L1602_char(hang,lie+,(n/100)%10+0); L1602_char(hang,lie+,(n/10)%10+0); L1602_char(hang,lie+,n%10+0);void L1602_string(uchar hang,uchar
12、 lie,uchar *p) uchar a; if(hang = 1) a = 0x80; if(hang = 2) a = 0xc0; a = a + lie - 1; enable(a); while(1) if(*p = 0) break; write(*p); p+; uchar Read_ADC0831()/根据时序图写出的模拟数据输出 uchar i,temp; DO=1; _nop_(); _nop_(); CS=0; _nop_(); _nop_(); CLK=0; _nop_(); _nop_(); CLK=1; _nop_(); _nop_(); CLK=0; _nop_
13、(); _nop_(); CLK=1; _nop_(); _nop_(); CLK=0; _nop_(); _nop_(); for(i=0;i8;i+) CLK=1; _nop_(); _nop_(); temp=1; if(DO) temp+; CLK=0; _nop_(); _nop_(); CS=1; _nop_(); _nop_(); return(temp); void Set_Timer(uchar n) /50ms TimeOver=n; TMOD = 0x01; IE = 0x82; TH0 = 0x15; TL0 = 0xA0; TR0 = 1;void Time0_Int
14、() interrupt 1 TH0 = 0x15; TL0 = 0xA0; TimeOver-; /长度加1void Test_1min() uint d1=0; uint d2=0; uint t; uchar flag=0; P2 |=0X01; Set_Timer(1200); for(t=0;td1) flag=1; else flag=0; while(TimeOver) d2=Read_ADC0831(); if(d2d1) flag=0; else if(flag=0) t+; flag=1; TR0 = 0; L1602_uint(2,8,t);void Test_3min(
15、) uint d1=0; uint d2=0; uint t; uchar flag=0; P2 |=0X01; Set_Timer(3600); for(t=0;td1) flag=1; else flag=0; while(TimeOver) d2=Read_ADC0831(); if(d2d1) flag=0; else if(flag=0) t+; flag=1; TR0 = 0; L1602_uint(2,8,t);void Test_over() P2=P2&0xfe; L1602_string(1,1,Test over);void Test() if(!(P2&0x02) P2
16、=P2|0x08; L1602_string(1,1,Mode:1min); Test_1min(); Test_over(); if(!(P2&0x04) P2=P2|0x10; L1602_string(1,1,Mode:3min); Test_3min(); Test_over(); void Main() P2=P2&0xfe; L1602_init(); L1602_string(1,1,Begin Test); L1602_string(2,1,Result: ); while(1) Test(); P2=P2&(0x18); ;4.总结本次所设计的测量系统实现简单、功能稳定、使用
17、方便,应用广泛,具有实际意义。由于时间比较短,同时掌握的知识有限,本次设计还存在很多不足,如程序不够简练, LCD显示部分不够完美等,同时此次设计的测量仪功能比较单一,没有如语音系统实现自动读出心跳次数等人性化功能,且在设计过程中使用的运放数量也较多,加大了电源管理的复杂度。但我相信科技的进步势必会使测量仪的功能日益强大和完善,应用领域会不断扩大,会给我们的生活带来更多的方便和精彩。为了更好的进行心率测量仪的设计,认真收集有关资料,并做相关的整理和阅读,为这次的设计做好充分的准备。经过此次设计,我受益良多:1.无论做什么事都应该事先做好充分的准备;2.了解了心率测量仪在国内外发展之迅速、应用领
18、域之广、市场前景之大;3.对硬件设计和各模块的功能有了更深的了解,同时提高了动手能力;4.体会到坚持不懈的毅力对完成一件事情起着巨大的作用;5.体会到团队合作精神的重要性及相互讨论过程中的乐趣。5.参考文献1谢龙汉 莫衍编著.Proteus电子电路设计及仿真.北京:电子工业出版社,2012.12赵佩华 眭碧霞主编.单片机原理及接口技术.北京:机械工业出版社,2012.63谢维成 杨加国主编.单片机原理与应用及C51程序设计.第二版.北京:清华大学出版社,2012.104张元良 王建军编著.单片机开发技术实例教程.北京:机械工业出版社,2011.15张靖武 周灵彬编著.单片机原理,应用与PROTEUS仿真.北京:电子工业出版社,2010.1
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1