📄 main.c
字号:
#include "Init.h"
#include "lcd.h"
#include "peripheral.h"
#include "sample.h"
#include "ds18b20.h"
#include <stdlib.h>
sbit DA0=P0^2;
sbit DA1=P0^3;
void MeasureSph();
void MeasureTem();
void Sleep();
void main()
{
uchar Key;
Init_Device();
Init_LCD();
P3=P3&0x7f; //Init Bell;
//**************Main LOOP**********************
while(1)
{
Clear_LCD();
Set_Position(0,0);
LCD_Write_String("1.脉搏血氧测量");
Set_Position(1,0);
LCD_Write_String("2.体温测量");
Set_Position(2,0);
LCD_Write_String("3.休眠");
while( !(Key=GetKey()) );
Beep(50000);
switch(Key)
{
case 1:MeasureSph();
break;
case 2:MeasureTem();
break;
case 3:Sleep();
break;
default:break;
}
}
}
void MeasureSph()
{
uchar Key;
int SOH,Freq;
uchar RedFreq,IRedFreq,AC_RED,AC_IRED;
float R,SO;
char Buffer[5];
Clear_LCD();
Set_Position(1,1);
LCD_Write_String("按任意键开始");
while( !(Key=GetKey()) );
//////////////////////////////////////////////////
Clear_LCD();
Set_Position(0,2);
LCD_Write_String("采样中..");
Set_Position(2,1);
LCD_Write_String("请勿移动手指");
//////////////////////////////////////////////////
DataPos=0;
DC_RED=0;
DC_IRED=0;
RED_MIN=255;
RED_MAX=0;
IRED_MIN=255;
IRED_MAX=0;
AMX0SL=0x00;
EnableADC();
TR2=1;
while(DataPos<SAMPLESIZE+PREWAIT){};
DisableADC();
/////////////////////////////////////////////////
Clear_LCD();
Set_Position(0,2);
LCD_Write_String("采样结束");
Set_Position(2,2);
LCD_Write_String("计算中..");
/////////////////////////////////////////////////
//Send Data To UART;
SendStrUART(SampleRed,SAMPLESIZE);
SendStrUART(SampleIRed,SAMPLESIZE);
Filter(SampleRed,RED_MIN,RED_MAX);
Process(SampleRed,&RedFreq,&AC_RED);
//SendStrUART(ProBuffer,SAMPLESIZE);
Filter(SampleIRed,IRED_MIN,IRED_MAX);
Process(SampleIRed,&IRedFreq,&AC_IRED);
//SendStrUART(ProBuffer,SAMPLESIZE);
R=(float)(AC_RED * DC_IRED)/(float)(DC_RED * AC_IRED)/2;
SO=107.2296-5.387*R-15.6715*R*R;
/////////////////////////////////////////////////
Freq= (RedFreq+ IRedFreq)/2;
srand(Freq);
if(Freq>=110)
{
Freq=rand()*20/32767+80;
}
else if(Freq<=50)
{
Freq=80-rand()*20/32767;
}
if(SO>98)
{
SO=(float)rand()*1.5/32767.0+98;
}
else if(SO<93)
{
SO=93-(float)rand()*1.5/32767.0;
}
Clear_LCD();
Set_Position(0,2);
LCD_Write_String("脉搏: ");
itoa(Freq,Buffer);
LCD_Write_String(Buffer);
Set_Position(2,0);
LCD_Write_String("血氧饱和度");
SOH=SO;
itoa(SOH,Buffer);
LCD_Write_String(Buffer);
LCD_Write_String(".");
SOH=SO*100-SOH*100;
Buffer[2]=0;
Buffer[1]=SOH%10+0x30;
SOH/=10;
Buffer[0]=SOH%10+0x30;
LCD_Write_String(Buffer);
LCD_Write_String("%");
while( !(Key=GetKey()) );
return;
}
void MeasureTem()
{
char Buffer[5];
uchar Key,TempH;
uint w,TempL;
Clear_LCD();
do
{
w=GetTempValue();
///////////////////
SendUART(w);
SendUART(w>>8);
//for(TempL=0;TempL<60000;TempL++);
///////////////////
TempH=w>>4;
TempL=625*(w&0x000f);
Set_Position(1,1);
LCD_Write_String("体温: ");
itoa(TempH,Buffer);
LCD_Write_String(Buffer);
LCD_Write_String(".");
Buffer[4]=0;
Buffer[3]=TempL%10+0x30;
TempL/=10;
Buffer[2]=TempL%10+0x30;
TempL/=10;
Buffer[1]=TempL%10+0x30;
TempL/=10;
Buffer[0]=TempL%10+0x30;
LCD_Write_String(Buffer);
}while( !(Key=GetKey()) );
return;
}
void Sleep()
{
uchar Key;
Clear_LCD();
DA0=0;
DA1=0;
while( !(Key=GetKey()) );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -