**单片机设计论文`
随着日新月异科技发展,在心率体温测量方面,我们取得了迅速的发展,就近日而言,脉搏测量仪已经在多个领域大展身手,除了在医学领域有所建树,在人们的日常生活方面的应用也不断拓展,如检疫中心的额温枪都用到了技术先进的脉搏测量仪。在今年的疫情爆发的同时,我们可以积极应对,利用所学的知识,方便高效地检测出人体有无异常体温,在上学签到时,我们可以利用此来检测温度,预防集体性感染事件。为了在心率测量仪的精准性和便携性方面做出重大改变,我计划设计一种以51单片机为核心的心率体温测量仪。我们的心率体温检测系统以STC89C51单片机为核心,借用单片机系统的内部计时器计算时间。其大致的步骤为通过ST188光电传感器感应生成脉冲,心跳次数由单片机累计所得,其对应的时间根据定时器获取。本设计使用的时候可以展现脉搏心率次数以及时间长短,当其终止使用的时候可以展示总的脉搏心率次数以及时间长短。经过我的个人测试,系统成功运行,符合设计要求。通过软件与硬件方面的整体调试并进行实验,得出结论为在技术上可行,预期可以实现功能,准确、快速地完成测量任务。
关键词:心率体温检测系统;STC89C51单片机;光电传感器
此次设计选用单片机当作主控芯片,为了保证系统更好的运行,STC89C51单片机掌握起来更方便,成本低廉,超强的抗干扰性,在系统中可以进行编程,不需要编程器。故本设计采用STC89C51单片机[8]。
基于此有以下两种方案可供选择:
方案一:STC89S51单片机作为心率监测系统的CPU是因为其低廉的价格和编程的方便性。虽然STC89S51单片机的功能是有限的,但是对于心率监测系统的功能实现是没有问题的。
方案二:飞思卡尔公司的嵌入式芯片9S12XS128,这款单片机的最实用的优点就是可以专门计数, 这对于我们本系统来说是十分有利的。
最终,在考虑实际应用后,我选择了STC89S51单片机放弃了嵌入式芯片9S12XS128,嵌入式芯片9S12XS128对比其他的单片机功能齐全,操作也更加简单,与之相对应的是昂贵的价格。综合来说,不符合设计心率体温监测系统的设计初衷[9]。
此次设计选用的STC89C51单片机,使用COMOS8作为单片机的微处理器,片内具有4KB的Flash存储器。该设备有40个管脚,速度快,价格便宜,燃录方便,通过串行口下载,在线编程一般情况下增强型是6时钟然而普通型是12时钟;工作频率范围在40MHZ以内,和8051的80MHZ以内基本相一致;STC89C1相应的Flash可以划分成4KB/8KB/15KB;内部存储器为512B;定时器一共有3个16位;中断源一共有8个;其不需要专用编程器;通用I/O口一般由32/36个;工作电压通常情况下为3.8-5.5V;外形封装可以分为40脚PDIP、44脚PLCC以及PQFP等[10]。
2.1.3 STC89C51单片机引脚说明
图2.1 STC89C51封装形式
管脚说明:STC89C51外部有32个端口可供使用,相关引脚运用说明见如表2.1所示(其中VCC是电源电压接电源,GND接地)。
表2.1 P3口的第二功能
时钟振荡器:其为STC89C51里存在构成内部振荡器的高增益反相放大器,引脚XTAL1以及XTAL2是其输入端以及输出端。其能够和当作反馈元件的片外石英晶体或者陶瓷谐振器组成自激振荡器,振荡电路的详细分布如图2.2所示。
图2.2内部震荡电路
再进行编写的时候,语言的选择很重要,选择一门正确的语言可以看起来简单易懂、加快整个毕设的进程,在对比C语言和汇编语言的优缺点时,C语言具有很大的优势,例如极大地提升程序的可读性,研究开发的时间大大缩短,并且,它具有极大地库文件,为我们的程序编写提供了巨大的方便。因此选择C语言[17]。
在本设计中,选择使用Keil软件、C语言进行编程,在短时间内很容易熟悉掌握其中Keil有以下特点:
(1)Keil软件在很多的电脑操作系统中都能够使用,下载方便快捷,提供了丰富的库函数,并有功能强大的开发工具为之辅助[18]。这是其他软件所不具有的;
(2)在使用Keil软件编程的过程中,写成程序进行编译的过程中,如有错误不能直接的下载,会有提示;
(3)Keil软件可以配合仿真软件使用,将编译好的程序下载到在仿真软件中,通过仿真软件可以查看程序的不足之处,方便进行修改;
(4)Keil可以完成许多开发过程,从编辑、编译到连接和调试。Keil软件界面如图3.1所示。
图3.1 Keil开发界面图
STC-ISP是为STC系列单片机开发的单片机下载编程软件。它是一个用于下载代码、在线模拟和显示串行接口的集成软件。它是在智能51系列产品开发过程中获得的。它具有广泛性和高性能。是目前51系列单片机控制系统研发中不可缺少的一部分[19]。
可以通过下载器下载微控制器程序(即用于串行接口的编程模块,如CH340)。在连接了MCU开发板、下载程序和PC机之后,首先就是要选定单片机的型号,波特率将根据定时器的初值计算出来,在程序编写完成且编译也没有出现错误的时候,在选定的文件夹中会有系统自动存放进去的“Hex”文件,选定好之后,最后单击程序的下载按钮即可。具体下载界面如图3.2所示。
图3.2 烧录软件对话框
本设计通过CH340串口烧写模块实现对单片机程序的烧写。CH340串口烧写模块使用USB接口,十分方便的解决了笔记本电脑用户对STC系列单片机的程序烧写问题,本下载器低价格、高性能,是开发STC系列单片机的首选优秀工具。模块如图3.3所示。
图3.3 CH340串口烧写模块
CH340串口烧写模块引脚说明:(1)电源输出,因有USB电源线,故本开发板不接,不需要。(2)VCC 本开发板不接,不需要。(3)本开发板不接,不需要。(4)TXD 接单片机的RXD引脚。(5)RXD 接单片机的RXD引脚。(6)GND 接GND。
CH340串口烧写模块与单片机的具体接线图如表3.1所示。
表3.1 CH340串口烧写模块与单片机接线
#include
#include
#include "1602.h"
#include "18b20.h"
#include "delay.h"
unsigned char i_i=0,timecount=0,displayOK=0,rate=0,aa=0;
unsigned int time[6]={0};
unsigned char tab_sk[16]="WO DE BI SHE ";
unsigned char tab_ht[16]=" 000/min 00.0C ";
unsigned long time_50ms=0xaaaaaaaa;
unsigned char sys_times=0;
void time_init(void);
void init_int0(void);
void SendStr(unsigned char *s,unsigned char length);
void SendByte(unsigned char dat);
void UART_Init(void);
void main()
{
int temp;
float temperature;
UART_Init();
time_init();
init_int0();
LCD_Init();
DelayMs(20);
LCD_Clear(); DelayMs(10);
LCD_Write_String(0,0,tab_sk);
LCD_Write_String(0,1,tab_ht);
while(1)
{
if(displayOK==0) {
rate = 0;
}
else//Èç¹ûÏÔʾ¿ª
{
rate=60000/(time[1]/5+time[2]/5+time[3]/5+time[4]/5+time[5]/5);
}
if(sys_times>=15)
{
sys_times=0;
temp=ReadTemperature();
temperature=(float)temp*0.0625;
tab_ht[10]=((unsigned int)(temperature*10)/100)+0x30;
tab_ht[11]=((unsigned int)(temperature*10)/10%10)+0x30;
tab_ht[13]=((unsigned int)(temperature*10)%10)+0x30;
tab_ht[1]=rate/100+'0';
tab_ht[2]=rate/10%10+'0';
tab_ht[3]=rate%10+'0';
LCD_Write_String(0,1,tab_ht);
LCD_Write_String(0,0,tab_sk);
SendStr(tab_sk,16);
SendStr("\r\n",2);
SendStr(tab_ht,16);
SendStr("\r\n",2);
}
sys_times++;
DelayMs(50);
}
}
void time_init(void)
{
EA = 1;
TMOD |= 0x01;
ET0 = 1;
TR0 = 1;
}
void init_int0(void)
{
EX0=1;
EA=1;
IT0 = 1;
}
void int0() interrupt 0
{
EX0=0;
if(timecount<8) ¦Àí
{
TR0=1;
}
else
{
time[i_i]=timecount*50+TH0*0.256+TL0/1000;
TH0 = 0x3c;
TL0 = 0xb0;
timecount=0;
i_i++;
if(i_i==6)
{
i_i=1;
displayOK=1;
}
}
EX0=1;
}
void time0_int() interrupt 1
{
TH0 = 0x3c;
TL0 = 0xb0;
timecount++;
if(timecount>65)
{
i_i=0
timecount=0;
displayOK=0;
TR0=0;
TH0 = 0x3c;
TL0 = 0xb0;
}
}
void UART_Init(void)
{
SCON = 0x50;
TMOD |= 0x20;
TH1 = 0xFD;
TL1 = TH1;
TR1 = 1;
EA = 1;
ES = 1;
}
void SendByte(unsigned char dat)
{
unsigned char time_out;
time_out=0x00;
SBUF = dat;
while((!TI)&&(time_out<100))
{time_out++;DelayUs2x(10);}
TI = 0;
}
void SendStr(unsigned char *s,unsigned char length)
{
unsigned char NUM;
NUM=0x00;
while(NUM<length)
{
SendByte(*s);
s++;
NUM++;
}
}
void UART_SER (void) interrupt 4
{
if(RI)
{
RI=0;
}
if(TI)
TI=0;
}
本篇论文是针对提高心率体温测量的效率,节省时间并更精确的反应出心率体温的正常与否而设计出的一种基于单片机的心率体温测量系统。测量者可以通过心率脉搏计测量出自己的一分钟内的心跳次数,还有温度传感器测量出人体的体温。
本论文设计主要对单片机的最小系统进行相应的设计从而使得心率体温的测量系统更为完备,脉搏光电传感器将收集到的数据传输到LM393比较器中,LM393比较器输出相对应的标准方波,以单片机的外部中断形式获取输出信号,并通过液晶显示屏来表示。依据单片机自身的定时中断、外部中断以及计数等功能,一方面能够展现出这次心率测量的次数及人体温度,另一方面还可以自动保存这个数据。
本次设计经过了硬件和软件的测试,各部分均达到了预期功能:实现了心率体温的测量,显示每分钟内心跳次数已经人体的温度。该系统操作简单,可靠性高,灵敏度高等优点,最主要的,是贴近人们日常生活,应用于人们的日常生活。应用本设计产品,可提高测量心率体温的效率,使我们的生活变得更加的方便。
目 录
摘 要 I
Abstract II
引 言 1
1 控制系统设计 2
1.1 主控系统方案设计 2
1.2 脉搏传感器方案设计 3
1.3 系统工作原理 5
2 硬件设计 6
2.1 主电路 6
2.1.1 单片机的选择 6
2.1.2 STC89C51的主要功能及性能参数 6
2.1.3 STC89C51单片机引脚说明 6
2.2 驱动电路 8
2.2.1 比较器的介绍 8
2.3放大电路 8
2.4最小系统 11
3 软件设计 13
3.1编程语言的选择 13
3.2 Keil程序开发环境 13
3.3 STC-ISP程序烧录软件介绍 14
3.4 CH340串口程序烧写模块介绍 14
4 系统调试 16
4.1 系统硬件调试 16
4.2 系统软件调试 16
结 论 17
参考文献 18
附录1 总体原理图设计 20
附录2 源程序清单 21
致 谢 25