版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
[6],VCC引脚连接到STM32F103C8T6的5V电源引脚。D0-D7引脚分别连接到STM32单片机的PA0-PA7引脚。RS引脚连接到STM32单片机的PC13引脚,该引脚为寄存器选择脚,高电平时选择数据寄存器、低电平时选择指令寄存器。RW引脚连接到STM32单片机的PC14引脚,该引脚为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或显示地址;当RS为低电平,RW为高电平时,可以读忙信号;当RS为高电平,RW为低电平时,可以写入数据。EN引脚连接到STM32单片机的PC15引脚,该引脚为使能端,当EN端由高电平跳变为低电平时,液晶模块执行命令。LCD1602原理如图4-14所示。图4-14LCD显示模块的原理图4.8蜂鸣器模块电路当系统检测到的参数指标超过设定好的报警阈值后,蜂鸣器报警装置就会发出刺耳的响声来提示,蜂鸣器报警装置采用的是发光二极管,如果体温、心率和血氧各个参数其中一个超过报警阈值后,LED灯便亮起报警,方便观察。给人们对自身生命体征信号检测带来了极大的便利。蜂鸣器模块原理如图4-15所示。图4-15蜂鸣器模块原理图
5系统实现5.1心率血氧采集STM32单片机向MAX30102模块发送初始化配置命令,MAX30102向测量对象发送红色信号,MAX30102使用接收传感器检测反射信号。下一步,将由STM32单片机进行处理检测,以确定其有效性。如图5-1所示为心率、血氧饱和度数据采集软件的流程。图5-1心率血氧采集流程图调用计算心率、计算血氧饱和度的函数,将原始数据转换成实际的心率、血氧饱和度。然后将心率、血氧饱和度同时显示在LCD屏幕上和手机客户端,方便用户查看,再根据心率、血氧饱和度是否超过预设阈值来触发警报,以提醒用户可能存在的异常情况。心率和血氧饱和度数据采集处理实现如代码5-1所示。代码5-1采集和处理数据//将前50组样本数据丢弃,并将后100组数据移到缓冲区顶部for(i=50;i<150;i++){//移动红光传感器数据到缓冲区顶部aun_red_buffer[i-50]=aun_red_buffer[i];//移动红外传感器数据到缓冲区顶部aun_ir_buffer[i-50]=aun_ir_buffer[i];}//读取下一批50组样本数据,并计算LED亮度for(i=100;i<150;i++){//从MAX30102FIFO中读取数据到红外和红光传感器缓冲区maxim_max30102_read_fifo((aun_ir_buffer+i),(aun_red_buffer+i));//计算LED亮度if(aun_red_buffer[i]>aun_red_buffer[i-1])//比较当前和前一组红光传感器数据{//计算亮度下降un_brightness-=(aun_red_buffer[i]-aun_red_buffer[i-1])*MAX_BRIGHTNESS/(un_max-un_min);//保证亮度不会小于0if(un_brightness<0)un_brightness=0;}else{//计算亮度上升un_brightness+=(aun_red_buffer[i-1]-aun_red_buffer[i])*MAX_BRIGHTNESS/(un_max-un_min);//保证亮度不会大于最大亮度值if(un_brightness>MAX_BRIGHTNESS)un_brightness=MAX_BRIGHTNESS;}}5.2体温采集DS18B20是三脚温度传感器,通过单总线通信传输采集到的体温信息。体温采集流程为单片机断开数据线至少480uS,用15-60uS松开数据线,直到DS18B20收到信号。温度传感器DS18B20收到信号后断开至少60-240uS的数据线,主机检测到数据线发送ROM命令,主机须发送连接ROM命令到系统的DS18B20。SCM使用RAM来执行DS18B20中的RAM操作,比如读取和设置寄存器值。得到实际测量人体温度后,如果超过设定阈值时蜂鸣器将会报警。如图5-2为体温采集流程。图5-2体温采集流程图使能DS18B20使用的GPIO端口时钟,然后配置GPIO引脚为推挽输出模式,设置输出速度为50MHz,最后将数据线置高,如代码5-2所示。代码5-2初始化GPIOvoidDS18B20_GPIO_Init(void){//配置DS18B20数据线GPIOGPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_DS18B20_PORT,ENABLE);//使能端口时钟GPIO_InitStructure.GPIO_Pin=DS18B20_GPIO_PIN;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//GPIO速度为50MHzGPIO_Init(DS18B20_GPIO_PORT,&GPIO_InitStructure);//将数据线置高GPIO_SetBits(DS18B20_GPIO_PORT,DS18B20_GPIO_PIN);}发送DS18B20的初始化序列,然后等待DS18B20的响应,如果超时则返回初始化失败的状态,如代码5-3所示。代码5-3DS18B20初始化u8DS18B20_Init(void){unsignedcharwait=0;//发送初始化序列DS18B20_IO_OUT();DS18B20_OUT_0;delay_us(750);DS18B20_OUT_1;delay_us(15);DS18B20_IO_IN();//等待DS18B20响应while(READ_DS18B20_IO&&wait++<200)delay_us(1);if(wait>=200)return1;elsewait=0;while(!READ_DS18B20_IO&&wait++<240)delay_us(1);if(wait>=240)return1;elsereturn0;}从DS18B20传感器中读取一个字节的数据,通过循环读取每一位,并根据时序接收数据位,如代码5-4所示。代码5-4读取数据unsignedcharDS18B20_ReadByte(void){unsignedchari;unsignedchardat=0;//读取一个字节的数据for(i=0;i<8;i++){dat>>=1;DS18B20_IO_OUT();DS18B20_OUT_0;delay_us(2);DS18B20_OUT_1;DS18B20_IO_IN();delay_us(12);if(READ_DS18B20_IO)dat|=0x80;delay_us(60);}returndat;}向DS18B20传感器中写入一个字节的数据,通过循环写入每一位,并根据时序产生时钟信号,如代码5-5所示。代码5-5写入数据voidDS18B20_WriteByte(unsignedchardat){unsignedchari;unsignedchartemp;//写入一个字节的数据DS18B20_IO_OUT();for(i=1;i<=8;i++){temp=dat&0x01;dat=dat>>1;if(temp){DS18B20_OUT_0;delay_us(2);DS18B20_OUT_1;delay_us(60);}else{DS18B20_OUT_0;delay_us(60);DS18B20_OUT_1;delay_us(2);}}}读取DS18B20传感器中的温度值,包括发送开始转换命令、读取温度值的原始数据并转换为实际温度值,最终返回,如代码5-6所示。代码5-6读取温度值floatReadTemperature(void){unsignedcharTPH;unsignedcharTPL;shorti16=0;floatf32=0;//初始化DS18B20并开始转换温度DS18B20_Init();DS18B20_WriteByte(0xCC);DS18B20_WriteByte(0x44);DS18B20_Init();DS18B20_WriteByte(0xCC);DS18B20_WriteByte(0xBE);//读取温度值TPL=DS18B20_ReadByte();TPH=DS18B20_ReadByte();i16=0;i16=(TPH<<8)|TPL;f32=i16*0.0625;return(f32);}5.3WIFI数据传输将电源和单片机连接供电,WIFI模块进行初始化,采集的体温,心率和血氧饱和度数据经过STM32单片机处理后,手机客户端连接到ESP8266建立的热点连接,成功连接后ESP8266实时传输体温、心率和血氧饱和度数据到手机客户端,手机客户端即可查看检测到的体温、心率和血氧饱和度的数据,WIFI数据传输流程如图5-3所示。图5-3数据传输流程图初始化ESP8266,定义一个WIFI网络的名称yi和密码12345678,用于创建WIFI热点,使手机能够通过客户端软件连接到ESP8266WIFI模块,并且通过WIFI将体温,心率和血氧饱和度数据传输到手机客户端,如代码5-7所示。代码5-7WIFI模块voidESP8266_Init(void){uart1_Init(115200);//初始化串口1,波特率设置为115200ESP8266_Clear();//清空ESP8266缓冲区while(ESP8266_SendCmd("AT\r\n\r","OK",200))//发送指令并等待“OK”响应,最长等待时间为200毫秒delay_ms(500);//延时500毫秒while(ESP8266_SendCmd("AT+CWMODE=2\r\n","OK",200))delay_ms(500);while(ESP8266_SendCmd("AT+CWSAP=\"yi\",\"12345678\",5,3\r\n","OK",200))delay_ms(500);while(ESP8266_SendCmd("AT+CIPMUX=1\r\n","OK",200))delay_ms(500);while(ESP8266_SendCmd("AT+CIPSERVER=1,8080\r\n","OK",200))delay_ms(500);}5.4LCD数据显示LCD1602显示屏启动后,屏幕会显示load字符提示等待初始化完成,等待几秒显示屏初始化完成后,显示屏显示心率,血氧饱和度和体温三项数据。在软件算法方面,通过MAX30102的心率、血氧饱和度模块、DS18B20的温度模块向LCD显示屏发送控制信号,WIFI模块将数据无线传输到手机客户端进行实时监控,显示模块工作流程如图5-4所示。图5-4显示模块流程图LCD设置为命令模式,命令数据写入LCD的数据总线,并通过使能脚告知LCD数据已准备好,最后关闭使能,如代码5-8所示。代码5-8发送命令voidLCD_Write_Com(unsignedcharcom){LCD1602_RS=0;//选择发送命令delay_us(1);LCD1602_RW=0;//设置为写模式delay_us(1);LCD1602_EN=1;//使能LCDdelay_us(1);GPIO_Write(GPIOA,(GPIO_ReadOutputData(GPIOA)&0XFF00)+Dao_xu(com));//向引脚写入反转后的命令数据delay_us(100);LCD1602_EN=0;//关闭使能}LCD设置为数据模式,要发送的数据写入LCD的数据总线,并通过使能脚告知LCD数据已准备好,最后关闭使能,如代码5-9所示。代码5-9发送数据voidLCD_Write_Data(unsignedcharData){LCD1602_RS=1;//选择发送数据delay_us(1);LCD1602_RW=0;//设置为写模式delay_us(1); LCD1602_EN=1;//使能LCDdelay_us(1);GPIO_Write(GPIOA,(GPIO_ReadOutputData(GPIOA)&0XFF00)+Dao_xu(Data));//向引脚写入反转后的数据delay_us(100);LCD1602_EN=0;//关闭使能}根据参数确定显示的行(y)和列(x),将单个字符或者字符串写入LCD显示屏,如代码5-10所示。代码5-10写入字符voidLCD_Write_String(unsignedcharx,unsignedchary,unsignedchar*s){if(y==0){LCD_Write_Com(0x80+x);//设置显示位置在第一行}else{LCD_Write_Com(0xC0+x);//设置显示位置在第二行}while(*s)//循环直到遇到字符串结束符{LCD_Write_Data(*s);//逐字符写入显示数据s++;//指针移动到下一个字符}}voidLCD_Write_Char(unsignedcharx,unsignedchary,unsignedcharData){if(y==0){LCD_Write_Com(0x80+x);//设置显示位置在第一行}else{LCD_Write_Com(0xC0+x);//设置显示位置在第二行}LCD_Write_Data(Data);//写入要显示的字符}voidLCD_Clear(void){LCD_Write_Com(0x01);//发送清屏命令delay_ms(5);//延时等待清屏完成}初始化GPIO引脚为输出模式,发送一系列初始化命令给LCD,包括设置为8位数据接口、显示2行、关闭显示、清屏、设置光标移动等,如代码5-11所示。代码5-11初始化LCDvoidLCD_Init(void){//初始化GPIO引脚RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;GPIO_Init(GPIOC,&GPIO_InitStructure);//发送LCD初始化命令LCD_Write_Com(0x38);//设置为8位数据接口,显示2行,5x7点阵delay_ms(5);LCD_Write_Com(0x08);//关闭显示delay_ms(5);LCD_Write_Com(0x01);//清屏delay_ms(5);LCD_Write_Com(0x06);//光标移动设置delay_ms(5);LCD_Write_Com(0x0C);//开启显示,不显示光标delay_ms(5);}5.5客户端软件实现首先手机端运行客户端软件,点击连接按钮。连接到STM32单片机的ESP8266数据传输模块。当连接成功后,手机客户端等待接收STM32单片机发送的数据。接收到数据后,根据数据内容更新界面显示,同时可以发送控制命令到STM32单片机,如修改阈值。客户端软件工作流程和软件界面分别如图5-5,图5-6所示。图5-5客户端软件流程图图5-6软件界面打开软件,主活动代码会初始化界面和布局,软件启动时会请求所需的权限,如果未获得位置权限,则将其添加到权限列表中,并请求权限。获取位置权限后,继续获取手机系统的WIFI服务权限,并检查WIFI是否启用。如果WIFI未启用,显示打开WIFI失败提示用户。创建了一个新的线程,在这个线程中检查WIFI是否已经启用,如果没有,则尝试启用WIFI,如代码5-12所示。代码5-12启用WIFIList<String>permissionList=newArrayList<>();If(ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.ACCESS_FINE_LOCATION)!=PackageManager.PERMISSION_GRANTED){permissionList.add(Manifest.permission.ACCESS_FINE_LOCATION);}if(!permissionList.isEmpty()){String[]permissions=permissionList.toArray(newString[permissionList.size()]);ActivityCompat.requestPermissions(MainActivity.this,permissions,1);}wifiiManager=(WIFIManager)getApplicationContext().getSystemService(Context.WIFI_SERVICE);if(!wifiManager.isWIFIEnabled()){Toast.makeText(this,"打开WIFI失败!",Toast.LENGTH_LONG).show();finish();return;}newThread(){SuppressLint("MissingPermission")publicvoidrun(){if(!wifiManager.isWIFIiEnabled()){wifiManager.setWIFIEnabled(true);}}}.start();在用户触摸屏幕时检查是否需要隐藏软键盘。当用户点击屏幕时,首先获取当前获取焦点的控件。如果需要隐藏软键盘,就会清除控件的焦点,使光标消失,并且隐藏软键盘,如代码5-13所示。代码5-13检查是否需要隐藏软键盘publicbooleandispatchTouchEvent(MotionEventev){if(ev.getAction()==MotionEvent.ACTION_DOWN){Viewv=getCurrentFocus();if(isShouldHideKeyboard(v,ev)){v.clearFocus();//清除Edittext的焦点从而让光标消失hideKeyboard(v.getWindowToken());}}returnsuper.dispatchTouchEvent(ev);}privatevoidhideKeyboard(IBindertoken){if(token!=null){//若token不为空则获取输入法管理器使其隐藏输入法键盘InputMethodManagerim=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);im.hideSoftInputFromWindow(token,InputMethodManager.HIDE_NOT_ALWAYS);}}连接到指定的WIFI网络。当连接成功时,会弹出一个消息提示连接成功了,否则弹出连接失败,如代码5-14所示。代码5-14WIFI连接提示//响应startActivityForResult()返回的结果publicvoidonActivityResult(intrequestCode,intresultCode,Intentdata){if(requestCode==REQUEST_CONNECT_DEVICE&&resultCode==Activity.RESULT_OK){//连接结果,由DeviceListActivity设置返回//直接连接特定的WIFI网络Stringssid="yi";Stringpassword="12345678";//连接WiFibooleanconnected=connectToWifi(ssid,password);//根据连接结果显示提示信息Toast.makeText(this,connected?"连接WIFI成功!":"连接WIFI失败!",Toast.LENGTH_SHORT).show();}}//连接WIFI的方法privatebooleanconnectToWifi(Stringssid,Stringpassword){//设置WIFI配置信息WifiConfigurationwifiConfig=newWifiConfiguration();wifiConfig.SSID="\""+ssid+"\"";wifiConfig.preSharedKey="\""+password+"\"";//获取WIFI管理器WifiManagerwifiManager=(WifiManager)getApplicationContext().getSystemService(Context.WIFI_SERVICE);//添加WIFI网络配置,并获取网络IDintnetworkId=wifiManager.addNetwork(wifiConfig);//如果成功添加网络配置if(networkId!=-1){//断开当前连接wifiManager.disconnect();//启用指定网络wifiManager.enableNetwork(networkId,true);//重新连接WIFI网络returnwifiManager.reconnect();}returnfalse;}当有新消息到达时,检查消息内容是否包含特定的标记,这些标记代表着不同的健康指标,比如心率、血氧饱和度、体温。发现消息中包含了这些标记,便从消息中提取相应的数值,并将这些数值更新到客户端界面上,以便用户可以清楚地看到当前的健康状态,让用户可以方便地实时监测自己的健康指标,提升了用户对健康状况的感知和管理,如代码5-15所示。代码5-15数据展示Handlerhandler=newHandler(){publicvoidhandleMessage(Messagemsg){super.handleMessage(msg);processMessage(smsg);smsg="";//清空smsg,以便下一次接收数据时使用}privatevoidprocessMessage(Stringmessage){intintIndex1=message.indexOf("$hear:");if(intIndex1!=-1){setTextForTextView(R.id.textViewHeartrate,message,intIndex1);}intintIndex2=message.indexOf("$spo2:");if(intIndex2!=-1){setTextForTextView(R.id.textViewSpo2,message,intIndex2);}intintIndex3=message.indexOf("$temp:");if(intIndex3!=-1){setTextForTextView(R.id.textViewTemperature,message,intIndex3);}}privatevoidsetTextForTextView(inttextViewId,Stringmessage,intindex){Stringstr=message;TextViewtextView=findViewById(textViewId);textView.setText(str.substring(index+6,str.indexOf("#",index)));}};当用户点击连接按钮时,如果WIFI未开启,则会提示用户打开WIFI并尝试打开WIFI。如果WIFI已经可用且尚未连接设备,则会打开一个设备列表页面进行设备搜索。当用户点击断开连接按钮时,如果当前已经建立了连接,则会关闭连接,停止数据传输,并弹出消息提示WIFI已断开。当用户点击退出按钮时,会安全地关闭连接并退出应用,以避免异常情况发生。这些按钮的作用是控制与设备的连接状态,包括连接设备、断开连接和安全退出应用。这样用户就可以方便地管理与设备的通信,并保证在退出应用时不会出现异常情况,如代码5-16所示。代码5-16按键控制publicvoidonConnectButtonClicked(Viewview){if(!_wifi.isEnabled()){//如果WIFI不可用,提示用户打开WIFI并返回Toast.makeText(this,"打开WIFI中...",Toast.LENGTH_SHORT).show();_wifi.enable();return;}if(_socket==null){//如果未连接设备,打开设备列表页面进行搜索startActivityForResult(newIntent(this,DeviceListActivity.class),REQUEST_CONNECT_DEVICE);}}publicvoidonDisconnectionClicked(Viewview){if(_socket!=null){//关闭连接try{Toast.makeText(this,"WIFI断开",Toast.LENGTH_SHORT).show();bRun=false;//停止数据接收线程_socket.close();_socket=null;}catch(IOExceptione){}}}publicvoidonExitButtonClicked(Viewview){if(_socket!=null){//安全关闭连接try{bRun=false;//停止数据接收线程_socket.close();_socket=null;}catch(IOExceptione){}}finish();//退出应用}当用户点击发送调整阈值的指令时,会先检查是否连接上WIFI模块,如果连接为空,显示一条短暂的消息提醒用户连接WIFI模块。再检查各个文本输入框是否为空,如果为空则显示一条短暂的消息提醒用户输入数据,如代码5-17所示。代码5-17发送检查publicvoidonSendButtonClicked(Viewview){//检查客户端套接字和客户端打印写入器是否为空if(clientSocket==null||clientPrintWriter==null){//如果为空,显示一个短暂的提示消息,并返回Toast.makeText(this,"请先连接",Toast.LENGTH_SHORT).show();return;}//检查输入框中是否有数据if(edit0.getText().length()==0||edit1.getText().length()==0||edit2.getText().length()==0||edit3.getText().length()==0||edit4.getText().length()==0){//如果有任何一个输入框为空,显示一个短暂的提示消息,并返回Toast.makeText(this,"请先输入数据",Toast.LENGTH_SHORT).show();return;}}用户在界面上输入的一系列数据,如心率范围、体温范围、血氧饱和度范围,通过WIFI连接将阈值设置命令传输给STM32单片机。当用户点击发送按钮时,程序会从界面上获取用户输入的各项数据,并将其按照一定的格式打包成一个字节数组。接着,通过WIFI连接将命令发送给STM32单片机。STM32单片机收到数据后,可以根据这些数据进行相应的处理,比如根据用户设置的范围进行健康状态监测或警报等,如代码5-18所示。代码5-18发送阈值设置//获取心率最小值、最大值、体温最小值、最大值和血氧最小值的输入框文本视图TextViewedit0=findViewById(R.id.heartrate_min);TextViewedit1=findViewById(R.id.heartrate_max);TextViewedit2=findViewById(R.id.temperature_min);TextViewedit3=findViewById(R.id.temperature_max);TextViewedit4=findViewById(R.id.SPO2_Min);//获取输入框中的文本内容并转换为字符串finalStringstr1=edit0.getText().toString();finalStringstr2=edit1.getText().toString();finalStringstr3=edit2.getText().toString();finalStringstr4=edit3.getText().toString();finalStringstr5=edit4.getText().toString();//在新线程中执行网络操作,以避免阻塞UI线程newThread(newRunnable(){publicvoidrun(){//将数据格式化成字符串,并发送到服务器clientPrintWriter.println("hear_min:"+str1+","+"hear_max:"+str2+","+"temp_min:"+str3+","+"temp_max:"+str4+","+"spo2_min:"+str5+"\r\n");clientPrintWriter.flush();//刷新打印写入器}}).start();//启动新线程
6系统测试6.1硬件测试硬件测试首先要检查温度模块、心率血氧模块,数据传输模块是否有故障,LCD显示屏是否可以显示完整,蜂鸣器是否可以正常响应,USB接口供电电压是否满足设计要求,PCB线路需要避免交叉,布线不仅要协调,还要美观,使整个系统设计清晰易懂。硬件测试如图6-1所示,各功能模块正常。图6-1硬件测试图6.2软件测试使用Keil5编程软件对整个系统的各个模块进行编译,将温度检测程序、心率血氧检测程序、显示程序、无线传输程序、报警程序五大部分分开编写,软件调试出现代码问题就便于查看和纠正,全部程序无误就可以统一调试,最后还需该系统的局域网与无线传输模块保持一致,手机端客户端就能实时接收到采集的生命特征信号,确保软件调试的可靠稳定性,整个系统的数据读取、传输和检测各个功能都可以进行。软件编译测试结果如图6-2所示,软件编译成功无报错。图6-2软件测试图6.3测试结果系统软硬件开发完成后,需要启动软件运行,打开手机WIFI功能,将无线接入点连接到ESP8266数据传输模块,然后将指尖放在MAX30102传感器上进行心率和血氧饱和度检测,再用手握住DS18B20
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026事业单位工勤技能-江西-江西机械热加工四级(中级工)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-江西-江西保健按摩师五级(初级工)历年参考题库含答案详解3套试卷
- 在岗护士考助产技术证吃香吗?助产技术备考题库在哪找
- 新生儿每一天护理流程
- 缺血性心肌病CI治疗指南
- 脑瘫功能康复评定
- 调查报告-个人信用2026(3篇)
- 血脂异常患者随访管理诊疗进展 课件
- 集中健康活动
- 电力安全规章手册讲解
- T/ZHCA 026-2023化妆品抗糖化人体测试方法
- 妊娠合并心脏病护理查房
- 中外航海文化知到课后答案智慧树章节测试答案2025年春中国人民解放军海军大连舰艇学院
- 四川省三级综合医院评审标准实施细则(2023年版)
- Unit3SeaExploration单词讲解教学设计-2023-2024学年高中英语人教版(2019)选择性必修第四册
- PCCP管道监造监理实施细则(按照新规范编制)
- 海绵城市工程方案
- 汽车加油加气加氢站技术标准
- 磷矿石的烧结
- 中国石油天然气股份有限公司油气田地面建设工程(项目)竣工验收手册修订版
- GB/T 2-2016紧固件外螺纹零件末端
评论
0/150
提交评论