本设计的硬件构成:
51单片机+晶振电路+复位电路+LCD1602液晶显示+心率采集+信号处理电路+温度传感器+按键+语音播报模块+喇叭+电源开关组成。
功能介绍:
1、LCD1602液晶屏显示当前的心率和当前体温,心率单位是B/min,温度单位为℃;
2、当手指放到心率传感器上,单片机检测有心率变化,开始计算心率;将温度传感器握在手中,即可测量出当前体温;
3、按键可以设置报警值的上下限心率,也可设置报警的上下限体温值。
4、语音播报功能:当用户按下手指时,显示屏提示开始测量(TESTING);当用户测量完成,触发语音播报功能,语音模块会播报当前测量到的心率和体温值;同时,单片机会与设置的体温和心率值进行比较,播报此次测量结果是否正常;
5、按键功能
(1)S0:复位键,按下后,系统复位;
(2)按键1:设置键,进入设置状态。
(3)按键2:进入设置状态后,按下后报警值加一(未在设置状态,按下无效)。
(4)按键3:进入设置状态后,按下后报警值减一。
主要物料清单及型号:
显示屏:OLED12864-IIC模块;
单片机:STM32F103C8T6;
心率传感器:ST188;
蜂鸣器:5V有源蜂鸣器;
温度传感器:DS18B20;
语音播报模块:JQ8900;
部分程序源码:
/****************主函数***************/
void main()
{
uchar buf;
ReadTemperature();
show1();//显示问候语和其他信息
UartInit();
time_init(); //初始化定时器
init_int0(); //外部中断0初始化程序
init_eeprom(); //读eeprom数据
while(1)
{
key(); //按键扫描
if(flat300ms%4==0) //200ms
{
if(bobao==1)
{
Send_Data(0xaa); //您当前的心率为
Send_Data(0x07);
Send_Data(0x02);
Send_Data(0x00);
Send_Data(0x0d);
Send_Data(0xb3+0x0d);
delay_1ms(2000);
buf = rate1/100;
if(buf!=0)
{
Send_Data(0xaa);
Send_Data(0x07);
Send_Data(0x02);
Send_Data(0x00);
Send_Data(buf);
Send_Data(0xb3+buf);
delay_1ms(350);
Send_Data(0xaa);
Send_Data(0x07);
Send_Data(0x02);
Send_Data(0x00);
Send_Data(0x0c);
Send_Data(0xb3+0x0c);
delay_1ms(350);
}
buf = rate1%100/10;
if(buf!=0)
{
Send_Data(0xaa);
Send_Data(0x07);
Send_Data(0x02);
Send_Data(0x00);
Send_Data(buf);
Send_Data(0xb3+buf);
delay_1ms(350);
Send_Data(0xaa);
Send_Data(0x07);
Send_Data(0x02);
Send_Data(0x00);
Send_Data(0x0a);
Send_Data(0xb3+0x0a);
delay_1ms(350);
}
else if(rate1>0)
{
Send_Data(0xaa);
Send_Data(0x07);
Send_Data(0x02);
Send_Data(0x00);
Send_Data(0x0b);
Send_Data(0xb3+0x0b);
delay_1ms(350);
}
buf = rate1%10;
if(buf!=0)
{
Send_Data(0xaa);
Send_Data(0x07);
Send_Data(0x02);
Send_Data(0x00);
Send_Data(buf);
Send_Data(0xb3+buf);
delay_1ms(350);
}
Send_Data(0xaa);
Send_Data(0x07);
Send_Data(0x02);
Send_Data(0x00);
Send_Data(0x0e);
Send_Data(0xb3+0x0e);
delay_1ms(2000);
buf = ReadTempDate/100;
if(buf!=0)
{
Send_Data(0xaa);
Send_Data(0x07);
Send_Data(0x02);
Send_Data(0x00);
Send_Data(buf);
Send_Data(0xb3+buf);
delay_1ms(350);
Send_Data(0xaa);
Send_Data(0x07);
Send_Data(0x02);
Send_Data(0x00);
Send_Data(0x0a);
Send_Data(0xb3+0x0a);
delay_1ms(350);
}
...
...
}
}
}