单片机课程设计论文电子时钟.doc

上传人:sccc 文档编号:4847998 上传时间:2023-05-19 格式:DOC 页数:50 大小:714.52KB
返回 下载 相关 举报
单片机课程设计论文电子时钟.doc_第1页
第1页 / 共50页
单片机课程设计论文电子时钟.doc_第2页
第2页 / 共50页
单片机课程设计论文电子时钟.doc_第3页
第3页 / 共50页
单片机课程设计论文电子时钟.doc_第4页
第4页 / 共50页
单片机课程设计论文电子时钟.doc_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《单片机课程设计论文电子时钟.doc》由会员分享,可在线阅读,更多相关《单片机课程设计论文电子时钟.doc(50页珍藏版)》请在三一办公上搜索。

1、广西民族大学 第二次课程设计电子时钟 论文题目: 学院(系): 物理与电子工程学院 专 业 : 通信工程 年级班级 : 2007级 学 号 : 学生姓名 : 指导教师 : 摘要:基于STC12C5A32S2单片机设计编程实现走时基本功能,并加于ad采样、测温、串口通信、24c02掉电保护等功能。使用单片机的ad口采样光敏电阻和滑动电阻器两端的电压,测温度传感器18b20的数据采集。能够在lcd1602实现时钟、日期、闹钟、亮度、温度的显示。可以利用按键进行调时、调日期和调节闹钟。关键词:STC12C5A32S2 lcd1602 ad采样 18b20 24c02 Abstract: STC12C

2、5A32S2 single chip design the basic functions of travel time programming, and increase in ad sampling, temperature measurement, serial communication, 24c02 power-down protection. I use the SCM sample ad photosensitive resistor and the voltage across the sliding resistor, temperature sensor 18b20 mea

3、sured data into the microcontroller. Can be achieved in lcd1602 clock, date, alarm clock, light, temperature display. Can use the button to transfer, the transfer date and the regulation clock.Key words: STC12C5A32S2 lcd1602 ad sample 18b20 24c02目录1 设计任务与要求51.1 设计任务51.2 功能分析52 硬件设计2.1 芯片资料62.1.1 芯片介

4、绍62.1.2 芯片管脚图72.2 原理图82.3 PCB图92.4 按键102.5 lcd显示模块102.6 24c02掉电保护112.7 外围模块122.7.1 ad采样122.7.2 温度传感器18b20123 软件设计133.1 主程序13 3.1.1 流程图133.1.2 源程序143.2 显示模块14 3.2.1 显示位置分布143.2.2 lcd1602流程图153.2.3 显示子程序153.3 按键控制16 3.3.1 各功能键设定16 3.3.2 按键扫描程序163.3.3 源程序173.4 外围模块软件设计17 3.4.1 ad采样模块 183.4.2 温度传感器18b20

5、193.5 掉电保护193.6 串口通信204系统测试22 4.1 系统硬件调试224.2 系统软件调试235 参考文献246 附录251设计任务与要求 1.1、设计任务1、使用1602液晶模块作为显示器件;2、平时按24小时制显示当前时间,要求使用定时中断完成,每日误差不得大于1秒;3、当前时间可调(只调时、分即可);4、系统意外断电时,当前时钟的时和分数应能保存,以便使系统下次上电时能从上次断电时间开始走时;(EEPROM 24C02使用单片机内部资源)5、能设置3个定时闹铃点,每个点分别可调,并分别可以设置应否起作用;6、定时闹铃时间到且该闹铃点被设定为“起作用”时,应能发出持续约1分钟

6、的闹铃声,而在发出闹铃的过程中,要求可以被按键终止;闹铃过程不得影响正常的走时;7、所有闹铃点数据应能断电保存;8、能分别根据串口收到的“获取当前时间”、“获取当前电压值”和“获取当前光亮度值”命令,分别通过串口向外发送“当前时间” 、“当前电压值”和“当前光亮度值”,以便使用串行设备观察这些参数;9、显示温度、光亮值10、显示合理、操作简单明了。1.2 功能分析1 电源提供方案为了使模块稳定工作,必须有可靠的电源。这里有两种电源方案方案一:采用独立的稳压电源。此方案的优点是稳定可靠,且有各种成熟电路可供选用,缺点是各模块采用独立的电源,会使系统复杂,且可能影响电路电平。方案二:采用单片机控制

7、模块提供的电源,此方案的有点是系统简明,节约成本,缺点是输出功率不高;方案对比:方案一比较复杂,成本高,而方案二就能满足本次设计,因而采用了第二种方案。2 显示界面方案该系统要求完成即使,状态灯等功能,基于上述原因,考虑了二种方案:方案一:采用数码管显示。该方案只能显示有限的符号和数码字符,无法胜任题目要求方案二:采用点阵式LCD显示,这种方案实现比较复杂,需要完成大量的软件工作,但功能强大能方便的显示各种英文字符 ,图形等。方案对比:方案二较形象,为了能完成题目的要求,采用了方案二实现系统的显示功能。3输入方案题目要求系统能手动设灯亮的时间,紧急情况处理,我们也考虑了两种方案方案一:直接在I

8、O口线上接上按键开关,此种方案设计精简和优化了电路,但是通过按键扫描的方式,判断按键,此种方案如果按键扫描次数少,会导致漏判断按键,使得按键使用不灵敏方案二:所剩余的口资源比较多,我们使用四个按键同过二极管接到P3.2,外部中断0的口,五个按键S0,S1,S2,S3,S4,S5均采样外部中断接法。当一有按键按下 即能产生外部中断,及时处理按键。方案对比:按键均采用外部中断接法的目的是使按键反应灵敏,能够快速准确的控制。2硬件设计2.1芯片资料 2.1.1 STC12C5A32S2芯片1:STC12C5A32S2芯片是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新

9、一代8051单片机,指令代码完全兼容传统的8051,但速度快812倍内部集成MAX810专用复位电路,2路PWM,8路告诉10位A/D转换(250K/s),针对电机控制,强干扰场合。1. 增强型 8051 CPU,1T,单时钟/机器周期,指令代码完全兼容80512. 工作电压:5.5V3.3V(5V单片机)3. 工作频率范围:035MHz,相当于普通8051的 0420MHz4. 用户应用程序空间 8K/16K/20K/32K/40K/48K/52K/60K/62K字节。5. 片上集成1280字节RAM6. 通用I/O口(36/40/44个)复位后为:准双向口/弱上拉(普通8051传统I/O口

10、)可设置成四种模式:准双向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏每个I/O口驱动能力均可达到20mA,但整个芯片最大不要超过55Ma7. ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器可通过串口(P3.0/P3.1)直接下载用户程序,数秒即可完成一片8. 看门狗9. 内部集成MAX810专用复位电路(外部晶体12M以下时,复位脚可直接接1K电阻到地)10. 外部掉电检测电路:在P4.6口有一个低压门槛比较器 5V单片机为1.32V 误差为+/-5%,3.3V单片机为1.30V误差为+/-3%11. 时钟源:外部高精度晶体/时钟,内部R/C振荡器(温漂为+

11、/-5%到+/-10%以内)用户在下载用户程序时,可选择是使用R/C振荡器还是外部晶体/时钟常温下内部R/C振荡器频率为:5.0V单片机为12. 共有4个16位定时器 两个与传统8051兼容的定时器/计数器,16位定时器T0/T1,没有定时器2,但有独立的波特率发生器做串行通讯的波特率发生器 再加上2路PCA模块可实现2个16位定时器13. 2个时钟输出口,可由T0的溢出在P3.4/T0输出时钟,可有T1的溢出在P3.5/T1输出时钟14. 外部中断I/O口7路,传统的下降沿中断或低电平触发中断,并新增支持上升沿中断PCA模块,POWER Down模式可由外部中断唤醒 INT0/P3.2 IN

12、T1/P3.3 T0/P3.4 T1/P3.5 RXD/P3.0 CCP0/P1.3(也通过寄存器设置到P4.2),CCP1/P1.4(也可通过寄存器设置到P4.3)15. PWM(2路)/PCA(可编程计数器阵列,2路)也可用来当2路D/A使用 也可用来再实现2个定时器也可用来再实习2个外部中断(上升沿中断/下降沿中断均可分别或同时支持16. A/D转换,10位精度ADC,共8路,转换速度可达250K/S(每秒钟25万次)17. 通用全双工异步串行口(UART),由于STC12系列是高速的8051,可再用定时器或PCA软件实现串口18. STC12C5A60S2系列有双串口,后缀有S2标志的

13、才有双串口,RXD2/P1.2(可通过寄存器设置到P4.2),TXD2/P1.3(可通过寄存器设置到p4.3)19. 工作温度范围:-40+85(工业级)/075(商业级)20. 封装:DIP-40,LQFP-44,LQFP-48 I/O口不够时,可用2到3根普通I/O口线外接 74HC164/165/595(均可级联)来扩展I/O口 还可用A/D做按键扫描来节省I/O,或者用双CPU,三线通信,还多了串口。2.1.2 STC12C5A32S2芯片管脚图2.2 原理图2.3 PCB图2.4按键所有按键都经过二极管接到单片机的INT0口,再分别接到各个I/O口,当按键一按下的时候便可产生中断,增

14、加按键的灵敏度。各个按键所接的对应I/O口:K1-P3.4,K2-P3.5,K3-P3.6,K4_P3.72.5 LCD液晶显示模块引脚接口说明表第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电

15、平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。液晶显示硬件接线如下图所示2.6 24c02的用法介绍AT24c02是ATMEL公司生产的AT24C序列E2PROM.它的存储容量为256*8.采用此芯片可以解决断电保存问题,可对所储数据保存100年,并可多次擦写擦写次数可达10万次以上。在一些应用系统设计中,有时需要对数据进行掉电保护。若采用普通存储器,在掉电时需要用电池供电,并需要在硬件上增加掉电检测电路,但存在电池不可靠以及扩展存储芯片占用单片机过多口线的

16、缺点。采用具有I2C总线接口的串行E2PROM器件可很好地解决掉电数据保存问题,且硬件电路简单。2.4.1 AT24c02引脚配置各引脚的功能如下:1,2,3(A0、 A1、 A2)可编程地址输入端。4(GND)电源第。5(SDA)串行数据输入输出端。6 (SCL) 串行时钟输入端。7(WP)写保护输入端,用于硬件数据保护。当其为低电平时,可以对整个存储器进行正常的读/写操作操作:当其为高电平时,存储器具有写保护功能,但是读操作不受影响。8(VCC)电源争端。24c02接线图:2.7 外围模块2.7.1 Ad采样模块 采样到的值转换成电压值:U=ad采样值*Ucc/10232.7.2 温度传感

17、器18b20DS18B20的使用方法: 由于DS18B20采用的是1Wire总线协议方式,即在一根数据线实现数据的双向传输,而对AT89S51单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。 由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回

18、送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。 DS18B20的复位时序 DS18B20的读时序 对于DS18B20的读时序分为读0时序和读1时序两个过程。 对于DS18B20的读时隙是从主机把单总线拉低之后,在15秒之内就得释放单总线,以让DS18B20把数据传输到单总线上。DS18B20在完成一个读时序过程,至少需要60us才能完成。 DS18B20的写时序 对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。 对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45u

19、s之间能够正确地采样IO总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。硬件连接图:3软件设计3.1主程序3.1.1 流程图开始 初始化从24c02读出数据装载初值等待中断显示程序从24c02读出存进去的值按键扫描是否到10s?是否产生中断?定时器0的中断服务程序End3.1.2 源程序参见附录时钟.c文件3.2 显示模块3.2.1 显示位置分布时钟 时:分:秒 温度值日期:年/月/日闹钟1 闹钟2闹钟3通道0 采样值 转化值 通道1 采样值 转化值 3.2.2 Lcd1602流程图定义变量Lcd送显示数据函数显示位置返回Lcd初始化子函数显示两位整数显示字

20、符串显示4位整数显示浮点数源程序参见附录lcd-1602.h3.2.3 显示子程序 判断闹铃&响铃方式显示闹钟调节的显示程序显示时间和日期子程序 源程序:参考附录show-all.h头文件3.3 按键控制3.3.1 各按键功能设定定义:K1=P3.4,K2=P3.5,K3=P3.6,K4=P3.7方案一、K1 功能键 设置闹钟(K1=13)、提示是否停止定时器0(K1=4)、设置时钟(K1=5)、设置日期(K1=6),开始走时并返回(K1=0) K2 设置时钟下,分别选中时、分、秒 设置闹钟下,分别选中闹钟时、分、闹钟开关 K3 加(开) K4 减(关)方案二、K1 功能键 设置闹钟(K1=1

21、3)、提示是否停止定时器0(K1=4)、设置时钟(K1=5)、设置日期(K1=6),开始走时并返回(K1=0) K2 实现时加或是年加 K3实现分加或是月加 K4实现关掉闹钟或是日加在k1没有按下时,按下k2,做显示界面的变换,按下k4可以随时停止在闹铃的闹钟。方案对比:方案1可以实现需改变值的加减,比较具有实用性,本来是首选,可是实现起来有两个问题:第一,光标显示困难;第二:程序本身较为复杂。方案二欠缺减的功能,若是再加上一个按键k5亦可实现减的功能,且程序较为简单,不容易出错。因而,选用了方案二做此次项目的按键控制。3.3.2 按键扫描流程图延时10,防抖改变标志位寄存器初始化是否有按键?

22、检测是否有按键按下?检测按键是否释放?返回 按键扫描程序 按键标志位:如果k1按下,keybit=1,kongzhi1+ 如果k2按下且keybit=0,xianshi+ 如果k2按下且keybit=1,flag=1 如果k3按下且keybit=1,flag=2 如果k4按下且keybit=1,flag=3 如果k5按下,可以做加减法的交替2.2.3 源程序参考附录key_work.h3.4 外围模块软件设计3.4.1 Ad采样模块返回第n通道进行多次ADC采样后取平均值延时第n通道ADC采样函数显示位置和采样值换算24c02通道初始化源程序参见附录get_ad.h3.4.2 温度传感器18b

23、20返回读出1位字节向18b20写指令读取寄存器中存储的温度数据显示指令读出1位函数向18b20写一个字节18b20初始化源程序参见附录1820.h3.5 掉电保护24c023.5.1 流程图开始信号返回应答信号写字节读字节写数据读数据停止信号24c02初始化3.5.2 源程序参见附录1820.h3.6 串口通信3.6.1 流程图返回启动T1、TR1、ES串口中断服务程序装载初值TH1,TL1确定串行口控制方式确定T1的工作方式Flag=1?3.6.2 源程序/=串口通信=void chuan_kou() ad_0=0; ad_1=0; ad_0=ADC_GET(0); ad_1=ADC_GE

24、T(1); if(flag_do=1) flag_do=0; ES=0; /关串口中断 TI=1; switch(flag_on)case 1:puts(黄萍生begainn);break;case 2:printf(time:%d:%d:%dn,shi,fen,sec);break;/时间显示case 3:printf(data:%d/%d/%dn,year,month,day);break; /日期显示case 4:printf(Temp:%c%c%c%c.%c Cn,flagdat,disdata0,disdata1,disdata2,disdata3);break; /温度显示case

25、 5:printf(bright:%f V;huabian:%f Vn,ad_1*4.59/1023,ad_0*4.59/1023);break; /显示光敏和滑变两端电压值case 6:puts(errorn); /显示错误 while(!TI); TI=0; /发送完毕,TI手动清0 ES=1; /开中断void ser() interrupt 4 /串口中断 RI=0; /串行中断收到数据后,RI被置1,需要清零以便能响应下次串行中断 a=SBUF; /取出数据 flag_do=1; /置标志位=1,告诉主函数有新数据到if(a=1) flag_on=1; else if(a=2) fl

26、ag_on=2; else if(a=3) flag_on=3; else if(a=4) flag_on=4; else if(a=5) flag_on=5; else if(a=6) flag_on=6; 4系统软硬件的调试4.1 系统硬件调试设计好电路PCB之后,经过打印、热转印、制板、焊接元件后就可以进行硬件的调试了。首先检查电路上有否漏焊、开路和短路的现象;然后给电路板供5V的直流电压,观察电路板上的电源指示灯是否正常之后,把单片机,液晶显示插入插槽中,下载线连接到电路板上,下载测试程序到单片机中,观察芯片工作是否正常,如果芯片正常工作则说明系统板正常,不正常则说明系统硬件有问题。下

27、载线的作用是把编译好的单片机程序下载到目标单片机中以及提供电源。我们用的下载程序软件,STC_ISP.exe 。如下图所示下载程序之前先选择第一步在MUC Typ 空中选择 STC12C5A32S2芯片,第二步 在 打开文件前清0缓冲 打勾, 第三步 选择COM口 设置最高波特率为115200 第四步 选择软件的默认设置即可 第五步 先在每次下载前重新调入已打开缓冲区文件 前的小框框打勾。完成这些设置之后就可以把程序下载到我们的系统板中。4.2 系统软件调试本系统使用的软件开发环境是keil。Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编

28、相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。在keil中,源代码的输入,编译通过之后就可以进行软件调试了。程序经过编译之后,编译产生的hex文件,下载到实物板中,通过观察LCD查看显示时间是否正确,检查灯亮的时间,灯的跳转顺序是否符合我们预想,按键是否起到相应的作用。 经调试,程序基本上能达到以上设计任务的要求,可以实现时间显示,温度显示,ad采样电压显示,闹钟功能,串行通信功能,并扩展了日期功能。时间,闹

29、钟,日期可以通过按键实现修改,闹钟状态可以有按键控制,ad采样得到的电压值与实际的值存在一定的误差,温度传感器工作正常,在串口助手可以实现发送和接受功能,日期可以区分大小月和闰平年。5参考文献新概念51单片机C语言教程.入门、提高、开发-郭天祥著单片机原理及接口技术-李全利 迟荣强著单片机接口c语言开发技术-龚运新等著6附录主程序:时钟4.c#include#include#include #includedefine.h#includelcd_1602.h#include24c02.h#include1820.h#includeget_ad.h#includeshow_all.h#inclu

30、dekey_work.hvoid main(void)lcd_int(); /液晶初始化ADC_int(0); /ADC通道0初始化ADC_int(1); /ADC通道1初始化init_24c02(); /24c02初始化 /24C02初始化shi=read_add_24c02(2); fen=read_add_24c02(3); /读出24c02的单元地址2-12中保存的数据并赋给变量时间、闹钟nshi1=read_add_24c02(4);nfen1=read_add_24c02(5);alarm1=read_add_24c02(6);nshi2=read_add_24c02(7);nfe

31、n2=read_add_24c02(8);alarm2=read_add_24c02(9);nshi3=read_add_24c02(10);nfen3=read_add_24c02(11);alarm3=read_add_24c02(12);if(shi=24|fen=60|nshi1=24|nfen1=60|nshi1=24|nfen1=60|nshi1=24|nfen1=60) /防止第一次读时还没写过数据进入24C02而乱码shi=0;fen=0;nshi1=0;nfen1=0;alarm1=0;nshi2=0;nfen2=0;alarm2=0;nshi3=0;nfen3=0;alar

32、m3=0; TCON=0X02; TMOD=0X21;TH0=(65536-50000)/256; /装载初始值,12MHZ晶振50ms数为50000TL0=(65536-50000)%256;TH1=0xfd; /装载初始值,波特率是9600TL1=0xfd;IE=0X81;/打开总中断獠恐卸?ET0=1;TR0=1;TR1=1;SM0=0;/SCON寄存器设置串行口工作方式1:一帧10位、1起始位8数据位1停止位SM1=1;ES=1;/打开串口中断REN=1;/允许串行接收位,若置1,则只有接收到有效停止位时,RI才置1while(1) key_work1();alarm_out();ch

33、uan_kou();wendu=read_temp();if(xianshi=0&keybit=0) /显示时间和亮度 showtime(); ds1820disp(wendu); if(xianshi=1&keybit=0)/显示闹钟 show_alarm();if(xianshi=2&keybit=0)/显示ad采样 ad_out();if(sec%10=0) /存储数据开始write_add_24c02(2,shi);delay_ms(20);write_add_24c02(3,fen);delay_ms(20);/存时间write_add_24c02(4,nshi1);delay_ms

34、(20);write_add_24c02(5,nfen1);delay_ms(20);write_add_24c02(6,alarm1);delay_ms(20);/存闹钟1write_add_24c02(7,nshi2);delay_ms(20);write_add_24c02(8,nfen2);delay_ms(20);write_add_24c02(9,alarm2);delay_ms(20);/存闹钟2write_add_24c02(10,nshi3);delay_ms(20);write_add_24c02(11,nfen3);delay_ms(20);write_add_24c02

35、(12,alarm3);delay_ms(20);/存闹钟3void timer0() interrupt 1 /使用了中断1 TH0=(65536-50000)/256; /装载初始值,11.0592MHZ晶振一个机器周期为1.085us TL0=(65536-50000)%256; / year3=year/4; year4=year/100; if(year3=0&year4=!0) flag_y=1; else flag_y=0; if(stopbit=0) num+; if(num=18) num=0; sec+; if(sec=60) sec=0; fen+;alarm01=ala

36、rm02=alarm03=1;if(fen=60) fen=0; shi+; if(shi=24) shi=0; day+; if(month=1|month=3|month=5|month=7|month=8|month=10|month=12)&day=32) day=1; month+; else if(month=4|month=6|month=9|month=11)&day=31) day=1; month+; else if(month=2&flag_y=1&day=30) day=1; month+; else if(month=2&flag_y=0&day=29) day=1;

37、 month+; if(month=12) month=1; year+; /=串口通信=void chuan_kou() ad_0=0; ad_1=0; ad_0=ADC_GET(0); ad_1=ADC_GET(1); if(flag_do=1) flag_do=0; ES=0; /关串口中断 TI=1; switch(flag_on)case 1:puts(huangpingsheng begainn);break;case 2:printf(time:%d:%d:%dn,shi,fen,sec);break;/时间显示case 3:printf(data:%d/%d/%dn,year,

38、month,day);break; /日期显示case 4:printf(Temp:%c%c%c%c.%c Cn,flagdat,disdata0,disdata1,disdata2,disdata3);break; /温度显示case 5:printf(bright:%f V;huabian:%f Vn,ad_1*4.59/1023,ad_0*4.59/1023);break; /显示光敏和滑变两端电压值case 6:puts(errorn); /显示错误 while(!TI); TI=0; /发送完毕,TI手动清0 ES=1; /开中断void ser() interrupt 4 /串口中断 RI=0; /串行中断收到数据后,RI被置1,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号