收藏 分销(赏)

基于-单片机超温报警设计.doc

上传人:二*** 文档编号:4518338 上传时间:2024-09-26 格式:DOC 页数:45 大小:297KB
下载 相关 举报
基于-单片机超温报警设计.doc_第1页
第1页 / 共45页
本文档共45页,全文阅读请下载到手机保存,查看更方便
资源描述
- - 学校代码: 序 号: 本 科 毕 业 论文 题目:基于单片机的超温报警设计 学 院: 姓 名: 学 号: 专 业:电子信息工程 年 级: 指导教师: 二O 年 月 - word.zl - - 基于单片机的超温报警设计 摘要 本设计设计了一款以AT89S52、DS18B20芯片为核心的温度数字显示报警系统。系统采用AT89S52单片机进展智能控制,利用DS18B20芯片实现对温度的测量,通过单片机处理进展报警点的设置,用液晶显示器LCD1602显示以串口传送数据,显示实时温度,通过三个按键的按键次数来决定温度阈值,按键1按一次设置上限温度,按键1按两次设置下限温度,按键1按三次温度设置完成,按键2按下是当前温度值加1,按键3按下是当时温度减1。当DS18B20测量的温度值不在设定温度阈值围,单片机将驱动蜂鸣器报警。 关键词:AT89S52,超温报警,DS18B20,LCD显示器 Microcontroller-based over-temperature alarm design Abstract The design designs to AT89S52 and DS18B20 chip as the core temperature digital display and alarm system.The system uses the AT8952 microcontroller for intelligent control,using DS18B20 chip implement temperature measurement,setting the alarm pointbymicrocontroller,using with theLCD1602 displaysdata with serial transmission,andLCD1602 displaysthe real-time temperature,number of times by three keys to determine temperature threshold,setting the maximum temperature by keying Button 1 once,setting the minimum temperature Key Button 1 twice, pleting the setment of temperature by key Button 1 three times.when the button 2 key once,the temperature value plus 1;when the button 3 key once,the current temperature value minus 1.when the measured temperature by DS18B20 is not within the value of the temperature threshold,the microcontroller will drive the buzzer alarm. Key words:AT89S52,Over-temperature alarm,DS18B20,LCD Monitor 目录 1概述1 2 系统原理设计2 2.1 超温报警控制原理2 2.2 系统功能方框图2 3 系统硬件原理及其设计3 3.1 单片机与各模块连接工作原理3 3.2 复位电路8 3.3 晶振电路8 3.4 DS18B20数据采集电路9 3.5 温度显示模块10 3.6 报警模块11 3.7 温度设置模块11 4 系统软件设计12 4.1 程序流程图12 4.2 程序12 5 结论26 参考文献27 致28 附录:超温报警系统总图29 - word.zl - - 1 概述 温度是一种最根本的环境参数,人们的生活环境与温度息息相关,温度测量也被人们所异常关注因此,研究温度的测量方法和装置具有重要意义,温度测控技术也在各个领域应用越来越广泛采用单片机对温度进展控制,不仅具有控制方便和组态简单的优点,而且可以提高被控温度的技术指标。本设计介绍了一款由单片机AT89S52和新型的智能集成温度传感器DS18B20以及LCD1602显示器等部件实现的温度测量及报警系统同时在设计方面做了功能的扩展,开关按键是用来调节温度,功能较强,可以设置上下限报警温度,且测量准确误差小,单片机可把由DS18B20读来的数据利用软件来进展处理,从而把数据传输到显示模块,实现实时温度显示,还有语音报警功能对温度实施监测,即当温度超过设置的最高温度或者低于给定的最低温度时,系统将驱动蜂鸣器发声报警。 2系统原理设计 2.1 超温报警控制原理 系统是对温度的监控。首先,用户预先通过温度设定模块按键输入温度报警值到程序中,该值作为系统阈值。温度传感器DS18B20将监测值传输给AT89S52单片机,单片机将DS18B20测量的温度值与预先设定的温度值T进展比拟,当单片机比拟监测到的数值超出所设定阈值时,驱动蜂鸣器报警。 2.2 系统功能方框图 超温报警器原理框图如图2-1所示。整个系统由AT89S52单片机、温度设置模块、温度显示模块、DS18B20数据采集模块、报警器模块组成。单片机主要负责承受来自DS18B20数据,对数据进展比照处理,通过单片机处理控制温度显示模块和报警器模块。温度显示模块和报警器模块是执行来自单片机指令并反应结果给用户。 单 片 机 温度设置模块 DS18B20 温度显示 报警器 图2-1原理框图 3系统硬件原理及其设计 3.1 单片机与各模块连接工作原理 3.1.1 AT89S52单片机 1. 主要性能 与MCS-51单片机产品兼容、8K字节在系统可编程Flash存储器、1000次擦写周期、全静态操作:0Hz~33Hz、三级加密程序存储器、32个可编程I/O口线、三个16位定时器/计数器八个中断源、全双工UART串行通道、低功耗空闲和掉电模式、掉电后中断可唤醒、看门狗定时器、双数据指针、掉电标识符。 图3-1 AT89S52双列直插封装方式引脚图 2. 功能特性描述 AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。AT89S52具有以下标准功能:8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断构造,全双工串行口,片晶振及时钟电路。另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停顿工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM容被保存,振荡器被冻结,单片机一切工作停顿,直到下一个中断或硬件复位为止。8位微控制器8K字节在系统可编程Flash。   〔1〕P0口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1〞时,引脚用作高阻抗输入。当外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0具有部上拉电阻。在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。   〔2〕P1口:P1口是一个具有部上拉电阻的8位双向I/O口,P1输出缓冲器能驱动4个TTL 逻辑电平。对P1端口写“1〞时,部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于部电阻的原因,将输出电流〔IIL〕。此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入〔P1.0/T2〕和时器/计数器2的触发输入〔P1.1/T2EX〕,具体如下所示。在flash编程和校验时,P1口接收低8位地址字节。   引脚号第二功能   P1.0 T2〔定时器/计数器T2的外部计数输入〕,时钟输出   P1.1 T2EX〔定时器/计数器T2的捕捉/重载触发信号和方向控制〕   P1.5 MOSI〔在系统编程用〕   P1.6 MISO〔在系统编程用〕 P1.7 SCK〔在系统编程用〕 〔3〕P2口:P2口是一个具有部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。对P2端口写“1〞时,部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于部电阻的原因,将输出电流〔IIL〕。在外部程序存储器或用16位地址读取外部数据存储器〔例如执行MOVX DPTR〕时,P2口送出高八位地址。在这种应用中,P2口使用很强的部上拉发送1。在使用8位地址〔如MOVX RI〕外部数据存储器时,P2口输出P2锁存器的容。在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。   〔4〕P3口:P3口是一个具有部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。对P3端口写“1〞时,部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于部电阻的原因,将输出电流〔IIL〕。P3口亦作为AT89S52特殊功能〔第二功能〕使用,如下所示。在flash编程和校验时,P3口也接收一些控制信号。   端口引脚第二功能   P3.0 RXD(串行输入口)   P3.1 TXD(串行输出口)   P3.2 INTO(外中断0)   P3.3 INT1(外中断1)   P3.4 TO(定时/计数器0)   P3.5 T1(定时/计数器1)   P3.6 WR(外部数据存储器写选通)   P3.7 RD(外部数据存储器读选通)   此外,P3口还接收一些用于FLASH闪存编程和程序校验的控制信号。   〔5〕RST——复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将是单片机复位。   〔6〕ALE/PROG——当外部程序存储器或数据存储器时,ALE〔地址锁存允许〕输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当外部数据存储器时将跳过一个ALE脉冲。   对FLASH存储器编程期间,该引脚还用于输入编程脉冲〔PROG〕。   如有必要,可通过对特殊功能存放器〔SFR〕区中的8EH单元的D0位置位,可制止ALE操作。该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE制止位无效。   〔7〕PSEN——程序储存允许〔PSEN〕输出是外部程序存储器的读选通信号,当AT89S52由外部程序存储器取指令〔或数据〕时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当外部数据存储器,将跳过两次PSEN信号。   〔8〕EA/VPP——外部允许,欲使CPU仅外部程序存储器〔地址为0000H-FFFFH〕,EA端必须保持低电平〔接地〕。需注意的是:如果加密位LB1被编程,复位时部会锁存EA端状态。   如EA端为高电平〔接Vcc端〕,CPU那么执行部程序存储器的指令。 FLASH存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。 〔9〕电源引脚——Vcc和Vss引脚。 Vcc接+5V电源,Vss接地。 〔10〕时钟引脚——XTAL1和XTAL2引脚。 XTAL1接外部晶体的1个引脚,该引脚部是1个反相放大器的输入端,这个反相放大器构成了片振荡器,如果采用外接晶体振荡器时,此引脚应接地。 XTAL2接外部晶体的另一端,该引脚部接至部反相放大器的输出端,假设采用外部时钟振荡时,该引脚接收时钟振荡的信号,即把此信号直接接到部时钟发生器的输入端。 3.1.2 单片机与各模块连接 AT89S52单片机P3.7引脚与温度传感器DS18B20的DQ引脚相连,作为温度信号的输入/输出,其P2.0引脚与报警电路的连接进展信号的通讯,其P0.0~P0.7引脚与显示电路的主芯片1602的D0~D7数据线相连来控制LED显示,其P1.0与P1.1引脚与温度设置模块相连接,以便用来控制系统的温度设置。系统原理图如图3-2所示。 图3-2 系统原理图 3.2复位电路 复位电路的根本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。 本系统的复会电路电平方式的按键手动复位方式,是通过RST端经电阻与电源Vcc接通而实现的。C取10uF,R取10KΩ。其复位电路与单片机连接图如图3-3所示。 图3-3复位电路 3.3 晶振电路 AT89S52部有一个用于构成振荡器的高增益反相放大器,该高增益反相放大器的输入端为芯片引脚XTAL1,输出端为引脚XTAL2。这两个引脚跨接石英晶体振荡器和微调电容,就构成一个稳定的自己振荡器,如图3-4所示是AT89S52部时钟方式的振荡器电路。取C1=C2=30pF,晶振为12MHz。 图3-4晶振电路 3.4DS18B20数据采集电路 DS18B20是由美国DALLAS半导体公司生产最新单线数字式温度传感器,主要特性如下:可实现对-55℃到+125℃围的温度测量,并且测量温度的误差在±0.5℃,实际系统的分辨率可单独设定,并且保存在EEPROM中,即使断电也能够保存;现场温度的测量值通过串行通信的方式传输,即“单线总线〞的数字方式传输;系统供电电压容许围大,可在3V到5.5V的围波动。DS18B20总共三个引脚,一个引脚为电源地GND,另一个为外接电源端VDD,剩下一个DQ为数字信号输入/输出端。 DS18B20的部构造如图3-5所示,主要包括寄生电源电路、64位只读存储器ROM和单线接口、存储器和控制逻辑、存放中间数据的高速暂存存储器、温度传感器、报警上限存放器TH、报警下限存放器TL、配置存放器和8位CRC循环冗余校验码发生器。 图3-5DS18B20根本组成 与传统的热敏电阻相比,DS18B20能过直接读出被测温度并且可根据实际要去通过简单的编程实现9~12位的数字值读数方式。可以分别在93.75ms和750ms完成9位和12位的数字量,并且从DS18B20读出的信息或写入DS18B20的信息仅需一个口线〔单线接口〕读写。温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。因而使用DS18B20可是系统构造更趋简单,可靠性更高。由于DS18B20采用单总线接口方式,所以它与单片机只需一根接口线即可,即只需要把DS18B20的DQ线与单片机的一根接口线即可,系统DQ线与单片机P3.7口连接。 3.5温度显示模块 选用1602字符型液晶模块,它是目前功控系统中使用最为广泛的液晶屏之一。1602字符型液晶模块是点阵型液晶,驱动方便,经编码后显示容多样化。系统的输入模块采用中断扫描4×4矩阵键盘,相比定时扫描方式,提高了MCU的使用效率。 液晶显示模块具有体积小、功耗低、显示容丰富、超薄轻巧等优点,在袖珍式仪表和低功耗应用系统中得到广泛的应用。目前字符型液晶显示模块已经是单片机应用设计中最常用的信息显示器件。LCD1602液晶显示模块可以显示两行,每16个字符,采用单+SV电源供电,外围电路配置简单,价格廉价,具有很高的性价比。 表3-1 LCD1602的主要技术参数: 显示容量 16×2个字符 芯片工作电压 4.5~5.5V 工作电流 2.0mA(5.0V) 模块最正确工作电压 5.0V 字符尺寸 2.95×4.35(WXH)mm 表3-2 LCD1602接口信号说明: 编号 符号 引脚说明 编号 符号 引脚说明 1 VSS 电源地 9 D2 Data I/O 2 VDD 电源正极 10 D3 Data I/O 3 VL 液晶显示偏压信号 11 D4 Data I/O 4 RS 数据/命令选择端〔H/L〕 12 D5 Data I/O 5 R/W 读/写选择端〔H/L〕 13 D6 Data I/O 6 E 使能信号 14 D7 Data I/O 7 D0 Data I/O 15 BLA 背光源正极 8 D1 Data I/O 16 BLK 背光源负极 D0~D7为1602的数据线,它与单片机的P0口相连,R6~R13为上拉电阻,R14为LCD比照度调节电阻。RS、R/W、E为控制口线,分别与AT89S52的P2.4、P2.3、P2.2相连接,实时显示温度。 3.6 报警模块 本设计中所设计的报警电路较为简单,由一个自我震荡型蜂鸣器和PNP型晶体管组成。蜂鸣器额定电流IB≤30mA,而对于AT89S52单片机,P2.0口的灌电流为1.6mA,拉电流为60μA,由此可见,仅靠单片机的P2.0口电流是不能驱动蜂鸣器的,必须使用集晶体管放大电路,为了使单片机消耗的功率更小,所以使用PNP型晶体管9012。 3.7 温度设置模块 为了使系统更具有通用性,系统通过温度设置模块设定用户所需要的报警上限和下限报警温度值,其原理是通过三个按键的按键次数来决定温度值,当S1按下时,系统开场设置温度,当S2按下一次那么使报警温度值加1,直到用户所需的温度值为止,S3的作用与S2相反,它用于设置下限报警温度值。 4系统软件设计 4.1 程序流程图 程序启动后,首先调用DS18B20和LCD1602模块初始化程序,然后调用温度采集模块,借用DS18B20部模数转换的时间,调用温度值转换模块,将温度值转换成BCD码,送入AT89S52单片机处理,驱动LCD实时显示温度和超温报警。程序流程图如图4-1所示。 开场 LCD1602初始化DS18B20初始化 温度采集 送AT89S52处理 LED显示 报警 是否超温 N Y 图4-1程序流程图 4.2 程序 #include<reg52.h> //包含reg52.h文件 #include<intrins.h> //包含intrins.h文件 #define uchar unsigned char //定义uchar代替unsigned char #define uint unsigned int //定义uint代替unsigned int sbit DQ=P3^7;//DQ定义为P3口位7 sbit lcden=P2^2;//lcden定义为P2口位2 sbit lcdrs=P2^4;//lcdrs定义为P2口位4 sbit lcdrw=P2^3;//lcdrw定义为P2口位3 sbit beep=P2^0;//beep定义为P2口位0 sbit set=P1^0;//set定义为P1口位0 sbit up=P1^1;//up定义为P1口位1 sbit down=P1^2;//down定义为P1口位2 uint temp,a,b;//定义temp,a,b为无符号整型 uchar num;//定义num为无符号字符型 uchar key=0;//定义key为无符号字符型,key的初始值为0 uchar g;//定义g为无符号字符型 uchar bai,shi,ge,maxshi,maxge,minshi,minge;//定义变量 uchar data temp_data[2]={0x00,0x00};//读出温度暂放 uchar data display[5]={0x00,0x00,0x00,0x00,0x00};//显示单元数据,共4个数据和一个运算暂用 uchar code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};//定义数组ditab[16] uint data data1[2]={0x32,0x00}//无符号数组uint data1[ ]被定义为data存储类型 uchar code table1[ ] = {" WEN KONG "} ;//定义数组table1[ ] uchar code table2[ ] = {" WENDU: . C "} ;//定义数组table2[ ] uchar code table3[ ]={"Set Temperature"} ;//定义数组table3[ ] uchar code table4[]={"SANGXIAN: . C"} ;//定义数组table4[ ] uchar code table5[]={"XIAXIAN: . C"} ;//定义数组table5[ ] uchar code warn[]={"WARNING WARNING "}; //定义数组table6[ ] // /*****************11us延时函数*************************/ void delay(uint t) { for(;t>0;t--); } /*****************1ms延时函数*************************/ void delaylcd(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void write_(uchar ) //定义函数write_,给LCD写命令 { lcdrs=0; //低电平写命令 P0=; //写入命令 delaylcd(2); //延时2ms lcden=1; //LCD使能端置高电平 delaylcd(2); //延时2ms lcden=0; //LCD使能端置低电平 } void write_data(uchar date) //定义函数write_data,写LCD数据 { lcdrs=1; //高电平写数据 P0=date; //写入数据 delaylcd(2); //延时2ms lcden=1; //LCD使能端置高电平 delaylcd(2); //延时2ms lcden=0; //LCD使能端置低电平 } void displayminmax() //定义函数displayminmax,第1行显示温度上下阈值 { uchar i; write_(0x80); //设置光标位置为第1行第1位 maxshi=data1[0]/10; // maxshi为上限温度十位 maxge=data1[0]%10; // maxge为上限温度个位 minshi=data1[1]/10; // minshi为下限温度十位 minge=data1[1]%10; // minge为下限温度个位 write_data(0x30+minshi); //显示下限温度的十位 write_data(0x30+minge); //显示下限温度的个位 write_data(0xdf); //显示下限温度℃--->上限温度℃ write_data(0x43); write_data(0x2d); write_data(0x2d); write_data(0x2d); write_data(0x3e); write_data(0x30+maxshi); //显示上限温度的十位 write_data(0x30+maxge); //显示上限温度的个位 write_data(0xdf); write_data(0x43); for(i=0;i<4;i++) { write_data(0x20); //显示四个空格 } } void initdisplay() //定义函数initdisplay,显示2行字符 { displayminmax(); //调用displayminmax函数 write_(0x80+0x40); //设置光标位置,从第2行第1位开场写 for(num=0;num<16;num++) //显示十六位字符,即 WENDU: . C { write_data(table2[num]); delaylcd(1); } } void init()//LCD初始化 { lcden=0; //LCD使能端为低电平 lcdrw=0; //LCD读写端为低电平 write_(0x38); //设置数据总线为8位,字符字体为5×7,显示2行 write_(0x0c); //开显示 write_(0x06); //读写一个字符后,地址指针及光标加一,且光标加一整屏显示不移动 write_(0x01); //清屏 initdisplay(); //调用函数initdisplay(),显示温度 } /****************DS18B20复位函数************************/ ow_reset(void) { char presence=1; while(presence) { while(presence) { DQ=1;_nop_();_nop_();//从高拉倒低 DQ=0; //单片机将DQ拉低电平 delay(50); //550 us DQ=1;//拉高总线 delay(6); //66 us presence=DQ; //presence=0 复位成功,继续下一步 } delay(45); //延时500 us presence=~DQ; } DQ=1; //拉高电平 } // // /****************DS18B20写命令函数************************/ //向1-WIRE 总线上写1个字节 void write_byte(uchar val) { uchar i; for(i=8;i>0;i--) //从18B20移出一个字节 { DQ=1;_nop_();_nop_(); //从高拉到低 DQ=0;_nop_();_nop_();_nop_();_nop_();//延时5 us DQ=val&0x01;//最低位移出,向其间写一位 delay(6);//延时66 us val=val/2;//右移1位,准备写下一位数据 } DQ=1; delay(1); } // /****************DS18B20读1字节函数************************/ //从总线上取1个字节 uchar read_byte(void) //读DS18B20的字节 { uchar i; uchar value=0; for(i=8;i>0;i--) { DQ=1;_nop_();_nop_();//2us value>>=1; //移位,准备存放下一次数据 DQ=0;_nop_();_nop_();_nop_();_nop_();//4 us DQ=1;_nop_();_nop_();_nop_();_nop_();//4 us if(DQ)//读取数据 value|=0x80; //读取到的数据为1 delay(6); //66 us } DQ=1; return(value); //返回value值 } // /****************读出温度函数************************/ // read_temp() //DS18B20读取温度 { ow_reset(); //总线复位 delay(200); //延时220us write_byte(0xcc); //发命令,跳过读序列号的操作 write_byte(0x44); //发转换命令, 启动温度转换 ow_reset(); //复位 delay(1); //延时 write_byte(0xcc); //发命令 write_byte(0xbe); //读取温度存放器等〔共可读9个存放器〕前两个就是温度 temp_data[0]=read_byte(); //读温度值的低字节 temp_data[1]=read_byte(); //读温度值的高字节 temp=temp_data[1]; temp<<=8; temp=temp|temp_data[0]; // 两字节合成一个整型变量。 return temp; //返回温度值 } work_temp(uint tem) //温度处理函数 { uchar n=0; if(tem>6348) //温度值正负判断 {tem=65536-tem;n=1;} //负温度求补码,标志位置1 display[4]=tem&0x0f; //取小数局部的值 display[0]=ditab[display[4]]; //存入小数局部显示值 display[4]=tem>>4;// 取中间八位,即整数局部的值 display[3]=display[4]/100; // 取百位数据暂存 display[1]=display[4]%100; // 取后两位数据暂存 display[2]=display[1]/10; // 取十位数据暂存 display[1]=display[1]%10; // 取各位数据暂存 } void write_1602() //温度写给LCD1602 { write_(0x80+0x40+8); //设置光标位置,第2行第9位 if(display[3]==1) //假设百位数为1那么显示百位 write_data(0x30+display[3]); else write_(0x80+0x40+9);//否那么设置光标位置为第2行第10位 write_data(0x30+display[2]);//写十位数据 write_data(0x30+display[1]);//写个位数据 write_(0x80+0x40+12
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服