无线病房病床呼叫系统_第1页
无线病房病床呼叫系统_第2页
无线病房病床呼叫系统_第3页
无线病房病床呼叫系统_第4页
无线病房病床呼叫系统_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章绪论在该章节中的第一部分,对系统的设计意义进行介绍,第二部分对国内外的发展状况进行叙述,第三部分对该论文的整体构成进行分析,论述其意义。在本章的最后组成结构进行论述。1.1研究目的及意义病床病房呼叫系统是为了提高医疗服务质量和效率而设计的,其目的是为医院提供一种快速、可靠的病床呼叫和管理解决方案,帮助医护人员更好地管理病人,提高病人的满意度和医院的整体服务质量[1]。具体而言,病床病房呼叫系统的意义包括:快速响应病人需求:病人需要及时得到医护人员的关注和帮助,病床病房呼叫系统可以通过呼叫器和显示屏等设备,快速响应病人的呼叫需求,帮助病人及时得到帮助和治疗。提高医疗服务效率:病床病房呼叫系统可以帮助医护人员更快地找到病人,更好地管理和协调病人的护理和治疗,从而提高医疗服务效率和减轻医护人员的工作压力[2]。提高病人满意度:病床病房呼叫系统可以帮助病人及时得到医护人员的关注和帮助,提高病人的满意度和治疗效果,从而增强医院的声誉和竞争力。提高医院管理水平:病床病房呼叫系统可以帮助医院实现对病人的实时管理和监控,加强医院的管理和协调能力,提高医院的整体管理水平和运营效率。因此,病床病房呼叫系统在提高医疗服务质量和效率、提高病人满意度、提高医院管理水平等方面都具有重要的意义和价值。1.2国内外现状分析随着通信技术的快速发展,无线通信技术已逐渐深入人们生活的方方面面。在现代医学领域,医疗设备也开始逐步运用无线传输来代替传统的有线传输[3]。2021年,唐建华在《基于物联网技术的临床医疗护理监测系统的研究与设计》文中谈到目前,许多医疗机构所使用的病床呼叫系统基本都属于有线系统,该系统不仅占用空间较大,而且整个系统的发射端和接收端的连线也较为复杂。同时,整个系统后期的维护维修难度与费用都相对较高,因此大大地降低了有线呼叫系统的实用价值[4]。2022年,姜涛;杨学存在《基于Wifi的嵌入式多功能病房呼叫系统》文中讲到,每一病区构成一个呼叫子系统,全院各病区呼叫子系统与计算机可组成网络,通过软件设计实现呼叫系统的病床信息管理,形成病房监护管理中心。由医院管理部门及时了解和掌握各病区的工作情况,调配医护人员[5]。2022年,江琳在《基于NRF24L01的简易病房呼救系统设计与实现》文中介绍了整个无线病床呼叫系统主要由发射端和接收端两部分组成。其中,发射端主要由单片机控制模块、无线通信模块、呼叫按键模块及显示模块组成;接收端主要由单片机控制模块、无线通信模块、应答按键模块、液晶显示模块及蜂鸣器报警模块组成[6]。2021年,KormosWilliam.Oncall在《Myfeetarealwayscold,especiallywhenIgotobed.CouldIhaveaproblemwithmycirculation?》文章中讲到病床呼叫系统由从机、主机等两部分组成。从机(呼叫源)即病床按钮,主机包括PLC及显示和监护系统。2022年,EddyChristopher、JonesSusanC在《Bedbugs,publichealth,andsocialjustice:Part1,Acalltoaction》文中,医院病床呼叫装置大多由单片机及低压电力线等传输媒质所构成。本研究拟从可编程控制器(PLC)的应用出发,提出一种以PLC为核心的智能化病床呼叫系统。2020年,ChristinaScott在《Youcallitamenialtask,Icallitholisticcare》文中谈论到病床呼叫是医院每张病床不可或缺的一个贴心服务功能,它能及时准确地将病人的求助信息通知到医护人员,使病人得到快速准确的帮助。为了保障病人的生命安全,避免医疗事故及纠纷,所以病床呼叫系统一定要稳定可靠,准确及时快速传递呼叫信息,而且要求便于操作。综上所述,当今社会科学技术发展迅速,患者在住院期间,可能会在任意时间请求医生或护士进行诊断或护理。临床求助呼叫是传送临床信息的重要手段[7]。1.3主要研究内容本文设计的无线病床病房呼叫系统是基于WiFi通信技术的一个方案,系统利用WiFi无线通信技术构建无线通信网络。下位机利用STM32微处理器进行信息的检测、处理和显示,实现了静脉输液的自动检测、无烟病房的自动报警、TFT彩屏显示、病床的升降控制、按钮呼叫、红外遥控呼叫、病房的语音呼叫和报警指示灯等功能。上位机为护士站监控画面,监控画面由VisualBasic开发工具制作,进行病房号,床号,呼叫内容的显示。实验表明,本系统增强了主控中心的功能,使主控中心免除了布线的困难,呼叫的可靠性提高,适合现代医院的需要。该系统应完成的主要功能有:主机:无线接收并通过1602液晶显示病房呼叫的床位和报警。从机:八个按键对应8个不同的病床号,从左到右分别为1到8号病床;检测病人呼叫信号的采集和无线发射;(从机)当有病床上的病人要呼叫时,按下按键,(主机)LCD1602液晶显示屏上会对应的显示病人的床位号,同时对应的指示灯会亮,蜂鸣产生报警提示医务人员,医务人员按下“响应键”可以取消本次的呼叫,对应的指示灯会灭,同时液晶上会清除病床号。(从机)如果同时有多人同时呼叫时,(主机)液晶上会按先后顺序显示出不同的床位号,并对应的指示灯会亮。医务人员按键“响应键“会按先后顺序依次取消病人的呼叫,按一下取消一位病人,直到全部取消。1.4论文构成论文在开始部分对系统管理开发背景中,使用相应的开发技术进行论述,在对系统的生产和市场需求等分析,完成详细的论述,最后实现系统各个模块的设计、编辑,实现对功能模块的搭建,最后在这些基础上,对其开发流程完成论述。本论文的组织结构如下。第1章主要的内容是完成系统开发状况的分析,对当前国内外的状况分析,研究其开发的意义。第2章主要内容是系统开发过程中所用到的核心技术以及、系统开发过程中使用的开发平台以及需求分析。第3章主要是对系统的硬件进行了分析。第4章主要是系统软件设计逻辑说明。第5章主要是系统功能实现的测试说明。第6章主要是对系统设计的总结和展望。

第2章系统总体结构设计在功能结构模块设计的基础上,系统设计会详细展现每个功能模块具体的实现流程,并详细描述出系统功能模块的输入、输出和处理过程,这可以有效避免在系统实施阶段对程序进行设计时,用特定传感器进行硬件设计,从而实现系统的整体功能。2.1设计方案本设计是STM32单片机为控制核心,显示屏、指示灯、蜂鸣器、按键、蓝牙远程APP模块实现病床病房呼叫系统。系统框图如下图:图2-1结构框图2.2功能需求分析所谓系统的功 能 分析,就是分析用户提出的 具 体的功 能需求,分析这些 功能是否​  合理 ,通 过现有的 技术能实现这些需求。为了系统的完整性需求 分析是必 不可少的 ,因 此,在需求分 析过程中,分 析的  问题越透 彻系统就越完整[8]。传感器与计算机技术和通信技术被称为信息技术的三大支柱,因为硬件系统不能直​ 接获取所需的各种信息,因此硬件系统中获取数据信息常常通过传感器来实 现。传感器在硬件系统中将 测量测得的生物量,物理量,化学 量等。 利用生物,物理和化学效应将其转换为 需的电量[9]。本系统采用的模块如下。显示屏模块:显示病床号:系统需要在显示屏上显示每个病床的编号,方便医护人员查看和管理;实时更新:系统需要能够实时更新病床号信息,例如当患者更换病床或者新患者入住时,系统需要能够及时更新显示屏上的病床号信息;显示屏幕清晰:系统需要保证显示屏幕清晰,字体大小适中,颜色鲜艳,以便医护人员在不同光线环境下都能清晰地看到病床号信息;显示格式规范:系统需要规范病床号的显示格式,例如使用数字表示,且每个病床的编号必须唯一,避免出现混淆和错误;显示方式可定制化:系统需要提供显示方式的可定制化,例如可以设置不同颜色、字体大小等,以便医护人员根据自己的需求进行调整;显示内容简洁明了:系统需要保证显示内容简洁明了,病床号信息的显示应该尽量减少冗余信息,让医护人员能够快速地获取所需信息。总之,基于STM32的病床病房呼叫系统中显示屏显示病床号的功能需求是为了方便医护人员进行病床管理和病人救治,提高医疗服务质量和效率[10]。指示灯模块:系统需要检测到病人的呼叫请求;当有呼叫请求时,系统需要向指定的护士呼叫并通知其到该病床进行处理;系统需要控制指示灯的状态,在有呼叫请求时点亮相应的指示灯,以便护士能够快速发现呼叫请求;当护士响应呼叫请求并处理完毕后,系统需要及时关闭指示灯[11]。蜂鸣器模块:响铃功能:当有病人呼叫时,蜂鸣器应该能够发出清晰的响铃声音,以吸引医护人员的注意;可调音量功能:蜂鸣器应该具有可调节音量的功能,以便根据实际情况调整声音大小;可控制开关功能:蜂鸣器应该能够通过系统的控制信号进行开关控制,以便在不需要响铃的时候关闭蜂鸣器;报警功能:如果系统检测到蜂鸣器故障或异常,应该能够通过显示屏或其他途径发出相应的警报信号,以提示工作人员进行维修或更换[12]。综上所述,基于STM32的病床病房呼叫系统中蜂鸣器的主要功能是在有病人呼叫时发出响铃声音,具有可调音量、可控制开关和报警功能[13]。2.2.1技术路线(1)硬件部分需要单片机STM32、显示屏、按键、蜂鸣器、蓝牙远程APP模块;(2)软件平台程序用keil5;(3)画原理图用AD;(4)编程语言用C语言;(5)用户信息显示查看。2.2.2预期结果通过对系统的布设和完善,最终完成的无线病床病房呼叫系统预期有如下成果:主机:无线接收并通过1602液晶显示病房呼叫的床位和报警。从机:八个按键对应8个不同的病床号,从左到右分别为1到8号病床;检测病人呼叫信号的采集和无线发射;(从机)当有病床上的病人要呼叫时,按下按键,(主机)LCD1602液晶显示屏上会对应的显示病人的床位号,同时对应的指示灯会亮,蜂鸣产生报警提示医务人员,医务人员按下“响应键”可以取消本次的呼叫,对应的指示灯会灭,同时液晶上会清除病床号。(从机)如果同时有多人同时呼叫时,(主机)液晶上会按先后顺序显示出不同的床位号,并对应的指示灯会亮。医务人员按键“响应键“会按先后顺序依次取消病人的呼叫,按一下取消一位病人,直到全部取消。2.3单片机型号选型51单片机的AD、EEPROM等功能需要靠扩展,增加了硬件和软件负担;虽然I/O脚使用简单,但高电平时无输出能力,这也是51系列单片机的最大软肋;运行速度过慢,特别是双数据指针,如能改进能给编程带来很大的便利;51单片机保护能力很差,很容易烧坏芯片;目前在教学场合和对性能要求不高的场合大量被采用[14]。32单片机可以直接驱动数码管显示且外电路简单,它的A/D为10位,能满足精度要求。具有在线调试及编程(ISP)功能。并且具有低工作电压、低功耗、驱动能力强等特点。PIC系列单片机的I/O口是双向的,其输出电路为CMOS互补推挽输出电路。I/O脚增加了用于设置输入或输出状态的方向寄存器,从而解决了51系列I/O脚为高电平时同为输入和输出的状态。当置位1时为输入状态,且不管该脚呈高电平或低电平,对外均呈高阻状态;置位0时为输出状态,不管该脚为何种电平,均呈低阻状态,有相当的驱动能力,低电平吸入电流达25mA,高电平输出电流可达20mA。相对于51系列而言,这是一个很大的优点[15]。2.4系统运行环境该病床病房呼叫系统,是基于STM32系列单片机搭载各种硬件设备实现的。2.4.1硬件环境本系统需要一定的硬件设备支持。(1)STM32单片机核心板模块;(2)显示屏模块;(3)蜂鸣器、按键、LED灯;(4)硬件间排线等若干。2.4.2软件环境系统对软件环境的要求如下。(1)电脑操作系统:Windows10;(2)开发软件:KeiluVision5;(3)程序语言:C语言;(4)程序下载串口软件:FlyMcu;(5)网络协议:TCP/IP。2.5总体方案设计第一步:通过图书馆和网络查询到所需要的资科,要各个硬件器件的详细资料,包括STM32芯片的资料、传感器模块的详细资料及其介绍和各个品种的优缺点。第二步:确定系统各个模块,理清各个模块之间的关系,收集相关得到软硬件资料;第三步:规划课题,确定系统组成结构,勾画出大体系统框架并在结构框架的基础上提出原理框图;第四步:利用软件完成硬件电路部分设计并画出各部分电路图,将系统部件通过接口电路集合在一起,并画出电路图;第五步:根据系统控制过程完成软件设计部分,绘制出主流程图;第六步:进行模拟仿真,检查系统是否能够按照要求实现控制功能,整理论文。

第3章系统硬件部分设计3.1系统总体设计本系统设计一个病床病房呼叫系统设计,全部硬件开发主要包含显示屏、按键、LED灯、蜂鸣器,硬件系统设计需要完成以下个功能模块设计组成:3-1总体原理图(主、从)3.2系统主要功能模块设计3.2.1显示屏功能模块设计基于STM32的病床病房呼叫系统中显示屏的硬件设计需要考虑以下几个方面的需求:显示屏类型:选择合适的显示屏类型,例如字符型液晶显示屏、彩色TFT液晶显示屏等;分辨率和尺寸:根据实际需要选择合适的分辨率和尺寸,以保证信息的清晰可见[16 ‎];显示接口:选择适合的显示接口,例如串口、并口、I2C总线等;控制器:选择合适的控制器SSD1306,以实现显示屏的控制;硬件连接:将显示屏与STM32主控板进行硬件连接,包括VCC、GND、数据线等。根据以上需求,可以进行如下的硬件设计流程:选择合适的显示屏类型和尺寸,并确定显示接口和控制器[17]。根据显示屏的接口和控制器,设计连接显示屏的电路,包括电源电路和信号电路。根据STM32的GPIO输出控制信号,设计驱动显示屏的电路,包括控制信号的输出电路和数据传输电路。将显示屏电路和STM32主控板电路进行连接。编写相应的软件代码,实现控制显示屏的功能。需要注意的是,在设计显示屏的硬件时,需要根据具体的使用场景和系统功能,选择合适的显示屏类型和尺寸,以及控制器和接口,以实现最佳的用户体验和系统性能[18]。3.2.2蜂鸣器功能模块设计基于STM32的病床病房呼叫系统中,蜂鸣器的硬件设计主要涉及到连接方式和驱动电路的设计。连接方式:蜂鸣器通常具有两个引脚,分别为正极和负极。在连接蜂鸣器时,正极应该连接到STM32的一个GPIO输出引脚,负极则应该连接到STM32的GND引脚上。驱动电路:图3-2蜂鸣器报警电路3.2.3按键功能模块设计按键类型:选择适合应用场景的按键类型,例如矩形按键、圆形按键、轻触开关等。按键数量:根据系统需要,确定需要几个按键。接口类型:选择适合的接口类型,例如GPIO、ADC等。按键防抖:使用硬件或软件方式实现按键防抖,防止误触发[19]。按键状态检测:通过轮询或中断方式检测按键状态,实现按键的功能。外部上拉/下拉电阻:设置外部上拉/下拉电阻,确保按键在空闲状态下处于稳定状态[20]。以上内容应该结合具体的系统需求进行设计,并且需要注意硬件的可靠性和稳定性。3.3本章小结基于STM32单片机的病床病房呼叫系统分析,基于现有的技术和经济条件系统功能均可实现;将整个系统划分为两个功能模块进行分析,使得对系统的分析能够细致入微,同时也有利于后续工作的进行。

第4章软件系统设计功能模块系统功能的设计是满足需求设计的,如果能告诉所有处理特别程序需要的设备,如果该系统对投入、产出和模块作了准确的描述,就能使程序更有效地避免该系统的应用阶段。4.1软件主流程图主程序首先对单片机进行初始化,使得相应的IO口以及中断寄存器置位,以满足接下来的操作。图4-1系统软件主流程图4.2显示屏程序的设计硬件初始化:首先需要对OLED显示模块进行初始化设置,包括引脚配置、SPI接口设置、显示模式等。字符库设计:为了在OLED显示屏上显示各种文字和图标,需要提前设计好相应的字符库,包括汉字、英文字母、数字、符号等。显示函数实现:根据具体需求,设计相应的显示函数,比如显示实时测量值、历史数据、报警信息等。显示控制:根据系统需求,设计相应的显示控制函数,包括显示区域控制、显示内容更新、清屏等。优化和调试:对程序进行优化和调试,保证其稳定性和正确性,同时确保程序的可扩展性和可维护性。在具体实现中,可以使用OLED驱动库来快速实现OLED的初始化、字符库设计、显示函数实现和显示控制等功能,以节省开发时间和提高开发效率。同时,需要针对具体的传感器和数据采集系统,设计相应的数据处理和显示程序,将采集到的数据实时显示在OLED屏幕上,并提供相应的操作界面和功能。图4-2显示屏流程图4.3蜂鸣器程序的设计1、配置蜂鸣器引脚为输出模式;2、初始化定时器,将其配置为自动重装载模式;3、设置定时器的预分频器和计数器值,以实现需要的定时时间;4、在按键按下时,开启定时器并输出高电平到蜂鸣器引脚;5、当定时器溢出时,输出低电平到蜂鸣器引脚,关闭定时器。图4-3蜂鸣器流程图4.4按键程序的设计目前各种结构的键盘,主要是利用机械触点的合、断作用,产生一个电压信号,然后将这个电信号传送给CPU。由于机械触点的弹性作用,在闭合及断开的瞬间均有抖动过程。抖动时间长短,与开关的机械特性有关,一般约5~10ms之间。图4-4为闭合及断开时的电压抖动波形:图4-4键闭合及断开时的电压抖动波形按键的稳定闭合期,由操作人员的按键动作所确定,一般为十分之几秒至几秒时间。为保证CPU对键的一次操作仅作一次输入处理,必须去除抖动影响及人为的操作时问长短的影响。通常去抖动影响的措施有硬、软件两种;可用基本R-S触发器或单稳态电路构成硬件去抖动电路如图4-所示。也可采用软件延时的方法除去键盘抖动产生的影响。采用软件除去抖动影响的办法是,在检测到有键按下时,执行一个10ms左右的延时程序,然后再去判断该键电平是否仍保持闭合状态电平,如保持闭合状态电平则可确认该键为按下状态,从而消除了抖动影响。图4-5RC去抖动电路4.5本章小结对系统的功能进行分析,论述各个功能模块的需求,对其中功能模块的设计进行流程化,可以使得系统具有完整性,可以实现相应的功能,利于后期的系统开发,简化后期的工作。第5章系统测试5.1系统实物图无线病床病房呼叫系统实物图如图5-1所示。图5-1系统完整实物图5.2测试目的软件测试是为了发现系统中可能存在的缺陷,有的人认为在测试过程中发现的错误越少越好,但事实并不是这样的,只有在测试阶段发现更多的问题才有利于提高软件的完整性。软件测试是一个破坏性的过程,其目的是为了尽可能多地发现软件中的错误,而不是为了演示软件的正确功能。5.3测试原则软件测试应当遵循四个原则,分别为:测试应基于系统的需求;测试要尽早的进行;在编写测试用例时,要考虑极端的条件,如特殊值、边界值的输入;测试用例编写应当包括合理的输入条件和不合理的输入条件;充分注意测试中的群集现象。5.4功能测试启动电源,显示屏显示0000,在按下8号键时,界下部分显示病床(即8号病床呼叫);界面上部分代表共有一个病床按下,在起始位置显示(循环显示);如果现在不按清零键,再按下3号键时,按键号循环显示,可以看出该系统具有记忆功能,以至于不会忽略之前按下的按键。综上所述,本系统实现了主要功能:显示病床号,亮报警提醒值班人员,若有多个病床同时呼叫,则循环显示病床号,确保性息不丢失,待值班人员处理呼叫信息。通过PROTEUS软件仿真,能达到上述结论,满足课题目目的,达到要求。图5-2功能测试图5.5本章小结在该章中,对系统的功能模块进行测试,对其获得的测试进行详细的记录,并且进行分析,可以使得系统具有正常运行的特性,在模块控制中,通过正常的使用,可以符合要求,使得该系统通过测试。第6章总结与展望本章主要对整个系统的开发过程进行了总结叙述和系统开发完成后的心得体会,整个开发工程中从开始的选题到最后项目完成这使我从中受益匪浅。6.1总结基于STM32的病床病房呼叫系统的开发需要涉及硬件设计、软件编程、系统测试等多个方面,需要具备一定的技术水平和经验。在开发过程中,需要注重系统的稳定性和可靠性,同时考虑用户的实际需求,确保系统的功能实用性和可行性。该系统具有以下优点:实时性强:系统使用STM32作为核心处理器,可以快速响应用户的操作请求,保证系统的实时性;稳定性高:系统硬件设计合理,软件编程严谨,可以保证系统的稳定性和可靠性;操作简单:系统界面简洁明了,易于操作和维护,使用方便;灵活性强:系统具有良好的可扩展性和可定制性,可以根据用户的需求进行扩展和定制。此时毕业设计,充分利用单片机开发上的灵活、快速的特点,来实现智能控制的设计。通过本次毕业论文的设计,使我认识到作为科技人员,重要的是思维缜密,知识经验积累深厚,坚强的意志,同时还要创新的精神,当你觉得一种做法可能可以实现的时候就应该勇于尝试,遇到问题的时候应该多问多想,不轻易放弃。在以后的工作和学习中,要勤奋踏实,善于思考,才能在竞争激烈的社会中提升自我的实用价值。这次的毕业设计给了我一个很好的学习机会,我在这里面学习到很多东西,受益匪浅。6.2展望基于STM32的病床病房呼叫系统可以进一步扩展和改进,以提高其功能和性能。以下是一些展望:添加网络通信功能:可以通过网络将病床呼叫信息发送到护士站,从而加快呼叫响应速度,减少护士的工作负担。引入声音提示功能:当病床呼叫被触发时,可以通过内置的扬声器播放声音提示,以吸引护士的注意。增加安全性:可以添加身份验证和访问控制功能,以确保只有授权的人员才能访问病床呼叫系统。提高数据记录和分析能力:可以将病床呼叫数据记录到内部存储器中,并使用数据分析算法进行处理,以提供有关病人呼叫的有用信息和趋势分析。应用机器学习算法:可以使用机器学习算法来识别病人的呼叫行为和呼叫紧急程度,并自动调度护士响应不同级别的呼叫。

参考文献[1]唐建华.基于物联网技术的临床医疗护理监测系统的研究与设计[M].浙江工业大学.2021.[2]姜涛;杨学存.基于Wifi的嵌入式多功能病房呼叫系统[C],电子测试.2022.[3]江琳.基于NRF24L01的简易病房呼救系统设计与实现[C],电脑知识与技术.2022.[4]张昊;常盼.便携式病房无线呼叫系统的设计.科技信息,2020.[5]黎一强.基于PLC控制的病床呼叫系统设计与应用[P].机电工程技术,2020.[6]吕晓颖.一种短距离无线数据通信的病床呼叫系统[M].单片机与嵌入式系统应用,2020.[7]刘会敏.无线病床呼叫系统设计[P].信息通信,2020.[8]邵婷婷;张明;范圣花.基于单片机的太阳能病床呼叫系统设计[P].信息技术,2020,.[9]梁春美;胡云琴.基于单片机的“病床呼叫和输液监控系统”设计[J].福建电脑.2021[10]崔巍;曹新亮;王孟德;吕忠亭.一种低成本的病床呼叫系统[M].现代电子技术.2020[11]廖春蓝.基于Multisim的病床呼叫电路仿真设计与研究[J].山西电子技术,2021(06):88-90+93.[12]宋昕一,田璐羽,罗其波.基于proteus的病房呼叫系统[J].电子制作,2021(10):74-75.DOI:10.16589/11-3571/tn.2021.10.025.[13]邓泽军,孙志锋.基于NB-IOT的无线病房呼叫系统[J].工业控制计算机,2020,33(01):61-62+66.[14]郭春梅,周兴朝.基于语音识别的病房呼叫系统的分类呼叫设计[J].医疗装备,2021,34(01):27-29.[15]唐建华.基于物联网技术的临床医疗护理监测系统的研究与设计[D].浙江工业大学,2019.DOI:10.27463/ki.gzgyu.2019.000930.[16]KormosWilliam.Oncall.Myfeetarealwayscold,especiallywhenIgotobed.CouldIhaveaproblemwithmycirculation?.[M].2021[17]EddyChristopher;;JonesSusanC.Bedbugs,publichealth,andsocialjustice:Part1,Acalltoaction.2022.[18]Toone,Stephanie.Where'sthecaller?Nextyear,sixtestbedswillhelpanswerthatquestionforindoor911calls.2019[19]ChristinaScott.Youcallitamenialtask,Icallitholisticcare[P].NursingStandard.2020[20]Vassou,Andrea.Callfromyourhospitalbed[P].ComputerAct!ve.2019.

附录A总原理图主机:从机:图A-1总原理图附录B程序#include<reg52.h> //调用单片机头文件#defineucharunsignedchar//无符号字符型宏定义 变量范围0~255#defineuintunsignedint //无符号整型宏定义 变量范围0~65535sbitrs=P1^0; //寄存器选择信号H:数据寄存器 L:指令寄存器sbitrw=P1^1; //寄存器选择信号H:数据寄存器 L:指令寄存器sbite=P1^2; //片选信号下降沿触发sbitbeep=P3^2; //蜂鸣器IO口定义sbitkey_quxiao=P3^4; //取消键IO口定义uintflag_200ms;//300ms的标志位uchardis_lcd[8];//8个病房数据显示的缓冲区ucharbr_geshu;//报警病人数//****************************************IO端口定义***************************************sbitCE=P2^2;sbitSCK=P2^1;sbitMISO=P2^0;sbitCSN=P2^3;sbitMOSI=P2^4;sbitIRQ=P2^5;//******************************************************************************************ucharbdatasta;//状态标志sbitRX_DR=sta^6;sbitTX_DS=sta^5;sbitMAX_RT=sta^4;//*********************************************NRF24L01*************************************#defineTX_ADR_WIDTH5//5uintsTXaddresswidth#defineRX_ADR_WIDTH5//5uintsRXaddresswidth#defineTX_PLOAD_WIDTH32//32uintsTXpayload#defineRX_PLOAD_WIDTH32//32uintsTXpayloaducharcodeTX_ADDRESS[TX_ADR_WIDTH]={0x34,0x41,0x10,0x15,0x05};//本地地址ucharcodeRX_ADDRESS[RX_ADR_WIDTH]={0x34,0x43,0x12,0x10,0x75};//接收地址ucharTx_Buf[TX_PLOAD_WIDTH];//发送数据ucharRx_Buf[RX_PLOAD_WIDTH];//接收数据//***************************************NRF24L01寄存器指令*******************************************************#defineREAD_REG0x00//读寄存器指令#defineWRITE_REG0x20//写寄存器指令#defineRD_RX_PLOAD0x61//读取接收数据指令#defineWR_TX_PLOAD0xA0//写待发数据指令#defineFLUSH_TX0xE1//冲洗发送FIFO指令#defineFLUSH_RX0xE2//冲洗接收FIFO指令#defineREUSE_TX_PL0xE3//定义重复装载数据指令#defineNOP0xFF//保留//*************************************SPI(nRF24L01)寄存器地址****************************************************#defineCONFIG0x00//配置收发状态,CRC校验模式以及收发状态响应方式#defineEN_AA0x01//自动应答功能设置#defineEN_RXADDR0x02//可用信道设置#defineSETUP_AW0x03//收发地址宽度设置#defineSETUP_RETR0x04//自动重发功能设置#defineRF_CH0x05//工作频率设置#defineRF_SETUP0x06//发射速率、功耗功能设置#defineSTATUS0x07//状态寄存器#defineOBSERVE_TX0x08//发送监测功能#defineCD0x09//地址检测#defineRX_ADDR_P00x0A//频道0接收数据地址#defineTX_ADDR0x10//发送地址寄存器#defineRX_PW_P00x11//接收频道0接收数据长度#defineFIFO_STATUS0x17//FIFO栈入栈出状态寄存器设置/************************************IO口模拟SPI总线代码************************************************/ucharSPI_RW(ucharbyte){ uchari; for(i=0;i<8;i++) { MOSI=(byte&0x80); byte=(byte<<1); SCK=1; byte|=MISO; //led=MISO;Delay(150); SCK=0; } return(byte);}ucharSPI_RW_Reg(ucharreg,ucharvalue)//向寄存器REG写一个字节,同时返回状态字节{ ucharstatus; CSN=0; status=SPI_RW(reg); SPI_RW(value); CSN=1; return(status);}ucharSPI_Read(ucharreg){ ucharreg_val; CSN=0; SPI_RW(reg); reg_val=SPI_RW(0); CSN=1; return(reg_val);}ucharSPI_Write_Buf(ucharreg,uchar*pBuf,ucharbytes){ ucharstatus,byte_ctr; CSN=0;//SetCSNlow,initSPItranaction status=SPI_RW(reg);//选择寄存器写入和读取状态字节 for(byte_ctr=0;byte_ctr<bytes;byte_ctr++)//然后写所有字节在缓冲区(*pBuf) SPI_RW(*pBuf++); CSN=1;//SetCSNhighagain return(status);//nRF24L01返回状态字节}/*******************************发*****送*****模*****式*****代*****码*************************************/voidTX_Mode(void){ CE=0; SPI_RW_Reg(FLUSH_TX,0x00); SPI_Write_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);//tx地址来nRF24L01写道 SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH);//RX_Addr0txadr一样为自动ack SPI_RW_Reg(WRITE_REG+EN_RXADDR,0x01);//EnablePipe0 SPI_RW_Reg(WRITE_REG+SETUP_RETR,0x1a);//500us+86us,10重发...1a SPI_RW_Reg(WRITE_REG+RF_CH,40);//选择RF信道40 SPI_RW_Reg(WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);//设置接收数据长度,本次设置为2字节 SPI_RW_Reg(WRITE_REG+CONFIG,0x0e); CE=1;}voidTransmit(unsignedchar*tx_buf){ //传输 CE=0;//StandByI模式 SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH);//装载接收端地址 SPI_Write_Buf(WR_TX_PLOAD,tx_buf,TX_PLOAD_WIDTH);//装载数据 SPI_RW_Reg(WRITE_REG+CONFIG,0x0e);//IRQ收发完成中断响应,16位CRC,主发送 CE=1;//置高CE,激发数据发送}/*******************************接*****收*****模*****式*****代*****码*************************************/ucharSPI_Read_Buf(ucharreg,uchar*pBuf,ucharuchars){ ucharstatus,i; //交易 CSN=0;//SetCSNlow,initSPItranaction status=SPI_RW(reg);//选择寄存器写入和读取的状态uchar for(i=0;i<uchars;i++) pBuf[i]=SPI_RW(0);// CSN=1; return(status);//returnnRF24L01statusuchar}/******************************************************************************************************//*函数:unsignedcharnRF24L01_RxPacket(unsignedchar*rx_buf)/*功能:数据读取后放如rx_buf接收缓冲区中/******************************************************************************************************/unsignedcharnRF24L01_RxPacket(unsignedchar*rx_buf){ unsignedcharrevale=0; sta=SPI_Read(STATUS);//读取状态寄存其来判断数据接收状况 if(RX_DR)//判断是否接收到数据 { //CE=0;//SPI使能 SPI_Read_Buf(RD_RX_PLOAD,rx_buf,RX_PLOAD_WIDTH);//readreceivepayloadfromRX_FIFObuffer revale=1;//读取数据完成标志 //Delay(100); } SPI_RW_Reg(WRITE_REG+STATUS,sta);//接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标志 returnrevale;}/****************************************************************************************************//*函数:voidRX_Mode(void)/*功能:数据接收配置/****************************************************************************************************/voidRX_Mode(void){ CE=0; SPI_RW_Reg(FLUSH_RX,0x00); SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH);//RX_Addr0sameasTX_AdrforAuto.Ack SPI_RW_Reg(WRITE_REG+EN_AA,0x01);//EnableAuto.Ack:Pipe0 SPI_RW_Reg(WRITE_REG+EN_RXADDR,0x01);//EnablePipe0 SPI_RW_Reg(WRITE_REG+RF_CH,40);//SelectRFchannel40 SPI_RW_Reg(WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);//设置接收数据长度,本次设置为32字节 SPI_RW_Reg(WRITE_REG+RF_SETUP,0x07);//TX_PWR:0dBm,Datarate:1Mbps,LNA:HCURR SPI_RW_Reg(WRITE_REG+CONFIG,0x0F); CE=1;}/*********************************************************************名称:delay_1ms()*功能:延时1ms函数*输入:q*输出:无***********************************************************************/voiddelay_1ms(uintq){ uinti,j; for(i=0;i<q;i++) for(j=0;j<120;j++);}/***********************延时函数************************/voiddelay_uint(uintq){ while(q--);}/***********************lcd1602写命令函数************************/voidwrite_com(ucharcom){ rs=0; //写命令 rw=0; //对1602写操作 P0=com; //P0口对1602写命令数据 delay_uint(25); e=1; //e=1使能信号 delay_uint(100);//延时一下等1602完成操作 e=0;}/***********************lcd1602写数据函数************************/voidwrite_data(uchardat){ rs=1; //写数据 rw=0; //对1602写操作 P0=dat; //P0口对1602写数据 delay_uint(25); e=1; //e=1使能信号 delay_uint(100);//延时一下等1602完成操作 e=0; }/***********************lcd1602上显示这字符函数************************/voidwrite_string(ucharhang,ucharadd,uchar*p){ if(hang==1) write_com(0x80+add); //1602写第一行的地址 else write_com(0x80+0x40+add);//1602写第二行的地址 while(1) { if(*p=='\0')break; //\0字符串的结尾标志break结束while循环结束写字符 write_data(*p); //写数据 p++; //指针地址加1 } }/***********************lcd1602上显示这字符函数************************/voidwrite_string_ge(ucharhang,ucharadd,uchar*p,ucharge){ uchari; if(hang==1) write_com(0x80+add); //1602写第一行的地址 else write_com(0x80+0x40+add);//1602写第二行的地址 for(i=0;i<ge;i++) { write_data(0x30+*p); //写数据 p++; //指针地址加1 }}/***********************lcd1602初始化设置************************/voidinit_1602() //lcd1602初始化设置{ write_com(0x38);//显示模式设置:16×2显示,5×7点阵,8位数据接口不检测忙信号 write_com(0x0c);//开显示不显示光标 write_com(0x06);//当写一个字符是,地址指针加1 write_string(1,0,"bingfanghujiao"); //初始化显示 write_string(2,0,"wubingren"); //初始化显示}ucharkey_can; voidkey_qx() //取消按键程序{ key_quxiao=1;//对应的按键IO口输出为1 if(key_quxiao==0) //按键按下 { delay_1ms(1); //按键消抖动 if(key_quxiao==0) { //确认是按键按下 key_can=9; } }} /**********************按键处理函数************************/voidkey_with(){ uchari; if(key_can<=8) { if(br_geshu<8) { br_geshu++; //呼叫病人的人数加1 for(i=7;i>0;i--) dis_lcd[i]=dis_lcd[i-1];//把病人的数据向后移一位 dis_lcd[0]=key_can; //把病人的号码保存起来 write_string_ge(2,0,dis_lcd,br_geshu); //显示出来 } } if(key_can==9)//取消键的处理 { if(br_geshu>0) { key_can=dis_lcd[br_geshu-1]; //读出最前一个病人号 dis_lcd[br_geshu-1]=0;//把最前一个病人号清零 br_geshu--; //呼叫病人的人数减1 write_string_ge(2,0,dis_lcd,br_geshu); if(br_geshu==0) //取消到最后一次清显示屏 { write_string(2,0,"wubingren"); } //24L01无线发射信号 TX_Mode(); //24L01设置成无线发射模式 Tx_Buf[0]=0xa1; //起始数据 Tx_Buf[1]=key_can; //呼叫病人号 Tx_Buf[2]=br_geshu; //呼叫病人的人数 Transmit(Tx_Buf); //24L01无线发射数据 RX_Mode(); //24L01设置成无线接收模式 } }}/*****************主函数********************/voidmain(){ beep=0; //开机叫一声 delay_1ms(150); beep=1; init_1602(); //lcd1602初始化 RX_Mode(); //24L01设置成无线接收模式 while(1) { key_qx(); //取消按键程序 key_with(); //病房处理函数 flag_200ms++; if(flag_200ms>=200) { flag_200ms=0; if(br_geshu>0) //有人呼叫 beep=~beep;//蜂鸣器报警 else beep=1;//取消报警 if(nRF24L01_RxPacket(Rx_Buf)) //24L01无线接收 { if(Rx_Buf[0]==0xa1) { key_can=Rx_Buf[1];//接收病人号 } } } delay_1ms(1); }}#include<reg52.h> //调用单片机头文件#defineucharunsignedchar//无符号字符型宏定义 变量范围0~255#defineuintunsignedint //无符号整型宏定义 变量范围0~65535ucharflag_en;uchari;bitflag_300ms;//300ms的标志位sbitled1=P1^0;//第1号病房指示灯sbitled2=P1^1;//第2号病房指示灯sbitled3=P1^2;//第3号病房指示灯sbitled4=P1^3;//第4号病房指示灯sbitled5=P1^4;//第5号病房指示灯sbitled6=P1^5;//第6号病房指示灯sbitled7=P1^6;//第7号病房指示灯sbitled8=P1^7;//第8号病房指示灯ucharbr_geshu;//报警病人数uchardis_lcd[8];//8个病房数据显示的缓冲区uintflag_200ms; //****************************************IO端口定义***************************************sbitCE=P2^2;sbitSCK=P2^1;sbitMISO=P2^0;sbitCSN=P2^3;sbitMOSI=P2^4;sbitIRQ=P2^5;//******************************************************************************************ucharbdatasta;//状态标志sbitRX_DR=sta^6;sbitTX_DS=sta^5;sbitMAX_RT=sta^4;//*********************************************NRF24L01*************************************#defineTX_ADR_WIDTH5//5uintsTXaddresswidth#defineRX_ADR_WIDTH5//5uintsRXaddresswidth#defineTX_PLOAD_WIDTH32//32uintsTXpayload#defineRX_PLOAD_WIDTH32//32uintsTXpayloaducharcodeTX_ADDRESS[TX_ADR_WIDTH]={0x34,0x41,0x10,0x15,0x05};//本地地址ucharcodeRX_ADDRESS[RX_ADR_WIDTH]={0x34,0x43,0x12,0x10,0x75};//接收地址ucharTx_Buf[TX_PLOAD_WIDTH]={0};//发送数据ucharRx_Buf[RX_PLOAD_WIDTH];//接收数据//***************************************NRF24L01寄存器指令*******************************************************#defineREAD_REG0x00//读寄存器指令#defineWRITE_REG0x20//写寄存器指令#defineRD_RX_PLOAD0x61//读取接收数据指令#defineWR_TX_PLOAD0xA0//写待发数据指令#defineFLUSH_TX0xE1//冲洗发送FIFO指令#defineFLUSH_RX0xE2//冲洗接收FIFO指令#defineREUSE_TX_PL0xE3//定义重复装载数据指令#defineNOP0xFF//保留//*************************************SPI(nRF24L01)寄存器地址****************************************************#defineCONFIG0x00//配置收发状态,CRC校验模式以及收发状态响应方式#defineEN_AA0x01//自动应答功能设置#defineEN_RXADDR0x02//可用信道设置#defineSETUP_AW0x03//收发地址宽度设置#defineSETUP_RETR0x04//自动重发功能设置#defineRF_CH0x05//工作频率设置#defineRF_SETUP0x06//发射速率、功耗功能设置#defineSTATUS0x07//状态寄存器#defineOBSERVE_TX0x08//发送监测功能#defineCD0x09//地址检测#defineRX_ADDR_P00x0A//频道0接收数据地址#defineRX_ADDR_P10x0B//频道1接收数据地址#defineRX_ADDR_P20x0C//频道2接收数据地址#defineRX_ADDR_P30x0D//频道3接收数据地址#defineRX_ADDR_P40x0E//频道4接收数据地址#defineRX_ADDR_P50x0F//频道5接收数据地址#defineTX_ADDR0x10//发送地址寄存器#defineRX_PW_P00x11//接收频道0接收数据长度#defineRX_PW_P10x12//接收频道0接收数据长度#defineRX_PW_P20x13//接收频道0接收数据长度#defineRX_PW_P30x14//接收频道0接收数据长度#defineRX_PW_P40x15//接收频道0接收数据长度#defineRX_PW_P50x16//接收频道0接收数据长度#defineFIFO_STATUS0x17//FIFO栈入栈出状态寄存器设置/*********************************************************************名称:delay_1ms()*功能:延时1ms函数*输入:q*输出:无***********************************************************************/voiddelay_1ms(uintq){ uinti,j; for(i=0;i<q;i++) for(j=0;j<120;j++);}//短延时voiddelay_ms(unsignedintx){ unsignedinti,j; for(i=0;i<x;i++) { j=108;; while(j--); }}/************************************IO口模拟SPI总线代码************************************************/ucharSPI_RW(ucharbyte){ uchari; for(i=0;i<8;i++) { MOSI=(byte&0x80); byte=(byte<<1); SCK=1; byte|=MISO; //led=MISO;Delay(150); SCK=0; } return(byte);}ucharSPI_RW_Reg(ucharreg,ucharvalue)//向寄存器REG写一个字节,同时返回状态字节{ ucharstatus; CSN=0; status=SPI_RW(reg); SPI_RW(value); CSN=1; return(status);}ucharSPI_Read(ucharreg){ ucharreg_val; CSN=0; SPI_RW(reg); reg_val=SPI_RW(0); CSN=1; return(reg_val);}ucharSPI_Write_Buf(ucharreg,uchar*pBuf,ucharbytes){ ucharstatus,byte_ctr; CSN=0;//SetCSNlow,initSPItranaction status=SPI_RW(reg);//选择寄存器写入和读取状态字节 for(byte_ctr=0;byte_ctr<bytes;byte_ctr++)//然后写所有字节在缓冲区(*pBuf) SPI_RW(*pBuf++); CSN=1;//SetCSNhighagain return(status);//nRF24L01返回状态字节}/*******************************发*****送*****模*****式*****代*****码*************************************/voidTX_Mode(void){ CE=0; SPI_RW_Reg(FLUSH_TX,0x00); SPI_Write_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);//tx地址来nRF24L01写道 SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH);//RX_Addr0txadr一样为自动ack SPI_RW_Reg(WRITE_REG+EN_AA,0x01);//EnableAuto.Ack:Pipe0 SPI_RW_Reg(WRITE_REG+SETUP_RETR,0x1a);//500us+86us,10重发...1a SPI_RW_Reg(WRITE_REG+RF_SETUP,0x07);//TX_PWR:0dBm,Datarate:1Mbps,LNA:HCURR SPI_RW_Reg(WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);//设置接收数据长度,本次设置为2字节 SPI_RW_Reg(WRITE_REG+CONFIG,0x0e); CE=1; delay_ms(100);}voidTransmit(unsignedchar*tx_buf){ //传输 CE=0;//StandByI模式 SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH);//装载接收端地址 SPI_Write_Buf(WR_TX_PLOAD,tx_buf,TX_PLOAD_WIDTH);//装载数据 SPI_RW_Reg(WRITE_REG+CONFIG,0x0e);//IRQ收发完成中断响应,16位CRC,主发送 CE=1;//置高CE,激发数据发送 delay_ms(150);}/*******************************接*****收*****模*****式*****代*****码*************************************/ucharSPI_Read_Buf(ucharreg,uchar*pBuf,ucharuchars){ ucharstatus,i; //交易 CSN=0;//SetCSNlow,initSPItranaction status=SPI_RW(reg);//选择寄存器写入和读取的状态uchar for(i=0;i<uchars;i++) pBuf[i]=SPI_RW(0);// CSN=1; return(status);//returnnRF24L01statusuchar}/******************************************************************************************************//*函数:unsignedcharnRF24L01_RxPacket(unsignedchar*rx_buf)/*功能:数据读取后放如rx_buf接收缓冲区中/******************************************************************************************************/unsignedcharnRF24L01_RxPacket(unsignedchar*rx_buf){ unsignedcharrevale=0; sta=SPI_Read(STATUS);//读取状态寄存其来判断数据接收状况 if(RX_DR)//判断是否接收到数据 { //CE=0;//SPI使能 SPI_Read_Buf(RD_RX_PLOAD,rx_buf,RX_PLOAD_WIDTH);//readreceivepayloadfromRX_FIFObuffer revale=1;//读取数据完成标志 //Delay(100); } SPI_RW_Reg(WRITE_REG+STATUS,sta);//接收到数据后R

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论