版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要:选择STM32F103C8T6作为系统控制模块的核心部件,采用两对红外发射管和红外接收管接收人员进出教室产生的电信号从而判断教室内人员数量,利用光敏电阻构成的电路检测环境光的强度。根据教室内的光照条件,通过处理上述电信号和光信号,完成对教室灯光的智能控制,并在LCD屏幕上显示实际控制效果,避免教室灯光滥开滥用。系统还可在自动运行和手动控制两种模式间切换,同时采用了“看门狗”等抗干扰措施。系统的程序使用C语言进行编写,采用了模块化的结构设计,逻辑分明,兼容性强,易于进行改进和扩展。该系统具备体积小、控制简便、高可靠性、明确的目标性和优异的成本效益比等特性,能够迎合不同学校对于教室照明的控制需求,大幅实现节能目标。关键词:智能灯光控制;STM32F103C8T6;红外发射管和红外接收管;光敏电阻。绪论研究意义2020年9月,我国宣布力争于2030年前实现碳达峰,于2060年前实现碳中和REF_Ref21769\r\h[1]。在能源需求越来越大的背景下,研究现状国外研究现状REF_Ref22389\r\h[2]从全球智能照明竞争格局的角度来看,全球范围而言,目前全球LED照明市场已形成了以美国、亚洲、欧洲为主导的三足鼎立的产业格局,并呈现出以日、美、德为产业龙头的格局。REF_Ref19711\r\h[3]国内研究现状自20世纪90年代登陆中国后,智能照明产业的发展一直较为缓慢,受到了市场消费观念、环境因素、产品定价以及推广活动等多方面的影响。业内人士普遍认为,智能照明市场未能快速成长的主要障碍在于消费者对智能照明产品的认知程度不够。为了推动照明行业的节能减排,2011年11月14日,中国国家发展和改革委员会联合其他四个部门共同发布了“中国逐步淘汰白炽灯路线图”。该路线图明确规定,从2016年10月1日开始,中国将禁止销售和进口15瓦及以上的普通照明白炽灯。这一政策的实施,旨在促进高效节能照明产品的普及,包括节能灯和LED灯,同时为智能照明技术的发展和普及创造了良好的市场环境。随着白炽灯淘汰政策的逐步实施,智能照明市场有望得到进一步的发展。智能照明系统以其节能、环保、智能化控制等特点,逐渐受到了消费者的关注。未来,随着技术的进步和市场的培育,智能照明有望在中国市场实现更快速的成长。研究主要内容本篇论文的研究背景立足于海南师范大学田家炳教学楼,研究的目标在于提升高校教室照明系统的智能化水平,并解决电能浪费的问题。通过对田家炳教学楼照明系统的深入分析,论文探讨了如何利用智能照明技术,实现照明的自动化管理,以提高能源使用效率,减少不必要的电能消耗。此外,本文还关注了照明系统的智能化对教学环境和学生学习效果的影响。基于此思想我设计并实现了一款基于STM32F103C8T6微控制器的控制系统,该系统内部整合了基础的单片机控制功能。其内有单片机最小控制系统、电源连接电路、人员数量统计模块、系统显示模块、外部时钟、按键模块等基本电路,并完成以下功能:(1)检测进出人的数量;(2)在自动模式下,灯光的亮度会根据人数的增减和环境光照强度的变化而自动调整;(3)在手动模式下,用户可以通过按键来控制LED灯的点亮数量。(5)LCD液晶显示功能;(6)实时显示时间,并通过按键确定自动模式时的工作时间范围;(7)设计看门狗确保电路稳定运行;(8)创新点:与传统的灯光控制相比,增加了PWM调光、人员数量统计、自动模式工作时间可控功能,使教室灯光控制的功能更具多样性。人性化、智能化。教室智能照明控制系统硬件方案设计本章主要完成硬件系统总体设计方案,并从市面上挑选最合适完成本作品的电子器件包括:STM32F103C8T6单片机板、LM393电压比较器、5mm红外发射接收及配对红外接收管、LCD1602液晶显示模块、DS1302时钟芯片。系统总体设计方案在设计过程中,我充分考虑了整体系统的实用性、可行性以及经济性,以确保设计方案能够在实际应用中得到有效实施。经过全面评估和多次优化,最终确定的教室智能灯控硬件模块方案如下所示。如图1所示。图1系统设计结构图系统元器件选择单片机选型STM32单片机中STM32F103C8T6属于ARMv7架构,具有高性能、低功耗的特点,同时价格相对较低,意味着它在性能和成本之间取得了良好的平衡。此外其主频为72MHz,可以满足大部分应用场景的处理需求,并且可以在低功耗模式下运行。它的这些特性使其非常适合于各种小型项目和教育用途。而且它的设计考虑到了易用性和开发便利性,支持KEIL开发环境和C语言编程,方便初学者使用。这款单片机搭载了ARMCortex-M332位微处理器,具备12位模数转换功能(最多10个通道),以及多种计时器,包括PWM计时器。同时,它还拥有标准的和高级的通讯接口。其工作电压介于2V至3.6V之间,内置64K字节的闪存、20K字节的SRAM、7通道的DMA控制器、3个通用计时器以及1个高级控制计时器。两个SPI,两个I2C,三个USART,一个USB和一个CAN接口,使得该单片机能够灵活地与多种外围设备进行通信,满足不同应用场景的需求。37个快速输入输出端口保证其足够的灵活性和适用性。此外,还有一种综合性的节能模式,使得设计者能够开发出低能耗的应用程序。下面是引脚示意图,如图2所示。
图2STM32F103C8T6芯片引脚图人员数量统计系统选择方案一:通过摄像头计数通过摄像头采集数据再用DSP处理器对图像进行分析可以很好的对教室人数进行统计。但实际上出于能源消耗、个人隐私保护以及教学质量等方面的考虑,摄像头常开是不合理的。该方式高应用场景为特别重视安全问题的场所如机场、边境口岸、军事管理区等场所。故舍弃该方案。方案二:热释电红外传感器计数法热释电红外传感器属于一种特殊的红外检测设备,它本身无法发射红外线,如果检测对象本身带有温度,能够释放红外辐射,便能够被热释电红外传感器检测到。例如,人体,电脑之类的都能使其发挥工作。当检测人时,主要检测人体随传感器距离变化产生的不同的红外辐射。如果检测到的红外辐射发生变化,便代表有人路过。传感器可以检测到这些变化并将其转换为电信号。这些信号经芯片处理后,可以实现对微小人体移动的检测。并且其可以针对人体进行计数,针对性较高,受外界干扰较小。但是基于热释电红外传感的人员数量统计系统较贵,单独以热释红外传感器进行开发也可以实现但较为复杂。另一个不足之处在于,如果环境温度较高,诸如海南,广东等温度甚至能够到达40℃,热释电红外传感器就会出现结果“失真”,探测反应变慢等情况。当温度过高时,其还会出现宕机的现象。故该方案在诸如海南气温较高的地区不合适REF_Ref3007\r\h[5]。方案三:红外对管计数法基于红外发射器和接收器的计数系统与热释电红外传感器的技术方法恰好相反。它并非主要通过检测外界物体或人产生的红外辐射,而是通过红外发射器发射红外线,然后由红外接收器接收它。这个流程便完成了一次检测,检测方式多种多样,目前有通过红外线被遮挡产生反射再被接收的方式。也有反其道行之的检测红外射线被阻挡产生的空窗期(红外线没被检测到)再由红外接收器接收这个“空信号”的方式。我采取第一种方式。该系统计数精确,电路简单便于维修。且基于该系统的计数产品多种多样,价格低廉。本次毕业设计采用的红外对管方案便属于该方案。显示器选择方案一:LED数码管显示方案LED数码管显示技术是一种常见的显示方式,它利用LED数码管作为显示元件,通过控制数码管中的LED灯珠的亮灭来显示数字、字母和符号等信息。本文将从以下几个方面对LED数码管显示方案进行分析。LED数码管由多个LED灯珠组成,每个LED灯珠代表一个数字或一个段,通过控制各个LED灯珠的亮灭,可以显示出不同的数字、字母和符号。LED数码管通常包括7个段(a,b,c,d,e,f,g)和一个点(dp),通过不同的组合可以显示出0-9的数字和A-F的字母。较之8段型7段型数码管少用了一个发光二极管,意味着少了一个用于标记小数点的二极管。此外,还可以通过控制多个数码管来实现多位数的显示。LED数码管显示方案具有许多优势,如高亮度、低功耗、长寿命、响应速度快、绿色环保等。LED数码管显示方案广泛应用于各个领域,包括电子时钟、电子计分器、温度显示、电子价格标签等。电子时钟是LED数码管显示方案最为常见的应用之一,通过控制数码管中的LED灯珠的亮灭,可以显示出当前的时间。电子计分器也是LED数码管显示方案的重要应用领域,如体育比赛、篮球比赛等都需要计分器来显示得分情况。然而,LED数码管显示也存在许多不足之处。首先,LED数码管显示方案的显示内容相对有限,只能显示数字、字母和符号,无法显示复杂的图形和图像。其次,LED数码管显示方案的显示效果相对较简单,无法实现动态显示等较为复杂的效果。考虑到本次实验需要显示的实时时间,光照强度等级,模式选择等信息。信息数据较多,LED数码管无法胜任,最终只能放弃该方案。方案二:LCD液晶显示方案LCD1602其核心控制芯片通常采用HD44780或与之相兼容的型号,具备同时展示16列2行共32个字符的能力。它不仅能够精确地展示ASCII码内的标准字符集,包括大小写字母、数字和常见符号,而且还能够呈现一系列预定义的特殊符号。这些特殊字符可能包括货币符号、数学运算符、度量单位标识等,从而提供了更为丰富和灵活的信息展示能力。LCD1602还可以自定义8个字模,地址分别是00H-07H,其字形点阵存储在CGRAM共64个字节中(8字节存1个字符),如图3LCD1602字库图REF_Ref8549\r\h[6]。图3LCD1602字库图这使得LCD1602在显示字母、数字、符号等信息时非常方便,同时也为用户提供了较大的灵活性,可以根据需要进行定制。其次由于LCD引脚接口较为简单有连接方便的特点。这允许LCD1602工作时直接对其控制芯片的程序读写。故编程驱动显示器的操作很简单,对控制芯片和接口有足够的了解就可读写时序及命令了,不用对其结构、驱动原理深入了解REF_Ref8212\r\h[7]。再者与传统显示屏相比,LCD1602在重量上具有显著的优势,相同显示面积的情况下,液晶模块的结构更为轻巧。在设计和制造轻便电子产品时,LCD1602液晶模块的轻薄特性大大减少了设备的体积和重量,提高了用户的携带便利性。这一特性使得LCD1602在便携式电子设备中尤为受欢迎,例如手持游戏机、小型计算器、便携式仪表等。同时,其较低的能耗也有助于延长电池的使用寿命,这对于便携式设备来说至关重要。因此,LCD1602液晶模块在便携式医疗设备、手持条码扫描器、智能穿戴设备等多种场合中都有广泛的应用REF_Ref8212\r\hREF_Ref9887\r\h[8]。最后,考虑需要显示信息的多少,以及对屏幕大小,便携性,操作简便性等因素,我选择LCD1602液晶显示作为最终的显示方案。LCD1602引脚说明如表4。编号符号引脚说明编号符号引脚说明1VSS电源地9D2DataI/O2VDD电源正极10D3DataI/O3VL液晶显示偏压信号11D4DataI/O4RS数据/命令选择(H/L)12D5DataI/O5R/W读/写选择端(H/L)13D6DataI/O6E使能信号14D7DataI/O7D0DataI/O15BLA背光源正极8D1DataI/O16BLK背光源负极表4LCD1602引脚说明外部时钟芯片选择为了适配教室照明的使用规律,本系统设计需要集成时间控制机制,这对时钟电路有较高的要求既要时间运行精准,也要求其稳定运行。那么如何对时钟电路进行设计,时钟芯片的挑选显得尤为重要。考虑到系统在断电情况下仍需为时钟电路提供电源,并且尽量减少对STM32F103C8T6资源的占用,在我的毕业设计项目中,我精心选择了DS1302实时时钟芯片。它不仅具备精确的时间保持功能,而且还内置了充电电路,能够为时钟电路提供电源。这一特性使得DS1302非常适合用于需要长期运行且不需要频繁更换电池的应用场景。此外,DS1302还包含了用于数据暂存的RAM寄存器,这些寄存器可以用来存储临时数据,为我的项目提供了额外的数据存储能力。DS1302是美国DALLAS公司开发的一款实时时钟电路,它不仅集成了RAM存储器,而且以其卓越的性能和低功耗特性而闻名。这款芯片设计用于在电子设备中提供准确的时间保持功能,同时还可以存储少量的数据,这使得它在各种需要时间管理和数据记录的应用中非常受欢迎。同时DS1302也是采用串行通信接口的实时时钟(RTC)芯片,它不仅能够提供精确的时间记录功能,还具备为备用电源充电的特性,以实现掉电保护,当然,这一功能也可以根据需求被禁用。该芯片具备完善的时间管理能力,能够独立追踪和更新年份、月份、日期、小时、分钟和秒钟。此外,DS1302还内置了闰年自动调整机制,确保了时钟在长时间运行后的准确性。它设计的工作电压范围宽广,从2.5V到5.5V,适应性强,便于在不同电压环境下稳定工作。在硬件连接方面,DS1302与STM32F103C8T6微控制器核心板的对接异常简便,仅需三根导线即可完成,极大简化了电路设计和布线过程,满足系统的要求REF_Ref12767\r\h[9]。各引脚的功能定义如下(其引脚图如图5所示):(1)VCC1:这一引脚是DS1302的主电源输入端。当设备正常运行且有外部电源供应时,VCC1为芯片提供必要的电能,确保实时时钟和RAM寄存器正常工作。(2)VCC2:作为备用电源输入,VCC2引脚提供了一种电源冗余机制。当VCC2的电压水平超过VCC1的电压加上0.2伏特时,DS1302会自动切换到由VCC2供电,这样的设计确保了在主电源失效或电压不足时,DS1302仍能继续运行。相反,当VCC2的电压降至低于VCC1时,DS1302会转而由VCC1供电,保证了电源的稳定性和可靠性。(3)SCLK:串行时钟输入引脚是DS1302数据传输的心脏。它控制着数据的同步输入和输出操作。在数据传输过程中,SCLK提供时钟信号,确保数据的正确读取和写入。每个时钟周期内,DS1302都会根据SCLK的上升沿或下降沿来同步数据。(4)I/O:这个引脚在DS1302的三线接口中充当双向数据线。它用于数据的输入和输出,允许微控制器与DS1302之间进行通信。无论是读取实时时钟数据、写入新的时间信息,还是访问RAM寄存器,I/O引脚都是数据传输的通道。通过这个引脚,可以实现时间的同步、闹钟的设置以及用户数据的存储。RST(5)X1、X2:外部晶振引脚,通常需要外接32.768K晶振。(6)输入信号,在读或写数据过程中,必须保持高电平状态REF_Ref12797\r\h[10]。
图5DS1302的引脚图STM32单片机的最小系统是一个集成了必要组件的紧凑型电路,它由STM32单片机本身为主要核心、通过引脚连接着集成化的电路。这些引脚对着的电路包括时钟、电源管理、调试下载以及复位电路。这个系统利用了STM32单片机内部嵌入的ARMCortex-M3内核,这是一个强大的处理核心,它能够在保持低能耗的同时提供卓越的处理能力。这种设计不仅提高了能效,还极大地减少了编程的复杂度,使得开发者能够更加高效地进行系统开发和维护。图6详细展示了Cortex-M3内核的内部结构,揭示了其之所以有高效性能的原因。图6Cortex-M3内核结构图STM32F103C8T6芯片做单片机最小系统实现各部分电路功STM32F103C8T6芯片有40个引脚如图7,每个引脚均分配了特定功能及可能的复用功能。充分理解和利用这些功能对于处理和显示红外对管、光敏电阻等传感器电路的信号至关重要。这些引脚对应维持系统运行的电源管理、复位、晶振、液晶显示、按键以及各类传感器模块所需的接口。图7STM32F103C8T6芯片实物图图8主控电路
电源连接电路。图9电源连接电路人员数量统计物体或生物遮挡红外对管致使红外发射管发射的红外线经反射被红外接收管接收,进而使得红外接收管两端的电压下降。教室一般有前后两个门,取其中任意一个门作为研究对象。一组代表室外的红外对管和一组代表室内的红外对管检测到人员后产生的电压信号经过LM393芯片处理然后传送给STM32控制器的内置A/D进行模数转换的处理。是否有人进出教室通过读取STM32F103C8T6最小系统核心板接收这两个电信号的两个A/D转换接口电平便可知。若两者都为低电平即代表有人进出。设计考虑一个门安装两对红外对管是为了保证既能检测通过这个门进来的人员,亦能统计出去的人员数量。人员数量统计电路如图10。为确保信号的采集,处理正常需对电路添加部分电阻起供给电路运行,保护电路等作用。查表知我选购红外发射管最大工作电流为30mA,其正向压降范围为0.8~1.6V。于是我将一个电阻与其相作用为限流。经计算,其阻值大小需满足如下条件考虑红外发射管的发光功率与其工作电流正相关,故取R21和R22电阻值为100Ω。R12和R13作为上拉电阻取值为10K。又为了保证经LM393处理的电信号正确的被被STM32F103C8T6最小系统核心板接收。故令D2和D3作为辅助判断LED灯。当LED灯亮说明信号被正确处理,且当D1和D2LED灯都亮说明有人员进出。若无人进出则灯不会亮。当有人靠近门口则亮其中一个灯,不会计数。这一设计能保证系统稳定运行增强了其可靠性。图10人员数量统计电路
LCD1602各引脚连接对应模块电路的引脚,实现各模块点的内容显IO口是控制液晶显示屏的亮和灭的;1号引脚接一个10K是其 图11LCD液晶显示电路图-S6共6个按键直接与STM32F103C8T6最小系统核心板相连构成按键模块,功能如下:S1为设置按键用来进入修改模式与S3,S4共同实现调整实时时间显示,和自动模式工作时间段。S2为确定按钮用来确定好修改后的LCD上显示的的信息并跳转至下一个待修改信息。S3按键为“增加/调亮”按键。“增加”功能在修改模式下对屏幕上的时间信息进行上调;调亮功能则是PWM调光变亮。S4按键为“下降/调暗”按键。“下降”功能是在修改模式下对屏幕上的时间信息下调;“调暗”功能则是PWM调光“调暗”。S5按键则是“转换”按键,可以切换系统整体电路的工作模式。S6按键是“手动增加”按键,其功能是在手动模式下增加亮的LED灯数当LED灯群亮灯数量达到最大后亮灯数后重新变回亮0盏的状态图12按键电路
系统电路主程序设计教室智能灯控系统的主程序由延时程序、显示子程序、人员数量显示程序、按键子程序、时钟显示子程序、修改模式子程序以及PWM调光显示子程序等程序协同工作,实现了系统的智能化控制和高效运行。当给系统电源接口供电后,首先进行液晶显示器的初始化,为用户提供一个清晰的显示界面。随后,单片机检测到按键操作,根据按键的不同,LCD1602显示界面会切换到相应的模块显示界面,以便用户查看和操作不同的功能。在这个过程中,模拟量数据通过AD转换器转换为数字量,然后在液晶显示界面上显示输出结果。这样的设计使得用户能够直观地了解到当前的照明状态和环境参数,同时也便于用户根据需要进行调整。为主程序流程图。图13主程序流程图系统处于正常工作状态时,在程序扫描并接收到人员数量统计电路传来的经模数处理后的电平信号后对信息进行处理。处理方法如下。为了准确统计教室内的人数,我使用两个标志位:“内”和“外”。当系统检测到人员进入到教室门口的监测区域时,首先将“内”标志位设置为1。接着,系统检查“外”标志位是否已经为1,如果是,这表明有人从外部进入教室内部,因此系统会将人数计数加1,并随后清空两个标志位,为下一次统计做准备。相反,如果系统先检测到“内”标志位被设置为1,随后“外”标志位也被设置为1,这表明有人从教室内部离开,走向外部。在这种情况下,系统会将人数计数减1,并同样清空两个标志位。代表人员数量统计的流程图如下图所示。图14人员数量统计程序流程图
AD转换程序的核心结构包括几个关键步骤。首先,需要针对特定的微控制器芯片定义ADC模块将要使用的引脚。在STM32F10x微控制器中,这通常涉及到配置ADC1模块的相关引脚为模拟输入模式。接下来,对STM32F10x微控制器的ADC1模块进行初始化。这一步骤包括配置ADC的时钟、采样时间、中断设置等参数,确保ADC1能够按照预期的方式工作。一旦ADC1初始化完成,它就可以开始将红外数量检测电路传回的模拟信号转换。转换后的数字信号可以直接被微控制器读取,用于后续的处理,即在液晶显示界面上显示教室内的人员数量,进而根据这些数据来控制LED群的亮灯行为。主要的初始化函数如下所示:voidGPIO_Configuration_ADC(void);//声明了一个外部函数voidSet_ADC_Init(void);//声明了一个外部函数,用于初始化ADC。显示程序主要结构是STM32单片机驱动LCD1602的基础配置部分,确保STM32的GPIO引脚能够正确地与LCD1602模块的引脚连接,并按照所需的模式工作。紧接着是对LCD1206的指令和数据定义,初始化。最后则是将需要的实时时间信息,人员数量,光照强度,显示在屏幕第一页。在按下设置按钮后,可以在屏幕第二页和第三页选择要修改的数据进行更改。调用方法为在需要显示内容的函数里调用对应函数,包括字符,数字。LCD1602显示前主要的初始化函数如下所示:voidGPIO_Configuration_LCD(void);//LCDGPIO初始化voiddelay(uintz);//延时函数voidwrite_com(ucharcom);//LCD1602写指令函数,根据数据手册的时序voidwrite_date(uchardate);//LCD1602写数据函数,根据数据手册的时序voidWrite_Value(ucharadd,chardate);//待写入字符voidWrite_3Value(ucharadd,intdate);/待写入整数/*液晶屏显示内容,把要显示的内容写到对应的位置*/voidLCD_Display_String(unsignedcharline,unsignedchar*string);voidWeek_dispaly(ucharadd,chardat);voidLCD_Initinal(void);////LCD1602和定时器初始化函数按键程序主要分为两个方面,一是在设置模式改变屏上的信息包括实时时间信息,以及自动模式的工作时间段。二是控制4个代表教室灯光的LED灯。需要在改变屏幕信息的程序段完成后才可进入设置模式,实际上这段过程是无感的。按键控制代码设计流程为按键控制光标移动,改变数字信息,确认改变结果。在改变LED灯状态的程序段则较为简单只需将亮灯数量与按下键盘的次数挂钩。唯一需要注意的是当灯全亮后再按按钮使亮灯数量归零。主要函数如下所示:voidGPIO_Configuration_KEY(void);//配置STM32的GPIO端口,用于检测按键输入voidKEY(void);//按键控制逻辑主体程序实现上述功能voiddelay1(uintz);//延时程序该系统的整体原理图主要由STM32F103C8T6单片机最小系统核心板、电源入口模块、LCD1602显示模块、人员数量统计模块、按键模块、外部时钟模块、环境光线强度检测模块。系统能够实现所有设计功能,图15为整体系统模块的工作原理图。图15系统原理图从光敏电阻电路收集电信号,电压经过AD转换得到的值即为环境光线的强度等级,光照强度共分为10个等级为0-9。等级越高,教室的LED灯越暗。LED灯的亮度等级亦分为九等级,对应代数关系为光线强度等级与LED灯亮度等级之和为9。光线强度等级每0.5s通过中断调用采集一次REF_Ref13443\r\h[11]。PWM调光主要函数如下:voidTIM2_IRQHandler(void);////0.5ms定时器中断函数PWM调光PWM_Light();//PWM调光主程序具体功能如上述描述时钟模块程序结构与本章4.4的LCD1602液晶显示部分类似,先对STM32F103C8T6的GPIO引脚初始化以便能够正确地与DS1302模块的引脚连接,再初始化DS1302。然后通过SPI(SerialPeripheralinterface)通信协议的方式,DS1302就可以接收到STM32F103C8T6传过来的读取指令。接收到指令后DS1302返回给STM32F103C8T6有关时间的数据,该数据经由BCD码转换为十进制后解析为十进制的时间和日期信息,如年、月、周、日、时、分、秒。最终将这些信息显示在LCD1602液晶屏幕上。如果在“修改模式”下需要更改信息向DS1302发送设置时间和日期的指令,更新实时时钟的时间和日期即可。需要注意的有两点。首先向DS1302写入时间信息后记得开启写保护,避免时间不断刷新。其次,读取从DS1302传来的数据时需要给一定延时等待电平稳定,之后再读取数据可以确保数据读取不乱。主要函数如下所示:voidds1302_gpio_init(void);//Ds1302端口初始化voidds1032_init(void);//ds1302初始化函数voidds1032_read_time(void);//从DS1302读取实时时间(BCD码)voidds1032_read_realTime(void);//将BCD码转化为十进制数据voidds1032_DATAOUT_init();//配置GPIOA.15为输出模式,以便可以发送数据到//DS1032芯片voidds1032_DATAINPUT_init();//配置GPIOA.15为输入模式,以便可以从DS1032//芯片接//收数据voidds1302_write_onebyte(chardata);//向DS1302写入命令读/写模式voidds1302_wirte_rig(charaddress,chardata);//DS1032芯片向STM32C8T6发送数据chards1302_read_rig(charaddress);//读取DS1032芯片传来的数据
对作品经过多次理论设计改善,焊接,调试后,实物图终于调试成功。实物部分显示效果如下:(1)给电源接口供电,打开开关后,LCD1206液晶显示屏显示初始时间并随时间变动,人员数,环境光线强度,LED灯光线强度。实际效果如图16所示。图16初始化界面(2)“修改模式”下首先选择修改时间或修改自动模式下的工作时间段。选择状态的实际效果如图17至20所示。图17修改模式选择项图18时间修改界面图19自动模式开始时间界面图20自动模式结束时间界面自动模式工作下,随人数变化,LED亮的灯数随之变化。两者关系如下表表21人数与LED灯群亮灯数关系人数LED灯群亮灯数001-9110-19220-29330或以上4实际效果图如图22至图26。图22人数为0时亮灯数量图23人数为1至9时亮灯数量图24人数为10至29时亮灯数量图25人数为20至29时亮灯数量图26人数在30及以上时亮灯数量(3)手动模式工作下,随按键按下次数变化,LED亮的灯数,和亮度也随之变化。实际效果如图27至31所示。图27手动模式按键次数为0图28手动模式按键次数为0图29手动模式按键次数为1图30手动模式按键次数为3图31手动模式按键次数为4
(4)自动模式下LED灯亮度等级与环境关照强度负相关,环境关照强度越高则LED灯亮度等级越低。环境光照强度为0与环境光照强度为9的对比实际效果如图32与图33。手动模式下LED亮度等级由手动控制。按一次“增加/变亮”按键(按键3)所有亮着的灯亮度增加一点;按一次“减少/变暗”按键(按键4)所有亮着的灯亮度减少一点。按动次数为1与按动次数为9的亮度对比实际效果如图34与图35。图32环境光照强度等级为9图33环境光照强度等级为0图34手动模式控制LED灯亮度等级为1图35手动模式控制LED灯亮度等级为1(1)在电子电路设计中考虑各种影响因素还不够完善,例如,在设置光敏电阻在PCB板上的时候,未考虑其与LCD1602显示屏的距离太近,导致实物完成后其始终被LCD1602显示屏遮挡。以至于环境光照强度等级这一参数不容易达到9。(2)在选购红外对管的时候,未选择合适的功率的红外发射管,致使实物调试时其感应距离大大缩小。红外发射管对应的上拉电阻理论上为10K,实际上用万用表测量其所承担分担的电压不够,致使对应LM393的一个比较器的输入电压始终高于2.5V大于基准电压2.5V,结果该比较器输出为高电压,STM32控制器始终接收不到这对红外对管传来的电信号,整体电路无法运行。解决的方法便是逐步提高该上拉电阻的阻值(实际在达到30K时便符合需求),提高其承担电压,对应的比较器的输入电压便可降下来。具体位置如图36
图36解决问题的上拉电阻系统设计总结此次的设计在传统的灯光控制方面进行了一些改进,加入自动化,智能化的元素。进而使得灯光控制更加人性化,教室照明环境得到改善。相信这种控制方式会成为今后灯光控制发展的趋势。通过这次的设计我获得了许多收获:对STM32单片机的应用原理认识更加深刻,STM32单片机因其功能之强,适用范围之广而受到电子设计者的欢迎;关于我国现在灯光领域的发展现状有了一定理解,对于自动化和智能化如何应用在实际问题上有了自己的想法;经过原理图的设计、PCB板的绘制,元器件的购买,程序的编写,进一步熟悉了一个电子产品的开发过程。同时对所学的软件包括AltiumDesigner、KeilUV5、proteus等软件也有了更高的熟练度;在整个设计流程中我更是明白综合能力,和解决问题的能力的重要性。正如我仅仅在元器件购买方面出现纰漏,就对我整个电路功能完整性都产生了巨大影响;最重要的收获便是深刻了解了目前的短板诸如程序编写时难以将想法写成代码,PCB板绘制与焊接的经验不足等等。今后在这方面可以通过自主学习并设计一些作品锻炼自身的能力。
献国务院关于印发2030年前碳达峰行动方案的通知[A].中国企业改革发展2021蓝皮书[C].2021:473-483.刘江,柯勇.智能照明产业发展研究[J].质量与认证,2023,(12):59-61.国家发展和改革委员会就《中国逐步淘汰白炽灯路线图(征求意见稿)》向社会公开征求意见[J].能源与环境,2011,(06):101.肖春华,张洪涛.基于GPRS与SMS技术教室LED节能系[J].国外电子测量技术,2014,33(5):75-79.易金桥,黄勇,廖红华,等.热释电红外传感器及其在人员计数系统中的应用[J].红外与激光工程,2015,44(04):1186-1192.赵亮.跟我学51单片机(七)——LCD1602液晶显示模块[J].电子制作,2011,000(7):74-77HaoH,DaiF.Designofsmarthomesecuritysystembasedon52MCU[J].JournalofAdvancesinArtificialLifeRobotics,2021,1(4):199-203.LiB,LiZ.THEIMPLEMENTOFWIRELESSRESPONDERSYSTEMBASEDONRADIOFREQUENCYTECHNOLOGY[J].ActaElectronicaMalaysia,2018,2(1):15-17.陈敏.基于51单片机的多功能电子钟设计[J].轻工科技,2023,39(01):105-108.王善斌,范忠奇.基于FPGA的数字时钟设计与实现[J].科技创新与应用,2021,11(13):80-82.张峰.基于STM32的高校教室智慧照明系统的设计与实现[D].西安建筑科技大学,2018.附录附录1PCB图图37PCB图
附录2系统主程序(包括人员数量统计,PWM调光,光照强度等级信号采集等主控程序)main.c//头文件#include"stm32f10x.h"#include"GPIOLIKE51.h"#include"display.h"#include"ds1302.h"#include"key.h"#include"timer.h"#include"ADC.h"#include"iwdg.h"#defineIN1GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)//红外对管接口#defineOUT1GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10)//红外对管接口#defineAUTO_LEDBIT_ADDR(GPIOB_ODR_Addr,5) //自动模式灯接口#defineHAND_LEDBIT_ADDR(GPIOB_ODR_Addr,4)//手动模式灯接口#defineLAMP1BIT_ADDR(GPIOB_ODR_Addr,6)//照明灯接口#defineLAMP2BIT_ADDR(GPIOB_ODR_Addr,7)//照明灯接口#defineLAMP3BIT_ADDR(GPIOB_ODR_Addr,8)//照明灯接口#defineLAMP4BIT_ADDR(GPIOB_ODR_Addr,9)//照明灯接口intValue1; //人数charIN1_flag;//内触发标志位charOUT1_flag;//外触发标志位charMiao;//防止误触发延时3秒charnum; //PWM中断次数intpwm;charLight; //光线强度intdat; //AD值voidGPIO_Configuration(void){ GPIO_InitTypeDefGPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //*初始化GPIOA模块所需的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);//在时钟配置中打开复用时钟 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//对PA15PB3PB4引脚进行重映射 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10|GPIO_Pin_11; //选中管脚1011 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU; //上拉输入 GPIO_Init(GPIOB,&GPIO_InitStructure); //以上设结构体置应用到GPIOB GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_Init(GPIOB,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_Init(GPIOB,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_Init(GPIOB,&GPIO_InitStructure); LAMP1=1; LAMP2=1; LAMP3=1; LAMP4=1; AUTO_LED=0; //默认自动模式 HAND_LED=1; Hour_L=8; Hour_H=23;//定时时间默认在8-23点内有效}/************************************定时时间转化***********************************************************/voidOpen(void){ longNow; longSet_L,Set_H; Now=hour*3600+minute*60+second; //把实时时间化成秒为单位 Set_L=Hour_L*3600+Minute_L*60+Second_L; //把设置下限时间化成秒为单位 Set_H=Hour_H*3600+Minute_H*60+Second_H; //把设置上限时间化成秒为单位 if(Auto_flg==0) //自动模式 { if(Set_H>=Set_L) //上限大于下限,比如下限18点到上限23点 { if((Now>=Set_L)&(Now<=Set_H)) //实时时间在上下限时间范围内 { Timer=1; //进入定时模式 } if((Now<Set_L)|(Now>Set_H)) //实时时间不在范围内 { Timer=0; //退出定时模式,根据光线强度进行亮灭灯 } } if(Set_H<Set_L) //上限小于下限,比如下限18点到上限6点 { if(((Now>=Set_L)&&(Now<86400))||(Now<=Set_H)&&(Now>=0))//实时时间在上下限时间范围内24*3600=86400 { Timer=1; //进入定时模式 } else //实时时间不在范围内 { Timer=0; //退出定时模式,根据光线强度进行亮灭灯 } } }}voidPWM_Light(void) //PWM调光{ num++; //中断次数 if(num>9) // { num=0; } if(num<pwm) //前半周期开通 { if(Auto_flg==0) //自动模式 { if(Timer==1) //实时时间在上下限时间范围内 { if(Value1==0) { LAMP1=1; //全灭 LAMP2=1; LAMP3=1; LAMP4=1; } if((Value1>0)&(Value1<10)) { LAMP1=0; //亮一个灯 LAMP2=1; LAMP3=1; LAMP4=1; } if((Value1>=10)&(Value1<20)) { LAMP1=0; //亮二个灯 LAMP2=0; LAMP3=1; LAMP4=1; } if((Value1>=20)&(Value1<30)) { LAMP1=0; //亮三个灯 LAMP2=0; LAMP3=0; LAMP4=1; } if(Value1>=30) { LAMP1=0; //亮四个灯 LAMP2=0; LAMP3=0; LAMP4=0; } } else //实时时间不在范围内 { LAMP1=1; //全灭 LAMP2=1; LAMP3=1; LAMP4=1; } } if(Auto_flg==1) //手动 { if(Switch_num==1) //按下一次,开一盏灯 { LAMP1=0; LAMP2=1; LAMP3=1; LAMP4=1; } if(Switch_num==2) //按下二次,开二盏灯 { LAMP1=0; LAMP2=0; LAMP3=1; LAMP4=1; } if(Switch_num==3) //按下3次,开3盏灯 { LAMP1=0; LAMP2=0; LAMP3=0; LAMP4=1; } if(Switch_num==4) //按下4次,开4盏灯 { LAMP1=0; LAMP2=0; LAMP3=0; LAMP4=0; } if(Switch_num==5) //按下5次,开0盏灯 { LAMP1=1; LAMP2=1; LAMP3=1; LAMP4=1; } } } else //后半周期关闭 { LAMP1=1; //全灭 LAMP2=1; LAMP3=1; LAMP4=1; }}//=============================================================================//文件名称:Delay//功能概要:延时//参数说明:nCount:延时长短//函数返回:无//=============================================================================voidDelay(uintz) //延时约3ms{uintx,y; for(x=z;x>0;x--) for(y=5000;y>0;y--);}/*******************人数统计************************************************************/voidCount_Value(void){ if(IN1==0) { Delay(10); if(IN1==0) { while(!IN1); if(OUT1_flag==0) { IN1_flag=1;//防止误触发 } if(OUT1_flag==1) { Value1++; //人数增加 if(Value1>=999) //如果人数计数到999,变为最大999 Value1=999; OUT1_flag=0; //清零 IN1_flag=0; Miao=0; } } } if(OUT1==0) { Delay(10); if(OUT1==0) { while(!OUT1); if(IN1_flag==0) { OUT1_flag=1;//防止误触发 } if(IN1_flag==1) { Value1--; //人数减少 if(Value1<0) //如果人数计数小于0,变为最小0 Value1=0; IN1_flag=0; //清零 OUT1_flag=0; Miao=0; } } } }//=============================================================================//文件名称:main//功能概要:主函数//参数说明:无//函数返回:int//=============================================================================intmain(void){ GPIO_Configuration(); GPIO_Configuration_LCD(); Set_ADC_Init(); TIMER_Init(); TIMER4_Init(); NVIC_Config(); Delay(100); GPIO_Configuration_KEY(); ds1302_gpio_init(); //初始化ds1302端口 ds1032_read_realTime();//读取实时数据 IWDG_Configuration(); LCD_Initinal(); while(1) { KEY();//!按键控制 Count_Value();//人数统计 if(Adjust==0) //非调节模式下显示时间 { ds1032_read_realTime(); //读取此时时刻 Open(); //灯光控制 Write_3Value(0x40+2,Value1); //显示人数 if(TIM_GetITStatus(TIM4,TIM_IT_Update)==SET) //每0.5s读取一次 { TIM_ClearITPendingBit(TIM4,TIM_IT_Update); //清除定时器中断 ADC_RegularChannelConfig(ADC1,ADC_Channel_9,1,ADC_SampleTime_7Cycles5);//选取通道和采样周期 ADC_SoftwareStartConvCmd(ADC1,ENABLE); //使能指定的ADC的软件转换启动功能 dat=ADC_GetConversionValue(ADC1); //12位ADC的AD值为0-4095,0-2.2V的AD值则是0-2750平均分为10份 if(dat<150) Light=9; //根据采到的电压值给定光线强度,电压越高,光线强度越低,从最亮到最暗电压约是0-2.2V,平均分10份 if((dat>=150)&(dat<400)) Light=8; if((dat>=400)&(dat<650)) Light=7; if((dat>=650)&(dat<900)) Light=6; if((dat>=900)&(dat<1150)) Light=5; if((dat>=1150)&(dat<1400)) Light=4; if((dat>=1400)&(dat<1650)) Light=3; if((dat>=1650)&(dat<1900)) Light=2; if((dat>=1900)&(dat<2150)) Light=1; if(dat>=2150) Light=0; if((Auto_flg==0)&(Value1>0)&(Timer==1)) //自动模式下,处于定时时间内并且有人,根据光线情况自动调节亮度 { if(Light==9)pwm=0; if(Light==8)pwm=1; if(Light==7)pwm=2; if(Light==6)pwm=3; if(Light==5)pwm=4; if(Light==4)pwm=5; if(Light==3)pwm=6; if(Light==2)pwm=7; if(Light==1)pwm=8; if(Light==0)pwm=9; } if(((Auto_flg==0)&(Value1==0))|((Auto_flg==0)&(Timer==0))) //自动模式下,没人或不在定时时间内灯不亮 pwm=0; Week_dispaly(0x80+2,Light);//显示光线亮度等级 Week_dispaly(0x80+4,pwm); //显示亮度等级 if((IN1_flag==1)|(OUT1_flag==1))//红外对管有触发 {Miao++; if(Miao>=6) //0.5*6=3秒内无触发另一个,全部清零 { Miao=0; OUT1_flag=0; //清零 IN1_flag=0; } } } } IWDG_Feed();//10秒喂狗一次 } }voidTIM2_IRQHandler(void)//0.5ms定时器中断函数PWM调光{//判断TIM2更新中断是否发生if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET){ TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//清除定时器中断 PWM_Light();}}usart.h#ifndef__USART_H__#define__USART_H__#include"stm32f10x.h"#include"stm32f10x_usart.h"externintpwm; //脉宽参数#endif附录3LCD602显示程序模块display.c#include"display.h"#include"GPIOLIKE51.h"#definersBIT_ADDR(GPIOC_ODR_Addr,13)#definerwBIT_ADDR(GPIOC_ODR_Addr,14)#defineeBIT_ADDR(GPIOC_ODR_Addr,15)uchartable3[]=""; //清屏内容uchartable4[]="L:-|2000/00/00";uchartable5[]="C:000|00:00:000";//=============================================================================//文件名称:GPIO_Configuration//功能概要:LCDGPIO初始化//参数说明:无//函数返回:无//=============================================================================voidGPIO_Configuration_LCD(void){ GPIO_InitTypeDefGPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); //使能GPIOBAPB2外设时钟 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15; //选中管脚0110,即GPIOB0 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //最高输出50MHz GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //推挽输出 GPIO_Init(GPIOC,&GPIO_InitStructure); //以上设结构体置应用到GPIOB RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能GPIOAAPB2外设时钟 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_Speed=GPIO_Speed_50MHz; //最高输出50MHz GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //推挽输出 GPIO_Init(GPIOA,&GPIO_InitStructure); //以上设结构体置应用到GPIOA}voiddelay_LCD(uintz) //延时函数{ uintx,y; for(x=z;x>0;x--) for(y=500;y>0;y--);}voidwrite_com(ucharcom) //LCD1602写指令函数,根据数据手册的时序{ rw=0; delay_LCD(5); rs=0; delay_LCD(5); e=1; delay_LCD(5);// GPIO_Write(GPIOA,com); //把指令赋给GPIO口 GPIOA->ODR=GPIOA->ODR&0xff00|com;//低八位 delay_LCD(5); e=0; delay_LCD(5); }voidwrite_date(uchardate) //LCD1602写数据函数,根据数据手册的时序{ rw=0; delay_LCD(5); rs=1; delay_LCD(5); e=1; delay_LCD(5);// GPIO_Write(GPIOA,date); //把数据赋给P0口GPIOA->ODR=GPIOA->ODR&0xff00|date;//低八位 delay_LCD(5); e=0; delay_LCD(5); }voidLCD_Initinal(void) //LCD1602和定时器初始化函数{ ucharnum; e=0; //时序表e初始为0 write_com(0x38); //设置为16*2显示,5*7点阵,8位数据接口 write_com(0x0c); //设置光标 write_com(0x06); //光标自动加1,光标输入方式 write_com(0x01); //清屏 write_com(0x80); //设置初始显示位置 for(num=0;num<16;num++) //显示第一行内容 { write_date(table4[num]); delay_LCD(5); } write_com(0x80+0x40); for(num=0;num<16;num++) //显示第二行内容 { write_date(table5[num]); delay_LCD(5); } }voidWrite_Value(ucharadd,chardate) //括号里:第一个:参数的地址;第二个:参数的内容{ ucharshi,ge; shi=date/10; ge=date%10; write_com(0x80+add); write_date(0x30+shi); write_date(0x30+ge); }voidWrite_3Value(ucharadd,intdate) //括号里:第一个:参数的地址;第二个:参数的内容{ ucharbai,shi,ge; bai=date/100; shi=date%100/10; ge=date%10; write_com(0x80+add); write_date(0x30+bai); write_date(0x30+shi); write_date(0x30+ge); }voidWeek_dispaly(ucharadd,chardat) //第一个:参数的地址,第二个:参数的内容{ write_com(add); //要写的地址 write_date(0x30+dat); //十位的内容1602字符库} voidLCD_Display_String(unsignedcharline,unsignedchar*string){ //液晶屏显示内容,把要显示的内容写到对应的位置 unsignedchari; unsignedcharaddress=0; if(line==1) { address=0x80; //0X80是第1行的第1个位置,0x81第2位 } elseif(line==2) {address=0x80+0x40; //0X80+0x40是第2行的第1个位置,0X80+0x40+1是第2行第2位 } for(i=0;i<16;i++) { write_com(address); write_date(string[i]); address++; }}voidLCD_Display_PhoneNumber(unsignedcharline,unsignedchar*string){ //液晶屏显示内容,把要显示的内容写到对应的位置 unsignedchari; unsignedcharaddress=0; if(line==1) { address=0x80+2; //0X80是第1行的第1个位置,0x81第2位 } elseif(line==2) {address=0x80+0x40+2; //0X80+0x40是第2行的第1个位置,0X80+0x40+1是第2行第2位 } for(i=0;i<11;i++) { write_com(address); write_date(string[i]); address++; }}display.h#ifndef__DISPLY_H__#define__DISPLA_H__#include"stm32f10x.h"#defineucharunsignedchar#defineuintunsignedintexternvoidGPIO_Configuration_LCD(void);externvoiddelay(uintz);externvoidwrite_com(ucharcom);externvoidwrite_date(uchardate);externvoidLCD_Initinal(void);externvoidWrite_Value(ucharadd,chardate);externvoidLCD_Display_String(unsignedcharline,unsignedchar*string);externvoidWeek_dispaly(ucharadd,chardat);externvoidWrite_3Value(ucharadd,intdate);#endif附录4按键电路程序模块key.c#include"key.h"#include"GPIOLIKE51.h"#include"display.h"#include"ADC.h"#include"ds1302.h"#include"usart.h"#defineSELT GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8)#defineENTER GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15)#defineUP GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)#defineDOWN GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)#defineMODE GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)//切换按键接口#defineSWITCH GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11)//手动开关#defineLAMP1BIT_ADDR(GPIOB_ODR_Addr,6)//照明灯接口#defineLAMP2BIT_ADDR(GPIOB_ODR_Addr,7)//照明灯接口#defineLAMP3BIT_ADDR(GPIOB_ODR_Addr,8)//照明灯接口#defineLAMP4BIT_ADDR(GPIOB_ODR_Addr,9)//照明灯接口#defineAUTO_LEDBIT_ADDR(GPIOB_ODR_Addr,5) //自动模式灯接口#defineHAND_LEDBIT_ADDR(GPIOB_ODR_Addr,4)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版事业单位聘用合同书(二零二五年度)修订本3篇
- 2025年水库水面旅游开发合作协议3篇
- 2025年采摘果园休闲农业项目承包经营合同3篇
- 2025年铁路旅客承运人服务质量提升与旅客满意度合同3篇
- 二零二五版跨区域二手房产权转移协助合同
- 2025版乌笑与配偶离婚后子女教育费用支付调整协议3篇
- 万科物业2024全年服务细则协议版
- 三方借款协作协议2024年适用版版B版
- 美容院绿色环保材料采购与2025年度股份合作协议4篇
- 2025年版餐饮服务消费者免责条款协议3篇
- 招标师《招标采购项目管理》近年考试真题题库(含答案解析)
- 微生物组与唾液腺免疫反应-洞察分析
- 2024公共数据授权运营实施方案
- 2024年国家焊工职业技能理论考试题库(含答案)
- 《向心力》 教学课件
- 结构力学数值方法:边界元法(BEM):边界元法的基本原理与步骤
- 北师大版物理九年级全一册课件
- 2024年第三师图木舒克市市场监督管理局招录2人《行政职业能力测验》高频考点、难点(含详细答案)
- RFJ 006-2021 RFP型人防过滤吸收器制造与验收规范(暂行)
- 盆腔炎教学查房课件
- 110kv各类型变压器的计算单
评论
0/150
提交评论