基于ARM7多通道仪表数据采集实验_第1页
基于ARM7多通道仪表数据采集实验_第2页
基于ARM7多通道仪表数据采集实验_第3页
基于ARM7多通道仪表数据采集实验_第4页
基于ARM7多通道仪表数据采集实验_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

1、 物理与电子工程学院 嵌入式系统与应用设计性实验报告 题目 基于ARM7的多通道仪表数据采集实验 系 别 物理与电子工程学院 年 级 09 级 专 业 电子信息工程 班 级 1 学 号 160409210 学生姓名 师 骏 指导教师 浦 炜 实验时间 2012 .11 目 录引言2一 课题内容及目的3二 课题分析3三 系统设计4四 代码分析8五 实验结果10六 实验总结10参考文献12附 录13设计性实验报告成绩: 指导教师签名:23引言在实际应用中,常常需要对现场的设备进行监测,通过采集设备的运行参数随时了解、跟踪设备运行状态,进而对设备进行分析和诊断。传统的数据采集系统一般采用PC 加数据

2、采集卡,主要做法是将一块基于IAS 或PCI的板卡插入工业计算机或商用机上,将外部信号通过导线引至计算机,然后接入数据采集卡,通过定制的软件进行采集。但是采用数据采集卡的缺点是安装麻烦、易受机箱内环境的干扰,而且由于受计算机插槽数量和位置、中断资源的限制,不可能挂接很多设备。从未来的发展方向上看,数据采集系统的数据采集部分应朝着强实时、多参数、高精度方向发展;数据存储部分朝着大容量、微型化、便携式方向发展;数据传输部分朝着多通讯方式、远距离数据传输方向发展。一般的基于单任务顺序机制的单片机数据采集系统又很难胜任对于稳定性、实时性要求很高的场合。基于此,本设计了一种基于ARM7 处理器,采用了串

3、口、USB、以太网3 种与PC 机的通讯方式,以适应不同场合的需要。采用多任务编程方法,每个任务监视一路AD 转换, 每一路AD 的转换结果在液晶屏上用一个条形图的长短来表示,直观地显示每路模拟输入电压的大小。可以通过文本框给每路AD 设置警戒值,某路输入超出警戒线之后条形图中超出的部分会以闪动的方式显示。一 课题内容及目的采用多任务编程方法,每个任务监视一路AD 转换, 每一路AD 的转换结果在液晶屏上用一个条形图的长短来表示,直观地显示每路模拟输入电压的大小。可以通过文本框给每路AD 设置警戒值,某路输入超出警戒线之后条形图中超出的部分会以闪动的方式显示。并在数码管上对应的某通道的数值显示

4、当超过警戒线数值时,数字闪烁显示。二 课题分析数据采集系统置于被监控的设备处,通过传感器对设备的电压或者电流信号进行采样、保持,并送入A/D转换器变成数字信号,然后将该信号送到FIFO中。当FIFO中存放的数据到了一定数目时,由ARM7从FIFO中读出,然后通过ARM7的以太网接口送给上位机。多路采集通道经过模拟开关后再进入A/D转换器。CPLD是整个系统的控制核心,它控制采集通道的切换、A/D转换器的启/停、转换后的数据在FIFO中的存放地址发生器、产生中断请求以通知ARM7读取存放在FIFO中的数据等。三 系统设计1编写OnKey()函数,响应键盘消息。流程图如图1所示。1) 这里设置了两

5、个文本框,用来输入通道编号和该通道的警戒值,在键盘消息响应函数里针对两个文本框分别作出处理,只处理回车键和取消键,其他键由控件本身处理。程序里用变量EditNumber 指示当前要编辑的文本框控件;用变量input 指示该文本框控件是否处于输入编辑状态。以此决定回车键应该执行的功能。 2)当文本框控件不是编辑状态时,回车将使其进入编辑状态,在程序里用SetWndCtrlFocus( )函数将焦点转移到该控件并用SetTextCtrlEdit() 函数设置为编辑状态;当文本框正处于编辑状态时,回车将使其退出编辑状态,并将要编辑的文本框切换到另一个文本框控件,取消键的处理和这种情况类似。 3) 如

6、果当前要编辑的文本框是警戒值输入框,在编辑状态中回车确定后,所输入的通道编号以及警戒值就会保存在数组WarnningData 中,代码如下: WarnningData Unicode2Int(pChannelTextCtrl->text)=Unicode2Int(pValueTe xtCtrl->text); 图12编写绘图显示任务Display_Task, 绘制文本框和条形图等,并实现文本框编辑过程中和超过警戒值后的动画显示,其流程图为图2所示。图21)程序中用TextOut()函数显示文本框的提示信息,用数组edit 记录两个文本框是否处于编辑状态,用变量IsEdit 指示提示

7、信息是否显示。实际上,IsEdit这个变量在显示任务循环一次就改变一次状态,当IsEdit=1 时将提示信息擦掉,否则保持显示不变。这就是闪烁显示的原理,表示AD 转换结果的条形图超出警戒值的部分的闪烁也是这样实现的,随着任务的循环隔次的改变状态。 2)和变量IsEdit 的作用类似,warnningx是条形图闪烁的指示变量。当某路AD 转换的结果result_ADx 大于对应通道的警戒值Warnni ngDatax时,根据warnningx 的值决定条形图的长度是和result_ADx 对应还是和W arnningDatax对应,这样看起来条形图的长度是变化的,效果就是超过警戒线的那部分在闪

8、烁。 3)这里条形图实际上是一个实心矩形,用FillRect()函数填充。 5、编写4 路AD 采集任务ADx_Task。1)使用GetADresult()函数即可得到某路AD 输出的二进制代码。由于处理器的8路10 位AD 转换单元的最大输入电压是2.50V,所以实际电压值就是result_ADx=GetADresult(x)*2.50/1024;四 代码分析增加数码管显示功能的代码如下:ZLG7289_ENABLE();Delay(5);flah_flag=0xff; WriteSDIO(ZLG7289_CMD_DATA0|0);WriteSDIO(unsigned char)result

9、_AD0%10);Delay(1);WriteSDIO(ZLG7289_CMD_DATA0|1);WriteSDIO(0x80|(unsigned char)result_AD0/10);Delay(1);if(warnning0=1) flah_flag&=0xfc;WriteSDIO(ZLG7289_CMD_DATA0|2);WriteSDIO(unsigned char)result_AD1%10);Delay(1);WriteSDIO(ZLG7289_CMD_DATA0|3);WriteSDIO(0x80|(unsigned char)result_AD1/10);Delay(

10、1);if(warnning1=1) flah_flag&=0xf3;WriteSDIO(ZLG7289_CMD_DATA0|4);WriteSDIO(unsigned char)result_AD2%10);Delay(1);WriteSDIO(ZLG7289_CMD_DATA0|5);WriteSDIO(0x80|(unsigned char)result_AD2/10);Delay(1);if(warnning2=1) flah_flag&=0xcf;WriteSDIO(ZLG7289_CMD_DATA0|6);WriteSDIO(unsigned char)result

11、_AD3%10);Delay(1);WriteSDIO(ZLG7289_CMD_DATA0|7);WriteSDIO(0x80|(unsigned char)result_AD3/10);Delay(1);if(warnning3=1) flah_flag&=0x3f;WriteSDIO(ZLG7289_CMD_HIDE);WriteSDIO(255);Delay(1);WriteSDIO(ZLG7289_CMD_FLASH);WriteSDIO(flah_flag);Delay(1);首先先对数码管显示标志进行初始化,全设为“1”,然后通过WriteSDIO函数显示第一、第二两个数码

12、管,数码管一位个位,数码管二为十位,并且0x80显示小数点。当通路的显示值超过警戒值时,通过flah_flag&=0xfc还是0xfc,即数码管一二设为“0”,两管开始闪烁。以此类推,设置其余的四个数码管。五 实验结果 通过设置开发板上两个文本框,用来输入通道编号和该通道的警戒值,在键盘消息响应函数里针对两个文本框分别作出处理,只处理回车键和取消键,通过按回车键使文本框进入或退出编辑状态。假设设通路1的警戒值为10,那么当1路超出警戒线10之后条形图中超出的部分会以闪动的方式显示,并在数码管上对应的通道1的数值显示当大于10时,数字闪烁显示。六 实验总结不知不觉已经到了做设计性实验的时

13、候的,这次我选的是基于ARM7的多通道仪表数据采集实验,因为我前面几个都是做的ARM7的实验,所以我想选择基于ARM7的多通道仪表数据采集实验应该会比较的容易吧,不过我还是有点担心,因为一个人想把一个设计性的实验完全做完,是不太容易的,之前的实验都是按照老师的视频做的,而这次实验只有老师给的实验要求,其他的东西都需要自己独立操作完成,所以我们必须要将前面所掌握的知识融会贯通,并灵活运用,这样才能把这次实验做完。首先按照的实验要求,我开始在网上找资料,然后和做这个实验的同学讨论,终于有了一个比较的明确的思路,可是真正做的时候并不是那么简单的,总是遇到这样那样的问题,遇到问题就要解决,这就要自己的

14、实力,终于经过自己不懈的努力,终于把程序中的错误都改正过来了。这次实验使我明白了很多,光会有理论知识是不行的,我们要把理论知识和实践结合起来,这样才发挥了理论知识的用途。做实验的时候不能太急躁,要慢慢来,凡事都不能一气呵成的,都要经历一定的过程,途中总会遇到一些问题,遇到问题我们不能退缩,要勇敢面对,用自己的实力解决他,这样我们才会成长。参考文献1 田泽. 嵌入式系统开发与应用教程M . 北京:北京航空航天大学出版社,2005.32 周立功. ARM 嵌入式系统基础教程M . 北京:北京航空航天大学出版社,2005.3 吴明晖. 基于ARM 的嵌入式系统开发与应用M . 北京:人民邮电出版社,

15、2004.附 录实验代码main.c#include".ucos-iiincludes.h" /* uC/OS interface */#include ".ucos-iiaddosaddition.h"#include ".incdrv.h"#include <string.h>#include".incdrvad.h"#include "Zlg7289.h"#include "uhal.h"#include "44b.h"#pragma i

16、mport(_use_no_semihosting_swi) / ensure no functions that use semihosting extern int Zlg7289SIOBand;extern int Zlg7289SIOCtrl;#define ID_ChannelTextCtrl 101#define ID_ValueTextCtrl 102#define Draw_Wnd_ID 104PTextCtrl pChannelTextCtrl,pValueTextCtrl;float result_AD0,result_AD1,result_AD2,result_AD3;i

17、nt WarnningData4=33,33,33,33;int edit2=0,0;int flah_flag; /*任务定义*/OS_STK Main_StackSTACKSIZE*8=0, ; /Main_Test_Task堆栈void Main_Task(void *Id); /Main_Test_Task#define Main_Task_Prio 12OS_STK Display_Task_StackSTACKSIZE*8=0, ; /Main_Test_Task堆栈void Display_Task(void *Id); /Main_Test_Task#define Displa

18、y_Task_Prio 20OS_STK AD0_Task_StackSTACKSIZE*8=0, ; /Main_Test_Task堆栈void AD0_Task(void *Id); /Main_Test_Task#define AD0_Task_Prio 21OS_STK AD1_Task_StackSTACKSIZE*8=0, ; /Main_Test_Task堆栈void AD1_Task(void *Id); /Main_Test_Task#define AD1_Task_Prio 22OS_STK AD2_Task_StackSTACKSIZE*8=0, ; /Main_Test

19、_Task堆栈void AD2_Task(void *Id); /Main_Test_Task#define AD2_Task_Prio 23OS_STK AD3_Task_StackSTACKSIZE*8=0, ; /Main_Test_Task堆栈void AD3_Task(void *Id); /Main_Test_Task#define AD3_Task_Prio 24/*已经定义的OS任务*tcp监控任务11以太网物理层监控任务8触摸屏任务9键盘任务10lcd刷新任务59系统任务1/*事件定义*/OS_EVENT *Nand_Rw_Sem; /Nand_Flash读写控制权旗语OS_

20、EVENT *Uart_Rw_Sem; /Uart读写控制权旗语void initOSGUI()/初始化操作系统的图形界面initOSMessage();initOSList();initOSDC();initOSCtrl();initOSFile();int main(void)ARMTargetInit(); /开发板初始化OSInit(); /操作系统初始化Zlg7289_Reset();uHALr_ResetMMU();/复位MMULCD_Init(); /初始化LCD模块LCD_printf("LCD initialization is OKn");/向液晶屏输出

21、数据LCD_printf("320 x 240 Text Moden");initOSGUI();/初始化图形界面LoadFont();/调Unicode字库LoadConfigSys();/使用config.sys文件配置系统设置LCD_printf("Create task on uCOS-II.n");OSTaskCreate(Main_Task, (void *)0, (OS_STK *)&Main_StackSTACKSIZE*8-1, Main_Task_Prio);/ 创建系统任务OSTaskCreate(Display_Task,

22、(void *)0, (OS_STK *)&Display_Task_StackSTACKSIZE-1, Display_Task_Prio);/ 20OSTaskCreate(AD0_Task,(void *)0, (OS_STK *)&AD0_Task_StackSTACKSIZE-1, AD0_Task_Prio);OSTaskCreate(AD1_Task,(void *)0, (OS_STK *)&AD1_Task_StackSTACKSIZE-1, AD1_Task_Prio);OSTaskCreate(AD2_Task,(void *)0, (OS_STK

23、 *)&AD2_Task_StackSTACKSIZE-1, AD2_Task_Prio);OSTaskCreate(AD3_Task,(void *)0, (OS_STK *)&AD3_Task_StackSTACKSIZE-1, AD3_Task_Prio);OSAddTask_Init();/创建系统附加任务LCD_printf("Starting uCOS-II.n");LCD_printf("Entering graph mode.n");LCD_ChangeMode(DspGraMode);/变LCD显示模式为文本模式Init

24、Rtc();/初始化系统时钟Nand_Rw_Sem=OSSemCreate(1);/创建Nand-Flash读写控制权旗语,初值为1满足互斥条件/OSStart();/操作系统任务调度开始return 0;U8 onKey(int nkey, int fnkey)static BOOLEAN input=FALSE;static int EditNumber=1;if(EditNumber=1)switch(nkey)case 14:/OKif(!input)SetWndCtrlFocus(NULL, ID_ChannelTextCtrl);pChannelTextCtrl->text0

25、=0; /清空文本框SetTextCtrlEdit(pChannelTextCtrl, TRUE);DrawTextCtrl(pChannelTextCtrl);input=TRUE;edit0=1;elseSetTextCtrlEdit(pChannelTextCtrl, FALSE);DrawTextCtrl(pChannelTextCtrl);input=FALSE;edit0=0;EditNumber=2;return TRUE;case 16:/CancelSetTextCtrlEdit(pChannelTextCtrl, FALSE);input=FALSE;edit0=0;Edi

26、tNumber=2;return TRUE;else if(EditNumber=2)switch(nkey)case 14:/OKif(!input)SetWndCtrlFocus(NULL, ID_ValueTextCtrl);pValueTextCtrl->text0=0; /清空文本框SetTextCtrlEdit(pValueTextCtrl, TRUE);DrawTextCtrl(pValueTextCtrl);input=TRUE;edit1=1;elseSetTextCtrlEdit(pValueTextCtrl, FALSE);DrawTextCtrl(pValueTe

27、xtCtrl);input=FALSE;edit1=0;EditNumber=1;WarnningData Unicode2Int(pChannelTextCtrl->text)=Unicode2Int(pValueTextCtrl->text);return TRUE;case 17:/CancelSetTextCtrlEdit(pValueTextCtrl, FALSE);DrawTextCtrl(pValueTextCtrl);input=FALSE;edit1=0;EditNumber=1;return TRUE;return FALSE;void Main_Task(vo

28、id *Id) /Main_Test_TaskPOSMSG pMsg;init_ADdevice(20,ADCCON_SLEEP);for(;)POS_Ctrl pCtrl;pMsg=WaitMessage(0);if(pMsg->pOSCtrl)if(pMsg->pOSCtrl->CtrlMsgCallBk)(*pMsg->pOSCtrl->CtrlMsgCallBk)(pMsg);elseswitch(pMsg->Message)case OSM_KEY:pCtrl=GetCtrlfromID(NULL, GetWndCtrlFocus(NULL);if

29、(pCtrl->CtrlType=CTRLTYPE_WINDOW)if(PWnd)pCtrl)->style&WND_STYLE_MODE)=WND_STYLE_MODE)/焦点是有模式窗口,消息直接传递过去OSOnSysMessage(pMsg);break;if(onKey(pMsg->WParam,pMsg->LParam) )break;default:OSOnSysMessage(pMsg);break;DeleteMessage(pMsg);OSTimeDly(200);void Display_Task(void * Id) /Main_Test_

30、TaskPDC pdc;structRECT ChannelTextCtrl_Rect,ValueTextCtrl_Rect,Draw_Wnd_Rect;char Channel_Caption_810="Channel:"char Value_Caption_810="Value:"char Draw_Wnd_Caption_8="Draw Window"char vol_8="Vol"char chn_8="Chn"char chn0_8="0"char chn1_8=&

31、quot;1"char chn2_8="2"char chn3_8="3"char vol_10_8="10"char vol_20_8="20"char vol_30_8="30"u16 Channel_Caption_1610;u16 Value_Caption_1610;U16 Draw_Wnd_Caption_1620;u16 vol_165;u16 chn_165;u16 chn0_162;u16 chn1_162;u16 chn2_162;u16 chn3_162;u16

32、vol_10_163;u16 vol_20_163;u16 vol_30_163;Wnd Draw_Wnd;PWnd pDraw_Wnd;int warnning4=1,1,1,1;BOOLEAN IsEdit=0;pdc=CreateDC();pDraw_Wnd=&Draw_Wnd;strChar2Unicode(Draw_Wnd_Caption_16, Draw_Wnd_Caption_8);strChar2Unicode(Channel_Caption_16, Channel_Caption_8);strChar2Unicode(Value_Caption_16, Value_C

33、aption_8);strChar2Unicode(chn_16, chn_8);strChar2Unicode(vol_16, vol_8);strChar2Unicode(chn0_16, chn0_8);strChar2Unicode(chn1_16, chn1_8);strChar2Unicode(chn2_16, chn2_8);strChar2Unicode(chn3_16, chn3_8);strChar2Unicode(vol_10_16,vol_10_8);strChar2Unicode(vol_20_16,vol_20_8);strChar2Unicode(vol_30_1

34、6,vol_30_8);SetRect(&ChannelTextCtrl_Rect, 10,50,55,75);SetRect(&ValueTextCtrl_Rect, 10,125,55,150);SetRect(&Draw_Wnd_Rect, 74, 9, 301, 216);pChannelTextCtrl=CreateTextCtrl(ID_ChannelTextCtrl, &ChannelTextCtrl_Rect, FONTSIZE_MIDDLE, CTRL_STYLE_FRAME, NULL,NULL);pValueTextCtrl=CreateT

35、extCtrl(ID_ValueTextCtrl, &ValueTextCtrl_Rect, FONTSIZE_MIDDLE, CTRL_STYLE_FRAME, NULL,NULL);pDraw_Wnd=CreateWindow(Draw_Wnd_ID, &Draw_Wnd_Rect, FONTSIZE_SMALL,WND_STYLE_MODELESS, Draw_Wnd_Caption_16, NULL);ClearScreen();TextOut(pdc, 55, 10, vol_16, TRUE, FONTSIZE_SMALL);TextOut(pdc, 290, 21

36、5, chn_16, TRUE, FONTSIZE_SMALL);TextOut(pdc, 116, 215, chn0_16, TRUE, FONTSIZE_SMALL);TextOut(pdc, 166, 215, chn1_16, TRUE, FONTSIZE_SMALL);TextOut(pdc, 216, 215, chn2_16, TRUE, FONTSIZE_SMALL);TextOut(pdc, 266, 215, chn3_16, TRUE, FONTSIZE_SMALL);TextOut(pdc, 60, (int)(205-1*200/3.3), vol_10_16, T

37、RUE, FONTSIZE_SMALL);TextOut(pdc, 60, (int)(205-2*200/3.3), vol_20_16, TRUE, FONTSIZE_SMALL);TextOut(pdc, 60, (int)(205-3*200/3.3), vol_30_16, TRUE, FONTSIZE_SMALL);DrawTextCtrl(pChannelTextCtrl);DrawTextCtrl(pValueTextCtrl);for(;)TextOut(pdc, 10, 35, Channel_Caption_16, TRUE, FONTSIZE_SMALL);TextOu

38、t(pdc, 10, 110, Value_Caption_16, TRUE, FONTSIZE_SMALL);if(edit0=1)if(IsEdit=1)FillRect(pdc, 10, 35, 60, 45, GRAPH_MODE_NORMAL, COLOR_WHITE);IsEdit=0;elseIsEdit=1;if(edit1=1)if(IsEdit=1)FillRect(pdc,10,110,60,120, GRAPH_MODE_NORMAL, COLOR_WHITE);IsEdit=0;elseIsEdit=1;DrawWindow(pDraw_Wnd);MoveTo(pdc

39、, 75, 15);LineTo(pdc, 80,10);LineTo(pdc, 85, 15);MoveTo(pdc,80 , 10);LineTo(pdc, 80, 210);LineTo(pdc, 300, 210);MoveTo(pdc, 295, 205);LineTo(pdc, 300, 210);LineTo(pdc, 295, 215);MoveTo(pdc, 80, (int)(210-1*200/3.3);LineTo(pdc, 300, (int)(210-1*200/3.3);MoveTo(pdc, 80, (int)(210-2*200/3.3);LineTo(pdc

40、, 300, (int)(210-2*200/3.3);MoveTo(pdc, 80, (int)(210-3*200/3.3);LineTo(pdc, 300, (int)(210-3*200/3.3);if(result_AD0<=WarnningData0)FillRect(pdc,110,(int)(210-result_AD0*20/3.3),130,210,GRAPH_MODE_NORMAL, COLOR_BLACK);elseif(warnning0=1) FillRect(pdc,110,(int)(210-result_AD0*20/3.3),130,210,GRAPH

41、_MODE_NORMAL,COLOR_BLACK);warnning0=0;elsewarnning0=1;FillRect(pdc,110,(int)(210-WarnningData0*20/3.3),130,210, GRAPH_MODE_NORMAL,COLOR_BLACK);if(result_AD1<=WarnningData1)FillRect(pdc,160,(int)(210-result_AD1*20/3.3),180,210, GRAPH_MODE_NORMAL,COLOR_BLACK);elseif(warnning1=1)FillRect(pdc,160,(in

42、t)(210-result_AD1*20/3.3),180,210, GRAPH_MODE_NORMAL,COLOR_BLACK);warnning1=0;elsewarnning1=1;FillRect(pdc,160,(int)(210-WarnningData1*20/3.3),180,210, GRAPH_MODE_NORMAL,COLOR_BLACK);if(result_AD2<=WarnningData2)FillRect(pdc,210,(int)(210-result_AD2*20/3.3),230,210,GRAPH_MODE_NORMAL, COLOR_BLACK)

43、;elseif(warnning2=1)FillRect(pdc,210,(int)(210-result_AD2*20/3.3),230,210, GRAPH_MODE_NORMAL,COLOR_BLACK);warnning2=0;elsewarnning2=1;FillRect(pdc,210,(int)(210-WarnningData2*20/3.3),230,210, GRAPH_MODE_NORMAL,COLOR_BLACK);if(result_AD3<=WarnningData3)FillRect(pdc,260,(int)(210-result_AD3*20/3.3),280,210,GRAPH_MODE_NORMAL, COLOR_BLACK);elseif(warnning3=1)FillRect(pdc,260,(int)(210-result_AD3*20/3.3),280,210, GRAPH_MODE_NORMAL,COLOR_BLACK);warnning3=0;elsewarnning3=1;FillRect(pdc,260,(i

温馨提示

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

评论

0/150

提交评论