毕设——基于STM32的病室监护系统

1. 开发环境

1.1 单片机开发环境

KEIL5——百度网盘链接:点击此处
推荐微信搜索KEIL5下载,下载资源很多,自行搜索下载安装

1.2 触摸屏开发环境

USART HMI——HMI官网下载:http://wiki.tjc1688.com/download/usart_hmi.html
下载后自行安装

2. 主要材料清单

STM32F103C8T6最小系统 x 1陶晶驰HMI触摸屏 x 1
脉搏传感器 x 1DS18B20温度传感器 x 1
0.96寸OLED屏幕 x 1JR6001语音模块 x 1
液位传感器 x 1按键 x 4
J-LINK下载器 x 1USB-TTL x 1

3. 实物图

3.1 电路板实物图

在这里插入图片描述

3.2 触摸屏实物图

在这里插入图片描述

3.3 控制板原理图

在这里插入图片描述
原理图源文件:点击此处。用AD2022版本打开或者更高版本打开
注意:部分管脚可能连接错误,实际管脚连接与代码对应一致。

4. 代码

4.1 单片机代码

4.1.1 主程序部分代码

int main(void)
{	
	Device_Init();
	while (1)
	{			
		adc_data1 = Get_Adc_Average(ADC_Channel_1,5);
		if(adc_data1 > 4095) adc_data1 = 4095;
		adc_data1 = adc_data1*100/4095;
		
		ReadBMP();
		bodytemp = DS18B20_Get_Temp() + 0;//110
		bodytempH = DS18B20_Get_Temp()/10 + 0;//11
		bodytempL = DS18B20_Get_Temp()%10;
		
		if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12) == 0){
			delay_ms(15);
			if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12) == 0){
				OLED_Clear();
				st1++;
				if(st1 == 2)st1 = 0;
				while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12) == 0);
			}
		}
		
		if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13) == 0){
			delay_ms(15);
			if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13) == 0){
				OLED_Clear();
				st2++;
				if(st2 == 5)st2 = 0;
				while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13) == 0);
			}
		}

		if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14) == 0){
			delay_ms(15);
			if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14) == 0){
				st3 = 1;
				while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14) == 0);
			}
		}
		
		if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15) == 0){
			delay_ms(15);
			if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15) == 0){
				st4 = 1;
				while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15) == 0);
			}
		}
		
		if(st1 == 0){
			if(bodytemp < tempL){
				OLED_ShowCHinese(64+20+16,0,26);
				OLED_ShowCHinese(64+20+32,0,28);
				MusicOn(1);
			}
			else if(bodytemp > tempH){
				OLED_ShowCHinese(64+20+16,0,26);
				OLED_ShowCHinese(64+20+32,0,27);
				MusicOn(1);
			}
			else{
				OLED_ShowCHinese(64+20+16,0,29);
				OLED_ShowCHinese(64+20+32,0,31);
			}
			
			if( pBPM > pBPMH){
				OLED_ShowCHinese(64+20+16,2,26);
				OLED_ShowCHinese(64+20+32,2,7);
				MusicOn(2);
			}
			else if( pBPM < pBPML){
				OLED_ShowCHinese(64+20+16,2,26);
				OLED_ShowCHinese(64+20+32,2,8);
				MusicOn(2);
			}
			else{
				OLED_ShowCHinese(64+20+16,2,29);
				OLED_ShowCHinese(64+20+32,2,31);
			}
			
			if( adc_data1 < ylsign && adc_data1 > 0){
				MusicOn(3);
			}
			else{
				//正常
			}	

			OLED_ShowCHinese(0,0,13);
			OLED_ShowCHinese(0+16,0,14);
			OLED_ShowCHinese(0+32,0,11);
			OLED_ShowNum(32+16,0,bodytempH,2,16);
			OLED_ShowString(32+16+16,0,".",16);
			OLED_ShowNum(64+8,0,bodytempL,1,16);
			OLED_ShowCHinese(64+8+12,0,19);
			OLED_ShowCHinese(0+32-32+2,2,25);
			OLED_ShowCHinese(0+48-32,2,5);
			OLED_ShowCHinese(0+64-32,2,11);
			OLED_ShowNum(64+8-32,2,pBPM,3,16);	
			OLED_ShowCHinese(0+32-32+2,4,21);
			OLED_ShowCHinese(0+48-32,4,22);
			OLED_ShowCHinese(0+64-32,4,11);
			OLED_ShowNum(64+8-32,4,adc_data1,3,16);
			OLED_ShowString(64+8-32+32,4,"%",16);
		}
		else{
			OLED_ShowCHinese(0,0,13);
			OLED_ShowCHinese(0+16,0,14);
			OLED_ShowCHinese(0+32,0,11);
			OLED_ShowNum(32+16,0,tempH/10,3,16);
			OLED_ShowNum(32+16+32+10,0,tempL/10,3,16);
			OLED_ShowCHinese(0+32-32+2,2,25);
			OLED_ShowCHinese(0+48-32,2,5);
			OLED_ShowCHinese(0+64-32,2,11);
			OLED_ShowNum(32+16,2,pBPMH,3,16);
			OLED_ShowNum(32+16+32+10,2,pBPML,3,16);
			OLED_ShowCHinese(0+32-32+2,4,21);
			OLED_ShowCHinese(0+48-32,4,22);
			OLED_ShowCHinese(0+64-32,4,11);
			OLED_ShowNum(32+16+16,4,ylsign,3,16);
			
			switch(st2){
				case 0:	{
					OLED_ShowString(64+15,0,"*",16);
					if(st3 == 1){
						tempH = tempH + 10;
						st3 = 0;
					}
					if(st4 == 1){
						tempH = tempH - 10;
						st4 = 0;
					}
					break;
				}
				case 1:	{
					OLED_ShowString(64+10+45,0,"*",16);
					if(st3 == 1){
						tempL = tempL + 10;
						st3 = 0;
					}
					if(st4 == 1){
						tempL = tempL - 10;
						st4 = 0;
					}
					break;
				}
				case 2:	{
					OLED_ShowString(64+15,2,"*",16);
					if(st3 == 1){
						pBPMH = pBPMH + 10;
						st3 = 0;
					}
					if(st4 == 1){
						pBPMH = pBPMH - 10;
						st4 = 0;
					}
					break;
				}
				case 3:	{
					OLED_ShowString(64+10+45,2,"*",16);
					if(st3 == 1){
						pBPML = pBPML + 10;
						st3 = 0;
					}
					if(st4 == 1){
						pBPML = pBPML - 10;
						st4 = 0;
					}
					break;
				}
				case 4:	{
					OLED_ShowString(64+10+32,4,"*",16);
					if(st3 == 1){
						ylsign = ylsign + 5;
						st3 = 0;
					}
					if(st4 == 1){
						ylsign = ylsign - 5;
						st4 = 0;
					}
					break;
				}
				default:break;
			}
		}
		
		UsartPrintf(hmi_uart,"t33.txt=\"%d.%d\"\xff\xff\xff",bodytempH,bodytempL);
		UsartPrintf(hmi_uart,"t32.txt=\"%d%\"\xff\xff\xff",adc_data1);
		UsartPrintf(hmi_uart,"t34.txt=\"%d\"\xff\xff\xff",pBPM);
	}
}

4.1.2 代码烧录

完整代码下载:点击此处

魔术棒配置下载器,点击下载即可。不会下载,自行搜索教程。

4.2 触摸屏代码

4.2.1 开发界面

在这里插入图片描述
文本控件可以任意修改内容,控件的名称不要改动!!!

4.2.2 代码烧录

完整代码下载:点击此处

插好USB-TTL,点击下载按钮即可完成下载。不会下载,软件官网有教程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ElecMie丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值