版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
[30]。KEIL4软件调试界面如下图4-1所示:图4-1开发软件界面4.2系统主程序设计本次设计选用32位微控制器作为核心控制单元,集成了一系列外围模块,包括OLED显示器、超声波测距传感器、按键输入设备、声光报警装置、时钟组件以及声音检测元件与继电器模块,旨在构建一个智能化的铁路安全监控系统。此系统通过C语言驱动,具备采集列车接近路口距离的功能,并能实时监测特定音量。一旦列车接近距离与预设阈值相符且检测到特定音量,系统将启动声光报警模块,同时,人机交互界面将同步显示当前时间、详细信息及报警内容,确保操作人员及时获得关键信息。主程序由四个关键子程序构成:屏幕显示模块、超声波测距模块、按键输入模块、声光报警模块和声音检测模块的逻辑处理。其中,后三者通过简单的输入输出接口(I/O)即可实现控制,无需复杂的程序逻辑支持,故而在设计文档中未作深入阐述。系统启动后,将优先执行屏幕显示、超声波测距、按键输入以及声光报警这四个核心功能,通过调用相应的子程序来完成数据展示、处理与反馈。详细的程序流程图见图4-2,它直观展示了各模块间的交互关系和执行顺序,为系统运行提供清晰指导。图4-2铁道口无人值守监测系统主程序设计4.3显示模块程序设计首先设定目标设备的地址配置,随后按序传输包括内存寻址机制、显示时钟的分频系数、多路数据传输的比例、起始行定位、显示区域偏移、对比度调整、电荷泵参数以及显示模式在内的初始化命令序列,最终完成数据的呈现与展示过程。在数据可视化过程中,为了精确控制显示区域,需明确指定其坐标范围。此操作通常涉及调用预定义的字符图案数组,以确保图形元素的准确表示。随后,通过引用相应的图形库或API,可以实现这些图案的高效渲染。借助特定的写入函数,将生成的图像序列直接输出到屏幕上,从而实现直观的数据呈现与交互。这一系列步骤确保了数据展示的清晰度与用户界面的互动性。以下是对OLCD模块的部分代码voidDisplayInit(void){ unsignedchari; for(i=0;i<2;i++)OLED_ShowCN(i*16,4,i+12,0);//测试显示中文:距离 OLED_ShowChar(32,4,':',2,0); for(i=0;i<4;i++)OLED_ShowCN(i*16,6,i+20,0);//测试显示中文:值班人员 OLED_ShowChar(64,6,':',2,0);}在OLED屏幕的第4行显示“距离”二字,并在“距离”后面显示冒号分隔符。在第6行显示“值班人员”四字,并在“值班人员”后面显示冒号分隔符。实现方式:(1)使用OLED_ShowCN()函数显示预存的中文字模,通过计算位置参数(i*16)实现字符的横向排列(2)使用OLED_ShowChar()显示普通ASCII字符(冒号)。具体的屏幕流程图如下图4-3所示。图4-3oled程序设计4.4超声波测距程序设计系统启动时,执行初始化流程,涵盖对微控制器的I/O端口、定时器等硬件组件的配置以及超声波模块的初始化,确保各硬件模块处于准备状态。随后,调用超声波测距算法,超声波模块向指定区域(如铁道口)发射超声波,并捕捉反射回的信号,微控制器基于发射与接收信号之间的时间差,精确计算目标物与铁道口之间的实际距离。一旦检测到距离接近预先设定的安全阈值,即判断存在物体侵入铁道口的危险区域,这将对铁路运行安全造成潜在风险。此时,系统立即激活声光报警机制,向现场人员及过往车辆发出警告信号,同时,将警报信息实时传输至远程监控中心,确保及时响应并采取必要措施,维护铁道口的安全。在距离参数未达到预设阈值的情况下,应激活显示模块,实时更新并展示于显示屏上,其信息涵盖当前铁道口的安全状况,特别是距离数值这一关键数据点。通过循环执行测量距离、评估状况与相应操作的过程,一旦触发警报信号,系统将持续激活警报直至危险消除。只有在检测到铁道口重新达到安全状态时,方才终止警报机制。以下是超声波模块的部分代码:voidGetDistance(void){unsignedchari;Distance=(Get_SR04_Distance()*331)*1.0/10000;//单位cm if(Distance>=450)Distance=450; sprintf(display,"%5.1fcm",Distance); OLED_ShowStr(42,4,(unsignedchar*)display,2);//显示距离值 if(VOICE==0&&Distance<DistanceMax) //有声音且小于安全距离禁止 { BEEP=1; RELAY=0; LED=0; gateFlag=0; //门的状态-关 for(i=0;i<2;i++)OLED_ShowCN(i*16+88,2,i+18,0);//测试显示中文:禁止 }else{ BEEP=0; RELAY=1; LED=1; gateFlag=1; //门的状态-开 for(i=0;i<2;i++)OLED_ShowCN(i*16+88,2,i+10,0);//测试显示中文:安全 }}功能实现:使用HC-SR04超声波模块测量距离,在OLED上显示当前距离值,根据距离与预设阈值(DistanceMax)比较控制报警状态,进而控制控制蜂鸣器、继电器和LED的状态实现方式:调用Get_SR04_Distance()获取原始距离数据,将时间转换为距离(声速331m/s),然后使用sprintf格式化距离字符串并显示。测距模块程序流程图如下图4-4所示:图4-4超声波测距程序设计4.5时钟模块程序设计为了确保设计的精确性与时间信息的有效呈现,我们将选择DS1302作为核心的时钟模块。该模块通过IIC接口实现与系统的高效通信。一旦系统启动主程序,单片机便持续读取DS1302芯片中的时间数据,并据此动态更新显示界面。这一过程涉及对DS1302芯片各个寄存器的精确读取,从中获取年、月、日、时、分、秒等详细时间信息,进而构建出准确且直观的时间显示功能,为应用提供可靠的时间基准。功能实现:在程序设计中,实现对DS1302实时时钟芯片的数据读取,以便清晰地在OLED显示屏上呈现信息。具体操作包括在屏幕的第一行展示完整的日期信息(年份-月份-日期-星期),在第三行则显示精确的时间(小时:分钟:秒)。系统还具备一种交互模式,可通过设定参数(setn)来激活或关闭显示屏上的闪烁显示功能,从而提供更为灵活的操作体验。实现方式:(1)使用DS1302_DateRead()读取时间数据,将时间数据分解为各个数字位(如小时十位、小时个位等)(2)使用OLED_ShowChar()逐个显示数字字符,通过setn参数控制不同位置的闪烁效果(反色显示)读取流程图如下图4-5所示:图4-5时钟模块程序流程图4.6报警模块程序设计针对即将进站的火车,已建立一套安全预警系统,该系统主要依赖于报警模块以确保人员的安全防范。此报警模块由声光组件构成,集成蜂鸣器与LED灯,其功能实现基于电平控制原理。当系统检测到低电平信号时,蜂鸣器启动警报功能,单片机输出低电平指令,触发相应LED灯亮起,以此形成视觉与听觉双重警示,确保乘客及时察觉并采取必要措施。报警程序流程图如下图4-6所示:图4-6报警模块程序流程图4.7本章小结此章节专述系统级软件架构与设计,核心在于详细编撰地体计价系统中的硬件接口驱动模块。借助于流程图的辅助,清晰地勾勒出软件执行逻辑的全貌。其中,本设计着重构建了几大关键子程序:OLED显示子程序负责界面信息的呈现;数据处理子程序则承担着复杂数据的运算与解析任务;超声波测距子程序用于实现精确的距离测量功能;而时钟子程序则确保系统时间的准确同步。通过流程图的直观展示,能够有效地梳理并优化程序的整体运行逻辑,确保各组件间的协同高效。系统执行模块初始化过程,旨在全面验证并确保每一组件均处于高效运行及准备状态。随后,系统将对传感器收集的数据进行解析与评估,以确定这些数据是否超出了预先设定的界限。若数据未超出规定范围,则仅通过显示模块呈现当前的时间、距离、轮班人员信息以及状态的安全评估;反之,一旦检测到数据越界,系统将立即激活报警机制,通过蜂鸣器与LED灯发出警示信号。5基于单片机的铁道口无人值守监测系统测试与评估5.1实物焊接流程在无人值守监测系统的构成焊接前,对于电子元器件的检测是必不可少的一环,也是确保系统可靠性的前提。在这一过程中,主要是通过检测预先发现不良元件,避免在投入使用过程中因自身元件的问题导致系统出现异常,影响到整个系统的可靠性、稳定性。本次设计采用的检测设备主要是电压表,通过测量各个电子元器件的电压或电流数据,再与标准数据进行对比,判断电子元器件是否良好。如测量电阻、电容的器件,通过测量两端电压降或充放电电流,判断其是否出现短路、断路或参数变化等。对主控芯片这样的元器件,一般的电压表则无法检测,则需要借助实验室设备,用集成电路测试器等仪器进行全面检测,确保其逻辑功能、引脚电气特性是否符合设计要求。在检测过程中,如果发现不良的元件,必须严格遵循具体要求,对出现问题的元件进行更换,换来的元件必须是一种完好的产品,做好记录,将产品进行分类;接下来就是对新的元件进行再次功能检测,只有确定新的元件没有问题后,才能进行真正的焊接。通过以上步骤,才能保证元件质量,并对系统的稳定性负责。在实际焊接过程中,最关键的是要把握好系统单片机的极性及其他器件的方向性问题。单片机在系统控制过程中起着至关重要的作用,而根据单片机相关的数据手册,在引脚的排列顺序上有着严格的规定,一旦接反,轻则程序无法使用,重则会烧坏芯片。因此在实际的单片机焊接前,必须先核对数据手册,看清楚引脚,确保把正负极引脚排顺。此外,对于其他器件而言,比如二极管、电解电容等,必须按照产品标识及产品规格进行安装,避免由于方向问题导致的电路错误。焊接完成后一定要对整个系统进行细致认真的检查。主要检查虚焊和短路,虚焊会使得元器件和电路板子之间的电的联系不稳定,使得系统时断时续,而短路则可能引发电流过大烧坏元器件乃至引燃整个电路。检查时可以通过放大镜或显微镜下观察焊点,其外观应饱满平滑,无毛刺,无虚焊;用万用表检查各个主要电路节点是否短路。只有当整个系统没有虚焊,短路等故障时,才可以将程序烧入单片机对其进行系统实验。在焊接时,还要注意以下几个问题:(1)焊接前应先对元器件做好型号齐全性、功能验证工作。元素型号、参数与设计是否一致,用简单的电路测试或功能验证仪器,检查元件安装前功能是否正常,可避免安装时因型号、功能不符而造成不必要的拆卸、更换等流程,节约不必要的时间成本与经济成本。(2)在执行PCB板上焊盘的焊接操作时,精确调控焊接时间和温度至关重要;焊接温度应维持在适宜范围,避免过高,同时,焊接时间亦需严格控制,以防过长导致不必要的热损伤。鉴于不同元件及焊锡的熔点特性,选取恰当的电烙铁温度与焊接持续时间至关重要,此乃确保焊接工艺质量与可靠性之关键所在。电烙铁的操作温度应维持在300℃至350℃的范围内,并确保每次焊接过程不超过3秒的时间长度。在执行焊接操作过程中,确保密切关注焊锡的熔化过程及其随后的流动特性至关重要。在确保焊点质量达标的同时,必须采取有效措施避免印刷电路板上的焊盘因过热而发生烧损现象。(3)根据构件体积大小先后顺序进行焊接。为了优化焊接顺序,提高焊接效率,一般先焊接电阻、电容、二极管等体积小重量轻的器件,这些器件在焊接时,不易受到其他器件的影响和干扰,然后再焊接其他大的器件如集成电路、插座等,这样能避免因先焊接大器件,而使小器件焊接空间不足,同时小器件也便于在焊接过程中进行电路板操作和移动固定。(4)根据不同的元件引脚大小和形状控制好焊锡的施用量,确保有一个良好的焊点。焊锡过少会造成焊点不够牢固,出现虚焊等问题;而焊锡过多会导致焊点较大,形状丑陋,并有可能造成短路。因此,在焊接时应注意根据元件引脚的不同大小和形状控制好焊锡的施用量,保证焊点既具有良好的美观效果,又确保彼此之间具有良好的电连接。焊点通常为圆锥状,顶部略尖,使其与元件引脚和焊盘紧密接触。图5-1系统焊接图5.2具体功能测试首先进行实物原理图的连接,包括是电源模块、单片机模块、复位电路模块、晶振电路模块、下载模块、独立按键模块、显示模块、超声波模块、声音检测模块、指示灯模块、蜂鸣器报警等模块组成。其中,单片机采用了STM32芯片;显示屏采用OLED,图5-2为总体实物图。图5-2铁道口无人值守监测系统上电图最终完成各模块的硬件连接,上电后系统进入实时监测状态。各个传感器共同工作,精确测量铁道口相关参数:DS1302实时时钟模块可提供高精度时间获取系统当前时刻的大多数精确时间参数HC-SR04超声波模块可实时测量火车距离,通过超声波发射和接收模块来获取当前火车距离值班人员则通过设定的值班人员编号进行人员、火车到路口的距离、值班人员信息在系统中显示,实现人员信息的记录和显示(0-张三,1-李四,2-王五,等)实物测试图如图34所示,声音模块作为听觉器官,实时检测火车运行产生的声音信号,并判断安全状态通过以上参数,运用STM32单片机进行处理显示,最后将时间值,距离值,值班人员信息和安全状态等信息,在OLED显示屏幕上实时显示。实物测试图如图5-3所示。图5-3功能测试图系统提供便捷的人机交互功能,用户可通过独立按键模块进行安全距离设置。例如,本次将安全距离设定为97厘米,该参数可根据实际需求灵活调整。在模拟测试中,当超声波模块检测到距离为41.1厘米时,由于该数值小于设定的安全距离97厘米,系统立即启动声光报警机制——蜂鸣器发出尖锐的警报声,红色指示灯持续闪烁,同时控制同行闸门状态从“打开”切换为“关闭”,有效阻止无关人员和车辆进入危险区域,为火车通行提供安全保障。如图5-4所示。图5-4通信模块功能测试图为了实现远程监控与管理,系统安装了ESP8266无线通信模组,通过wifi网络将系统所有的监测数据发送至手机端。用户安装相关配套应用软件,即可随时随地查看铁道口事故发生现状、同行闸门状况、值班人员信息等数据。此外,手机端同样具备远程控制功能,管理人员根据具体情况,通过手机端下发指令,对系统进行参数设置、设备状态调控等,实现铁道口监测系统的智能化、远程化管理,显著提高了铁路道口安全管控效率,提升现场铁路道口应急处置效率。对此进行了实物测试,实物测试如图5-5所示。图5-5紧急报警功能测试紧急报警是在特殊状态下启用,当屏幕事故状态显示为“故障”状态,说明出现紧急状况,蜂鸣器开始报警,此时为危险状态。待一段时间后,若要取消报警状态,需手动通过屏幕端点击“结束报警”即可。点击后,屏幕恢复正常状态。如图5-5所示。表5-1铁道口无人值守监测系统功能测试表测试项目测试条件实际结果超声波测距功能安全阈值设为97cm,输入不同距离41.1cm时报警触发,显示准确声光报警功能距离<安全阈值且检测到火车声音报警及时,栏杆动作远程通信功能通过ESP8266发送数据至手机端数据显示完整,指令响应正常时间显示功能系统运行中读取DS1302时钟数据时间更新连续,格式准确值班人员信息显示通过按键切换值班人员编号(0-2)信息切换流畅,显示无误安全状态显示根据距离与阈值判断安全状态状态切换及时,标识清晰紧急报警功能手动触发紧急报警报警触发后手动解除,功能正常表5-1超声波测距精度测试表(单位:cm)实际距离测量距离误差范围是否合格50.049.8±0.5cm是100.099.5±0.5cm是200.0199.3±1.0cm是400.0398.7±1.5cm是在设计调试的过程序主要遇见如下几点问题:(1)程序烧录后屏幕上无法显示出数据,通过软件的测试和硬件的检测,最终确定由于设计焊接的电位器出现短路现象,导致屏幕分压出现问题,所以没法进行显示。(2)系统显示后,屏幕数据出现卡顿现象,经过测试,由于超声波模块的数据管脚接反了,系统没法进入中断,程序进入了死循环,所以数据没变化。(3)时钟模块没法按照要求显示出具体的年月日时间等,显示出来后,时间没法正常的跳转,经过检查,集成模块自身有问题,换模块之后,可以按照要求进行显示。5.3本章小结为了完成本次毕设的实物,使系统更加稳定,本次设计采用PCB进行焊接,省去不必要的麻烦,避免因为电路短路,断路而产生的设计不稳定,功能不稳定的想象。本次实物匹配的元器件都采用直插型,方便焊接,在焊接之前,了解单片机,按键蜂鸣器,电阻,电容的基本特性,正负值,芯片方向等,然后在进行实物的焊接,将芯片,元器件都焊接稳定,排布整齐。本章主要对系统进行实物的搭建,调试。经过对各个模块的验证,各个模块完全按照设计功能要求进行,屏幕,按键,超声波模块,声音检测模块,时钟模块可以稳定的运行。6结论6.1设计总结本设计将实现基于单片机的铁道口无人值守监测系统的硬件设计、软件程序、测试结果。最后对系统进行性能分析、总结,以便系统可以改进。本设计能够完成前文所要求的设计内容,能够对铁道口进行监测,通过wifi无线通信模块发送数据给控制系统,从而控制闸口的关闭与打开。系统具有以下特点:(1)硬件设计合理、功能齐全,包括监测模块、WiFi无线连接模块、继电器模块、单片机处理器等。监测模块包括超声波传感器(火车到铁路口的距离监测)、声音检测传感器(火车运行声音检测等)等,实现对铁道口状态的采集;继电器模块作为强电和弱电的连接桥梁,通过电磁感应实现外部大功率设备栏杆机的安全控制;单片机处理器采用的是STM32F103C8T6单片机,满足高性能处理能力和丰富的外设,协调实现模块的有序工作。(2)系统的软件设计通过编程实现采集火车到达铁路口的距离,判断火车是否进站,检测具体的声音,当两者条件同时满足时,将触发声光报警模块,同时设计的人机交互显示屏,还可以显示具体的时间信息,具体信息,报警信息等。(3)统具有较好的控功能。对火车运行至铁路口的距离进行实时跟踪检测,当接近或小于安全距离时,进行提示告警。除了对行人、车辆进行声光报警外,还可以根据程序,结合铁路信号系统等对火车运行状况进行干预,如发送信号让火车紧急刹车等,确保铁路口的安全。(4)操作上简单便利。系统的操控非常简单,用户只需要采用手动开启系统的电源,就能够实现对铁道口的监控目的,基于单片机控制系统,无需系统操作培训和操作流程,能够对铁道口进行实时监测和控制,因此,使用非常简便。6.2应用前景于单片机控制的铁道口无人值守监测系统在功能上基本可以实现,但由于本人精力与水平的限制,还存在一些不足之处以及改进的方面。主要表现在以下几个方面:(1)可考虑将铁道口无人值守监测系统与铁路的信号系统、列车运行控制系统等信息系统进行有效结合,共享信息、相互配合,如监测系统发现铁道口有异常情况可以及时向列车运行控制系统发送信号,控制列车减速或者停车,防止事故的发生。(2)可以增设语音提示与交互功能,增加语音提示功能,向行人及车辆驾驶员提供清晰的语音提示信息,便于提高警示效果;支持语音交互功能,方便用户通过语音命令来查询信息或执行操作。(3)考虑增设智能照明和引导功能。可在铁道口设置智能照明系统,能够按照环境光线和接近列车亮度自动调节亮度,增加夜间或黑暗环境下的可见度。同时可设置引导灯光或标志,引导行人通过路口,引导车辆驶入。通过本次毕业设计学习,我受益匪浅,学到了很多的知识,并应用在实际操作中,提高了自身的知识水平。了解了一台单片机控制系统设计实现过程以及如何在理论上将其应用于实际项目中,了解了如何选择单片机型号、如何设计电路、如何编写程序实现系统功能,不仅锻炼了自身的电子设计和嵌入式系统设计的能力,也提高了自身实践解决实际问题的能力。参考文献郭东福.单片机+Cat.1在无人值守洗车系统中的应用[J].现代工业经济和信息化,2023,13(08):169-172.郑剑波,朱鸿博,陈煜,等.无人值守变电站设备电源远控管理装置的设计与实现[J].山东电力技术,2022,49(09):14-21+60.梁永文,陈晓涛.移动式无人值守核酸采集站设计研究[J].兰州石化职业技术学院学报,2022,22(03):24-28.张锡恒.无人值守天然气站远程监控的实现[J].自动化应用,2021,(08):28-31.DOI:10.19769/j.zdhy.2021.08.009.龙飞虎,董振鹏,甘子东,等.地下商城停车场无人值守智能机器人测控系统研究[J].中国设备工程,2021,(15):32-33.孙琦,傅军.基于北斗的无人值守气象站设计[J].物联网技术,2021,11(05):99-103.DOI:10.16667/j.issn.2095-1302.2021.05.029.郭志,张莹,林松,等.基于单片机的无人值守变电站防漏水告警系统[J].山东电力技术,2019,46(11):51-55.何英昊,郑鹏辉,李广,等.十字路口智能导流控制系统[J].物联网技术,2022,12(11):60-63.韩旭东,韩乐乐,林邦演,等.基于STM32的智能交通灯系统设计[J].时代汽车,2022,(16):112-114.邹智恒,钟靓,刘含超,等.基于单片机的十字路口交通灯控制系统设计[J].机械研究与应用,2019,32(05):157-159.李珊珊,绳鹏,裴丽红,等.基于视频的路口拥堵信息监测系统设计[J].仪表技术,2018,(10):15-18.ZhangB,LiY,ZhuH,etal.StudyonthedesignofunattendedSCRSfull-conditionadaptivebypassflowsystems[J].NuclearEngineeringandDesign,2025,432113768-113768:12-8.SeviM,Aydınİ.EnhancedrailwaymonitoringandsegmentationusingDNetandmathematicalmethods[J].Signal,ImageandVideoProcessing,2024,19(1):106-106.YükselK,KinetD,MoeyaertV,etal.Railwaymonitoringsystemusingopticalfibergratingaccelerometers[J].SmartMaterialsandStructures,2018,27(10):25-30.张颖,曹海燕,宋文斌,等.集成电路技术基础[M].化学工业出版社:202406.197.周长锁.51单片机编程[M].化学工业出版社:202302.279.HeY.DesignandImplementationofIntelligentWaterHeaterBasedonSTC89C52[J].JournalofPhysics:ConferenceSeries,2024,2731(1):16-3.王陈宸.基于STM32的配电网远动终端(RTU)的设计[D].武汉:长江大学,2018.韩静.基于物联网的农机恒温恒湿环境监测与控制系统设计与应用[J].南方农机,2024,55(19):69-72.蔡佳树,陈平平.一种基于OneNET云平台的消防安全监测系统[J].物联网技术,2025,15(03):14-17.DOI:10.16667/j.issn.2095-1302.2025.03.004.TangL,WangY,FangT.Hardwarecircuitdesignofintelligentfastchargercontrolsystem[J].JournalofPhysics:ConferenceSeries,2024,2810(1):012027-012027.QianXR,CuiM,LuJ,etal.SubstituentpositioneffectsonbluelightemissionoforganophosphoniumorganiccompoundsforpotentialOLEDapplications[J].InorganicChemistryCommunications,2025,178(P1):114526-114526.马慧文.基于FPGA的OLED显示屏控制电路设计[D].北京:北京交通大学,2024.DOI:10.26944/ki.gbfju.2024.000478.李强.信息交互化人防警报终端控制器的研制[D].哈尔滨:哈尔滨理工大学,2008.张培志,罗敏,仇芝.电气控制与可编程序控制器[M].化学工业出版社:202311.338.夏洪永,伍波.电气安全技术[M].化学工业出版社:202308.256.董健平.多参数能耗采集监测系统的研究与设计[D].吉林:吉林建筑大学,2024.DOI:10.27714/ki.gjljs.2024.000092.吴建平.传感器原理及应用[M].机械工业出版社:202206.719.肖洋.基于物联网化工实验室的设备制造与安全监控系统设计[D].浙江:浙江科技大学,2024.DOI:10.27840/ki.gzjkj.2024.000514.QiaoJ.ResearchonMotionModelingandControlofTrackingCarBasedonNeuralNetwork[C]//EliwiseAcademy.Proceedingsofthe2ndInternationalConferenceonComputingandDataScience(CONF-CDS2021).ResearchInstituteofMicro,NanoScienceandTechnologyShanghaiJiaoTongUniversity;,2021:297-301.DOI:10.26914/kihy.2021.075074.附录#include"stm32f10x.h"#include"OLED_I2C.h"#include"ds1302.h"//#include"ds18b20.h"#include"usart1.h"#include"led.h"#include"delay.h"//#include"max30102_read.h"#include"myiic.h"#include"key.h"#include"iic.h"#include"stdio.h"#include"string.h"//#include"adxl345.h"#include"HC_SR04.h"#include"esp8266.h"#include"timer.h"#include"stmflash.h"#include<stdio.h>#include<stdlib.h>#include<string.h>#include"stdbool.h"#defineFLASH_SAVE_ADDR((u32)0x0800F000) //设置FLASH保存地址(必须为偶数)#defineSTM32_RX1_BUFUsart1RecBuf#defineSTM32_Rx1CounterRxCounter#defineSTM32_RX1BUFF_SIZEUSART1_RXBUFF_SIZEu16DistanceMax=100;floatDistance=0.0;u8NameNum=0; //值班人员编号:0-张三,1-李四,2-王五voidDisplayInit(void){ unsignedchari; for(i=0;i<2;i++)OLED_ShowCN(i*16,4,i+12,0);//测试显示中文:距离 OLED_ShowChar(32,4,':',2,0); for(i=0;i<4;i++)OLED_ShowCN(i*16,6,i+20,0);//测试显示中文:值班人员 OLED_ShowChar(64,6,':',2,0);}voidDisplayTime(void)//显示时间函数{ unsignedchari=0,x=0; u16nian_temp; if(setn==0)DS1302_DateRead(&SysDate);//读时间 nian_temp=2000+SysDate.year; if((nian_temp%400==0)||((nian_temp%100!=0)&&(nian_temp%4==0)))//判断是否为闰年 p_r=1; else p_r=0; if(setn<8) { OLED_ShowChar((x++)*8,0,'2',2,setn+1-1); OLED_ShowChar((x++)*8,0,'0',2,setn+1-1); OLED_ShowChar((x++)*8,0,SysDate.year/10+'0',2,setn+1-1); OLED_ShowChar((x++)*8,0,SysDate.year%10+'0',2,setn+1-1); OLED_ShowChar((x++)*8,0,'-',2,0); OLED_ShowChar((x++)*8,0,SysDate.mon/10+'0',2,setn+1-2); OLED_ShowChar((x++)*8,0,SysDate.mon%10+'0',2,setn+1-2); OLED_ShowChar((x++)*8,0,'-',2,0); OLED_ShowChar((x++)*8,0,SysDate.day/10+'0',2,setn+1-3); OLED_ShowChar((x++)*8,0,SysDate.day%10+'0',2,setn+1-3); OLED_ShowCN(i*16+88,0,0,setn+1-4);//测试显示中文:周 switch(SysDate.week){case1: OLED_ShowCN(i*16+104,0,1,setn+1-4);//测试显示中文:一break;case2: OLED_ShowCN(i*16+104,0,2,setn+1-4);//测试显示中文:二break;case3: OLED_ShowCN(i*16+104,0,3,setn+1-4);//测试显示中文:三break;case4: OLED_ShowCN(i*16+104,0,4,setn+1-4);//测试显示中文:四break;case5: OLED_ShowCN(i*16+104,0,i+5,setn+1-4);//测试显示中文:五break;case6: OLED_ShowCN(i*16+104,0,6,setn+1-4);//测试显示中文:六break;case7: OLED_ShowCN(i*16+104,0,7,setn+1-4);//测试显示中文:日break;}x=0; OLED_ShowChar((x++)*8,2,SysDate.hour/10+'0',2,setn+1-5); OLED_ShowChar((x++)*8,2,SysDate.hour%10+'0',2,setn+1-5); OLED_ShowChar((x++)*8,2,':',2,0); OLED_ShowChar((x++)*8,2,SysDate.min/10+'0',2,setn+1-6); OLED_ShowChar((x++)*8,2,SysDate.min%10+'0',2,setn+1-6); OLED_ShowChar((x++)*8,2,':',2,0); OLED_ShowChar((x++)*8,2,SysDate.sec/10+'0',2,setn+1-7); OLED_ShowChar((x++)*8,2,SysDate.sec%10+'0',2,setn+1-7); }}voidDisplaySetValue(void)//显示设置值{ if(setn==8) { sprintf(display,"%d",DistanceMax); OLED_ShowStr(54,4,(unsignedchar*)display,2);//显示报警值 }}voidGetOperatorName(void){ unsignedchari; switch(NameNum) { case0:for(i=0;i<2;i++)OLED_ShowCN(i*16+74,6,i+24,0);//测试显示中文:张三 break; case1:for(i=0;i<2;i++)OLED_ShowCN(i*16+74,6,i+26,0);//测试显示中文:张三 break; case2:for(i=0;i<2;i++)OLED_ShowCN(i*16+74,6,i+28,0);//测试显示中文:张三 break; case3:for(i=0;i<2;i++)OLED_ShowCN(i*16+74,6,i+30,0);//测试显示中文:张三 break; case4:for(i=0;i<2;i++)OLED_ShowCN(i*16+74,6,i+32,0);//测试显示中文:张三 break; default:break; }}voidKeySettings(void)//按键设置函数{ NameNum++; }else{ NameNum=0; } } if(setn==1)//设置年 { SysDate.year++; if(SysDate.year==100)SysDate.year=0; DS1302_DateSet(&SysDate);//设置时间 } if(setn==2)//设置月 { SysDate.mon++; if(SysDate.mon==13)SysDate.mon=1; if((SysDate.mon==4)||(SysDate.mon==6)||(SysDate.mon==9)||(SysDate.mon==11)) { if(SysDate.day>30)SysDate.day=1; } else { if(SysDate.mon==2) { if(p_r==1) { if(SysDate.day>29) SysDate.day=1; } else { if(SysDate.day>28) SysDate.day=1; } } } DS1302_DateSet(&SysDate);//设置时间 } if(setn==3)//设置日 { SysDate.day++; if((SysDate.mon==1)||(SysDate.mon==3)||(SysDate.mon==5)||(SysDate.mon==7)||(SysDate.mon==8)||(SysDate.mon==10)||(SysDate.mon==12))//大月 { if(SysDate.day==32)//最大31天 SysDate.day=1;//从1开始 } else { if(SysDate.mon==2)//二月份 { if(p_r==1)//闰年 { if(SysDate.day==30)//最大29天 SysDate.day=1; } else { if(SysDate.day==29)//最大28天 SysDate.day=1; } } else { if(SysDate.day==31)//最大30天 SysDate.day=1; } } DS1302_DateSet(&SysDate);//设置时间 } if(setn==4)//设置星期 { SysDate.week++; if(SysDate.week==8)SysDate.week=1; DS1302_DateSet(&SysDate);//设置时间 } if(setn==5)//设置时 { SysDate.hour++; if(SysDate.hour==24)SysDate.hour=0; DS1302_DateSet(&SysDate);//设置时间 } if(setn==6)//设置分 { SysDate.min++; if(SysDate.min==60)SysDate.min=0; DS1302_DateSet(&SysDate);//设置时间 } if(setn==7)//设置秒 { SysDate.sec++; if(SysDate.sec==60)SysDate.sec=0; DS1302_DateSet(&SysDate);//设置时间 } if(setn==8)DistanceMax++; DisplaySetValue(); } if(keynum==3)//减 { if(setn==0) { OLED_CLS(); for(i=0;i<2;i++)OLED_ShowCN(i*16+48,2,i+16,0);//测试显示中文:警报危险 for(i=0;i<2;i++)OLED_ShowCN(i*16+48,4,i+14,0);//测试显示中文:警报危险 safeFlag=1; BEEP=1; } if(setn==1)//设置年 { if(SysDate.year==0)SysDate.year=100; SysDate.year--; DS1302_DateSet(&SysDate); } if(setn==2)//设置月 { if(SysDate.mon==1)SysDate.mon=13; SysDate.mon--; if((SysDate.mon==4)||(SysDate.mon==6)||(SysDate.mon==9)||(SysDate.mon==11)) { if(SysDate.day>30) SysDate.day=1; } else { if(SysDate.mon==2) { if(p_r==1) { if(SysDate.day>29) SysDate.day=1; } else { if(SysDate.day>28) SysDate.day=1; } } } DS1302_DateSet(&SysDate); } if(setn==3)//设置日 { SysDate.day--; if((SysDate.mon==1)||(SysDate.mon==3)||(SysDate.mon==5)||(SysDate.mon==7)||(SysDate.mon==8)||(SysDate.mon==10)||(SysDate.mon==12)) { if(SysDate.day==0) SysDate.day=31; } else { if(SysDate.mon==2) { if(p_r==1) { if(SysDate.day==0) SysDate.day=29; } else { if(SysDate.day==0) SysDate.day=28; } } else { if(SysDate.day==0) SysDate.day=30; } } DS1302_DateSet(&SysDate); } if(setn==4)//设置星期 { if(SysDate.week==1)SysDate.week=8; SysDate.week--; DS1302_DateSet(&SysDate); } if(setn==5)//设置时 { if(SysDate.hour==0)SysDate.hour=24; SysDate.hour--; DS1302_DateSet(&SysDate); } if(setn==6)//设置分 { if(SysDate.min==0)SysDate.min=60; SysDate.min--; DS1302_DateSet(&SysDate); } if(setn==7)//设置秒 { if(SysDate.sec==0)SysDate.sec=60; SysDate.sec--; DS1302_DateSet(&SysDate); } if(setn==8)DistanceMax--; DisplaySetValue(); }}voidGetDistance(void){ unsignedchari; /******************************************************************************** ***Get_SR04_Distance()返回单程声波传输时间us,转换为秒=时间*10^(-6);331m/s等于331000mm/s, ***最终换算为Distance=Get_SR04_Distance()*10^(-6)*331000=(Get_SR04_Distance()*331)*1.0/1000; ***********************************************************************************/ Distance=(Get_SR04_Distance()*331)*1.0/10000;//单位cm if(Distance>=450)Distance=450; sprintf(display,"%5.1fcm",Distance); OLED_ShowStr(42,4,(unsignedchar*)display,2);//显示距离值 if(VOICE==0&&Distance<DistanceMax) //有声音且小于安全距离禁止 { BEEP=1; RELAY=0; LED=0; gateFlag=0; //门的状态-关 for(i=0;i<2;i++)OLED_ShowCN(i*16+88,2,i+18,0);//测试显示中文:禁止 }else{ BEEP=0; RELAY=1; LED=1; gateFlag=1; //门的状态-开 for(i=0;i<2;i++)OLED_ShowCN(i*16+88,2,i+10,0);//测试显示中文:安全 }}voidUsartSendReceiveData(void)//串口发送接收数据{ char*str1=0,i; unsignedchar*dataPtr=NULL;charSEND_BUF[100]; intsetValue=0; charsetvalue[3]={0}; dataPtr=ESP8266_GetIPD(0);//接收数据 if(dataPtr!=NULL) { BEEP=1; DelayMs(50); BEEP=0; if(strstr((char*)dataPtr,"NameNum:")!=NULL) { str1=strstr((char*)dataPtr,"NameNum:"); while(*str1!=':')//判断是不是0到9有效数字 { str1=str1+1; DelayMs(10); } str1=str1+1; i=0; while(*str1>='0'&&*str1<='9')//判断是不是0到9有效数字 { setvalue[i]=*str1; i++;str1++; if(*str1=='\r')break;//换行符,直接退出while循环 DelayMs(10); } setvalue[i]='\0';//加上结尾符 setValue=atoi(setvalue); if(setValue>=0&&setValue<=99) { NameNum =setValue; } } } if(dataPtr!=NULL) { BEEP=1; DelayMs(50); BEEP=0; if(strstr((char*)dataPtr,"safeFlag:")!=NULL)//接收到设置血氧下限的指令 { str1=strstr((char*)dataPtr,"s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中职(康复健康教育)教育指导阶段测试试题及答案
- 2025年高职专科(舞蹈编导)舞蹈作品编排综合测试题及答案
- 2025年中职广告学(广告媒体)试题及答案
- 2025年大学大四(文物与博物馆学)文化遗产保护学试题及答案
- 2025年中职(听力语言康复技术)听力康复训练试题及答案
- 2025年大学产品手绘表达(手绘技巧)试题及答案
- 2025年高职微电子技术(集成电路设计)试题及答案
- 2025年高职药品生产技术(药品生产应用)试题及答案
- 2025年高职安全健康与环保(安全健康环保应用)试题及答案
- 2026年及未来5年市场数据中国汽车易损件行业发展前景及投资战略规划研究报告
- 2025年塔吊指挥员考试题及答案
- 2025福建闽投永安抽水蓄能有限公司招聘21人备考题库附答案
- 2025年昆明市呈贡区城市投资集团有限公司及下属子公司第二批招聘(11人)备考考试题库及答案解析
- 2025中国高净值人群品质养老报告-胡润百富-202512
- 2025四川绵阳市江油鸿飞投资(集团)有限公司招聘40人笔试考试备考题库及答案解析
- 北京市公安局辅警岗位招聘300人考试历年真题汇编带答案解析
- 2025中华护理学会团体标准-无创正压通气护理技术
- 2025年急性缺血性卒中及溶栓护理考试试题及答案
- 室内装修冬季施工供暖措施方案
- 2024年《广西壮族自治区建筑装饰装修工程消耗量定额》(上册)
- DBJT15-101-2022 建筑结构荷载规范
评论
0/150
提交评论