课程设计-基于STC89C52单片机的时钟计时器的设计说明书.doc

上传人:西安人 文档编号:3292374 上传时间:2019-08-08 格式:DOC 页数:28 大小:238.51KB
返回 下载 相关 举报
课程设计-基于STC89C52单片机的时钟计时器的设计说明书.doc_第1页
第1页 / 共28页
课程设计-基于STC89C52单片机的时钟计时器的设计说明书.doc_第2页
第2页 / 共28页
课程设计-基于STC89C52单片机的时钟计时器的设计说明书.doc_第3页
第3页 / 共28页
课程设计-基于STC89C52单片机的时钟计时器的设计说明书.doc_第4页
第4页 / 共28页
课程设计-基于STC89C52单片机的时钟计时器的设计说明书.doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《课程设计-基于STC89C52单片机的时钟计时器的设计说明书.doc》由会员分享,可在线阅读,更多相关《课程设计-基于STC89C52单片机的时钟计时器的设计说明书.doc(28页珍藏版)》请在三一文库上搜索。

1、湖南人文科技学院课程设计报告课程名称:单片机原理及应用课程设计设计题目: 时钟计时器 系 别: 通信与控制工程系 专 业: 电子信息工程 班 级: 08级二班 学生姓名: 学 号: 08409206 08409249 起止日期: 2010年12月19日 2010年12月26日指导教师: 教研室主任: 指导教师评语: 指导教师签名: 年 月 日成绩评定项 目权重成绩周杰王世伟1、设计过程中出勤、学习态度等方面0.22、课程设计质量与答辩0.53、设计报告书写及图纸规范程度0.3总 成 绩 教研室审核意见:教研室主任签字: 年 月 日教学系审核意见: 主任签字: 年 月 日24摘 要时钟计时器在现

2、在应用场合非常的广泛,近年来,随着科学技术的进步和时代的发展,人们对时钟的功能和精度提出了越来越高的要求,各种时钟的设计也越来越重要。本设计就是应用单片机强大的控制功能制作而成的多功能时钟,此次课程设计是以STC89C52为主芯片,结合8255芯片,6段LED数码管显示器及蜂鸣器等组成一个简单的多功能时钟计时器,具有时、分、秒的显示及调整功能。采用24小时制,时间显示格式为时、分、秒,并能整点提醒(蜂鸣),并有定时闹钟、秒表计时等功能。通过STC89C52的定时中断来设置时间并用LED数码管显示出来。本设计的一大特点就是在硬件设计中采用实时时钟芯片来实现计时,大大简化了硬件电路,并用C语言编程

3、,从而使设计更加简便易行。经调试,经过按键能实现本次设计要求的时间的调时、闹钟的设定及秒表计时等功能。关键词:时钟;定时闹钟;秒表;单片机目 录设计要求11总体设计方案论论证与对比11.1 方案一11.2 方案二11.3 综合分析22 单元硬件模块设计22.1 DS1302时钟模块22.2 键盘输入设定模块32.3 数码管显示模块42.4 定时模块62.5秒表模块63 系统软件工作流程图63.1 主程序63.2 DS1302实现时间子程序73.3 秒表子程序94 系统功能调试及结果分析94.1 硬件调试94.2 软件调试94.3 结果分析105 详细仪器清单106 总结与思考及致谢11参考文献

4、13附录一 电路原理图14附录二 系统程序15时钟计时器设计要求(1)能显示24小时制时间的小时、分、秒,能整点提醒(蜂鸣);(2)能通过按键设置时间,设置复位;(3)能通过按键设置定时的闹铃(蜂鸣);(4)能通过按键设置秒表计时。1总体设计方案论论证与对比1.1 方案一STC89C52单片机内部带有定时/计数功能,此定时功能是通过对外部晶振的脉冲进行计数,从而达到计时功能,只要使用11.0592的晶振就能实现零误差的计时,因此可以利用此功能实现计时,方案一方框图见图1。蜂鸣键盘数码管STC89C52芯片图1 STC89C52单片机内部定时/计数器实现时钟1.2 方案二DS1302是美国DAL

5、LAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。工作电压宽达2.55.5V。采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后备电源进行电流充电的能力。方案二框图见图2。蜂鸣DS1302芯片STC89C52芯片键盘8255芯片数码管图2 利用DS1302芯片实现时钟1.3 综合分析根据本设计的要求,要实现一般的时钟功能和秒表功能,如果利用方案一,同时用T0做一般的

6、时钟计时中断和秒表计时,这样在实现秒表的时,时钟的时间计时就会被停下,方案一也可以利用T0做时钟计时中断,用T1做秒表计时中断,但考内到中断的优先级别,因为T0和T1不能同时响应,所以在运行秒表时时间也会停止运行,而在方案二中,利用单片机强大的控制功能,控制DS1302来实现时钟,利用STC89C52单片机内部带有的定时/计数功能实现秒表,这样做资源方面利用的系统资源少,在功能方面不但避免了方案一中实现秒表时需要停止时钟这一缺点,而且还有在系统掉电的情况下,利用DS1302特点,利用备用电池继续给DS1302继续供电,让时钟继续运行。综合两方案的优缺点,方案二为最佳。2 单元硬件模块设计本设计

7、的电路系统比较庞大,其总电路见附录一。以下为各硬件模块的设计。2.1 DS1302时钟模块DS1302芯片的特性介绍:DS1302有主电源/后备电源双电源引脚:Vcc1在单电源与电池供电的系统中提供低电源,并提供低功率的电磁备份;Vcc1在双电池系统中提供主电源。在这种运行方式中,Vcc1里连接到后备电源,以便在没有主电源的情况下能保存时间信息以及数据。DS1302由Vcc1或Vcc2中较打大者供电。当Vcc2大于(Vcc1+0.2V)时,Vcc2给DS1302供电;当Vcc2小于Vcc1时,DS1302由Vcc1供电。各引脚的功能为:1:Vcc2:5V电源。当Vcc2Vcc1+0.2V时,由

8、Vcc2向DS1302供电,当Vcc2 Vcc1时,由Vcc1向DS1302供电;2、3:X1、X2 是外接晶振脚 (32.768KHZ的晶振);4:地(GND);5:CE/RST:复位脚;6:I/O:数据输入输出口(双向);7:SCLK:串行时钟,输入;8:Vcc1:备用电池端。DS1302芯片图见图3。图3 DS1302芯片图2.2 键盘输入设定模块在单片机系统中键盘中按钮数量较多,为了减少I/O口的占用,常常将按钮排列成矩阵形式。矩阵式键盘又称行列式键盘,有4个行线和4个列线,组成44行列结构可构成16个按键,组成一个键盘。比直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显。因此

9、适用于按键较多的场合。判断键盘中有无按下:将全部行线置为低电平,然后检测列线的状态。只要有一列电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平与四跟行线相交叉的四个按钮之中。若有列线均为高电平,则键盘无键按下。其键盘硬件图见图4。图4 键盘示意图 判断闭合键盘所在的位置:在确认有键盘按下后,即可进入确定具体闭合键的过程。其办法是:依次将行线置为低电平,即在置某根行线为低电平,其它线为高电平。在确定某跟行线为低电平后,再逐次检测列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按钮就是闭合的按钮,最后返回键值。按键功能表见表1表1 按键功能表按键值功能0时间小时的设置,闹铃小

10、时设置键1时间分的设置,闹铃分的设置键2秒表转换、清零键3秒表计时开始、停止,闹铃转换键4时间复位显示键2.3 数码管显示模块单片机上面有一排6段LED数码管,每个数码管的8段是由芯片8255的PB口控制亮灭,每个数码管的公共脚分别由8255的PA0-PA5经三极管扩流后进行控制,数码管是笔画排序,单片机中的数码管是共阳极的,当公共脚接上电源正极,笔画脚通过一个220欧姆电阻接负极,对应的笔画就会点亮。8255芯片控制数码管电路图见图5。图5 8255控制数码管电路图显示数字0-9的8位二进制码见表2。表2 数码管段选亮灭显示码数字十六进制二进制GCdpDEBFA00xA01010000010

11、xBB1011101120x620110001030x2A,0010101040x390011100150x2C0010110060x240010010070xBA1011101080x200010000090x2800101000注:“0”对应笔画为点亮,“1”对应笔画为熄灭。要在某位数码管上显示一个数字,首先把待显示数字的显示码送给8255的PB口,接着选中要显示的位。例如:要在开发板中最左边的数码上显示一个0,则需要先把0的显示码0xA0送8255的PB口,接着PA0把需要显示的位赋0(低电平),随后让单片机保持这个值不变(比如让单片机进入死循环,如此就可以实现刚提出的要求)。打开电源,

12、下载时钟程序,通过动态扫描,即可实现时间的显示。2.4 定时模块DS1302时钟芯片包括实时时钟/日历和31字节的静态RAM,采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。此外,DS1302有主电源、后备电源引脚:VCC在单电源与电池供电的系统中提供地点远,并提供低功率的电池备份;VCC2在双电源系统中提供主电源。在这种运用方式中,VCC1连接到后备电源,以便在没有主电源的情况下能保存信息及数据。为了充分利用这些优点,本次设计采用以下思路实现定时功能:通过按键调用写DS1302时钟芯片的程序,再通过键盘输入,在同步时钟作用下,分别将5个定时写入到DS

13、1302内保存。达到设定时间,单片机立即调用音乐程序,并通过蜂鸣器播放音乐,从而实现定时音乐提醒功能。2.5秒表模块定时器TO用于秒表计时,定时溢出中断周期设为50ms,中断进入后先进行定时中断初值校正,当中断累计2次(即50ms*2=0.1s)时,对秒计数单元进行加1操作。最大计时值为23时59分59秒。在计数单元中,采用十进制BCD码计数,满10进位。在正常状态下 若按下key2按键 则进行时钟/秒表显示功能的转换,秒表中断计时程序启动,显示程序显示秒表功能数组里的内容。再按下key2口的按键开关,可实现秒表清0,按下key3时秒表启动秒表暂停功能,当按下key4口按键时,关闭T0秒表中断

14、计时,显示首址又改为ds1302里的数据,恢复正常时间显示功能。其中断向量表如表3所示。表3 中断向量表中断源入口地址外部中断00003H定时器0000BH3 系统软件工作流程图3.1 主程序本设计中计时采用DS1302芯片完成,秒表使用定时器T0中断完成。主程序循环调用显示子程序和查键子程序,当端口有开关按下时,转入相应功能程序。其详细主程序见附录二,主程序执行流程图如图6所示。开始初始化调用显示子程序整点鸣叫进入功能程序按键?整点?YNY图6 主程序流程图3.2 DS1302实现时间子程序DS1302 的控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,

15、位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。 在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式, 此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄

16、存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0HFDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。其程序执行流程图如图7所示。使DS1302不具备写保护复位将产生一个高电平写1302地址变量初始化将该地址的数据读出地址增加延时一段时间写1302地址地址增加延时一段时间复位将产生1个高电平显示数据向该地址写数据数据写完了?数据写完了?YYNN开始始始图7 DS

17、1302工作流程图3.3 秒表子程序秒表功能是通过定时器T0中断来计时的,当有键按下,进入中断,进入中断之后,设置初值,再当秒表计时键按下,开始计时。其程序执行流程图如图8所示。保护现场秒表/闪烁恢复现场,中断返回定时初值校正闪烁处理T0中断时钟调时闪烁秒表加10ms处理图8 T0中断计时程序流程图4 系统功能调试及结果分析4.1 硬件调试时钟计时器的电路系统较大,对于印制板焊接方面不可轻视,只要出一处的错误,就会对检测造成很大的误差。在焊接电路板的时候,应该从最基本的最小系统开始,分模块,逐个进行焊接测试。在对各个硬件模块进行测试时,要保证软件正确的情况下去测试硬件,要不然发生错误时,不知道

18、到底是哪一方出错了。在检查无误后再对整个印制板进行调试及修改,通电检查LED显示器的点亮状况。4.2 软件调试时钟计时器是多功能的数字型,可以看当前时间,可以闹钟定时及秒表计时等功能,所以对于它的程序也较为复杂,所以在编写程序和调试时出现了相对较多的问题:比如闹钟蜂鸣停止不下来,秒表计时不能暂停,进行计时后不能复位等等一些问题。但通过对模块子程序逐个的进行修改,并结合硬件实时调试,在Keil C51下编译,最终解决了软件设计所遇到的问题。软件经调试无误后,将其下载到单片机中,均能达到设计所要的效果。4.3 结果分析 通过程序的设计和硬件的调试,基本完成了设计要求所要实现的功能。其系统结果分析如

19、下:时间的设定:单片机通电后数码管就能显示24小时制时间,按下4键能进行时间小时的设定,按一次键时就加1,到23后又跳到00循环;按下5号键能进行时间分的设,定,同样按一次键分就加1,到59后又跳到00循环。这样就进行了时间时、分的设定。并能整点提醒(蜂鸣)。闹钟的设定:在时间显示状态下按下7键切换至闹钟,这时也可以进行闹钟的设置,按下4键可以设定闹钟时,按一次键时就加1,到23后又跳到00循环;按5键可以进行闹钟分的设定,同样按一次键分就加1,到59后又跳到00循环。这样就可以进行闹钟的设置,设定好后再按8键又会转换到时间显示的状态。当时间刚好到闹钟设定好的时间一致时闹铃就会响(蜂鸣)。秒表

20、的设定:在时间显示状态下按下6键可以切换至秒表,再按下7键秒表计时就开始,再按一下7键秒表计时停止,停止后按下6键就可以把秒表清零,又可以进行下一次的计时,不需要计时时按8键就可以转换到时间显示状态。下载所设计源程序后能观察到以下实验结果:(1)能显示24小时制时间小时、分、秒,能整点提醒(蜂鸣);(2)能通过按键设置时间,设置复位;(3)能通过按键设置定时的闹铃(蜂鸣);(4)能通过按键设置秒表计时。5 详细仪器清单本设计中用到的详细仪器清单如表4所示。表4 仪器清单类型型号数量芯片1STC89C521片芯片2DS13021片芯片382551片电阻1K13个蜂鸣器无源1个数码管3位共阳极2个

21、极性电容0.1UF1个按键开关6个单刀双掷开关1个三极管6个5V直流电源ZH-60031晶振12M1个电池CR20321个6 总结与思考及致谢课程设计是针对某一理论课程的要求,对学生进行综合性实践训练的实践教学环节,可以提高学生运用课程中所学的理论知识与实践紧密结合,独立地解决实际问题的能力。在这次课程设计过程中使我们们从中学到许多,特别是在课程设计过程中查找资料及编程、调试的过程,从中学到许多以前在课本和课堂上所无法学到的并从中体会到许多的挑战和乐趣,从而丰富了自己,使自己无论是上课时还是在课余都感到很充实。通过这个程序设计,我们掌握了很多单片机及其接口应用的知识,让我们对所学过的知识有所巩

22、固和提高,并且让我们对当今单片机的最新发展技术有所了解。在整个过程中,我们学到了新知识,增长了见识。在今后的日子里,我们仍然要不断地充实自己,争取在所学领域有所作为。脚踏实地,认真严谨,实事求是的学习态度,不怕困难、坚持不懈、吃苦耐劳的精神是我们在这次设计中最大的收益。我们想这是一次意志的磨练,是对我们实际能力的一次提升,也会对我们未来的学习和工作有很大的帮助。在这次课程设计中也使我们的同学关系更进一步了,同学之间互相帮助,有什么不懂的大家在一起商量,听听不同的看法对我们们更好的理解知识,所以在这里非常感谢帮助我们的同学。在此更要感谢我们的指导老师和专业老师,是你们的细心指导和关怀,使我们能够

23、顺利的完成课程设计报告。在此我们要向老师致以最衷心的感谢和深深的敬意。参考文献1 张鑫主编,华臻、陈书谦副主编.单片机原理及应用M.北京:电子工业出版社,20052 陈家俊、郑涛编著.程序设计教程M.北京:机械工业出版社,20083 楼然苗、李光飞编著.单片机课程设计指导M.北京:北京航空航天大学出版社,20074 张欣主编,肖荣、金桂兰副主编.C语言程序设计M.北京:中国水利水电出版社,20055 李俊梅编著.音乐基础理论M.北京:北京广院出版社,2004附录一 电路原理图附录二 系统程序#include#include#include#define PA XBYTE0xD1FF /*PA口

24、地址*/#define PB XBYTE0xD2FF /*PB口地址*/#define PC XBYTE0xD5FF /*PC口地址*/#define CON XBYTE0xD7FF /*控制地址*/#define uchar unsigned char#define uint unsigned intsbit sck=P32;/ds1302时钟端口sbit io=P35;/ds1302数据端口sbit rst=P26;/ds1302信号端口sbit BEEP=P33;/蜂鸣器端口code char dis_711=0xA0,0xBB,0x62,0x2A,0x39,0x2C,0x24,0xBA

25、,0x20,0x28,0xff;/* LED段码表 0 1 2 3 4 5 6 7 8 9 不亮 */ code char scan_con8=0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xbf,0x7f; / 列扫描控制字data char time_data7=10,12,12,14,21,22,30;/时间初值data char write_add7=0x8c,0x8a,0x88,0x86,0x84,0x82,0x80;/写地址data char read_add7=0x8d,0x8b,0x89,0x87,0x85,0x83,0x81;/读地址data char dis

26、8=0x00,0x00,0x00,0x00,0x00,0x00,0x0a,0x00;/显示单元数据,共6个数据data char disdata6=0x00,0x00,0x00,0x00,0x00,0x00;/计时单元数据初值,共6个data char display=0x00,0x00,0x00,0x00,0x00,0x00;/计时单元数据初值,共6个data char con1s=0x00,con04s=0x00,con=0X02,con5=0x00,con6;/*/ / 函数说明 /*/delay1ms(int t);/1ms延时函数void write_ds1302_byte(ucha

27、r dat);/单字节写函数void write_ds1302(uchar add,uchar dat);uchar read_ds1302(uchar add);/单字节读函数void write_rtc(void);/把数据写进ds1302void read_rtc(void);/把ds1302的数据读出待处理显示void time_pros(void);/时间处理函数void scan();/显示函数void bell(uchar t);/蜂鸣器发声函数void play_bell();/整点报时函数/*1毫秒延时程序*/delay1ms(int t)int i,j;for(i=0;it

28、;i+) for(j=0;j120;j+) ;/*单字节写函数*/void write_ds1302_byte(uchar dat) uchar i;for(i=0;i1;sck=1;/*对ds1302写数据函数*/void write_ds1302(uchar add,uchar dat)rst=0;_nop_();sck=0;_nop_();rst=1;_nop_(); write_ds1302_byte(add); write_ds1302_byte(dat);rst=0;_nop_();/*读ds1302数据函数*/uchar read_ds1302(uchar add)uchar i

29、,value;rst=0;_nop_();sck=0;_nop_();rst=1;_nop_();write_ds1302_byte(add);for(i=0;i1;sck=0;if(io)value=value|0x80;sck=1;rst=0;_nop_();sck=0;_nop_();sck=1;io=1;return value;/*把数据写进ds1302*/void write_rtc(void)uchar i,j;for(i=0;i7;i+)j=time_datai/10;time_datai=time_datai%10;time_datai=time_datai+j*16;wri

30、te_ds1302(0x8e,0x00);/去写保护for(i=0;i7;i+)write_ds1302(write_addi,time_datai);write_ds1302(0x8e,0x80);/加写保护/*读出ds1302数据待处理后显示*/void read_rtc(void)uchar i;for(i=0;i7;i+)time_datai=read_ds1302(read_addi);/*对读出的值处理用做显示*/void time_pros(void)dis0=time_data6%16;dis1=time_data6/16;dis2=time_data5%16;dis3=tim

31、e_data5/16;dis4=time_data4%16;dis5=time_data4/16;/*显示函数*/void scan(void)char k;for(k=0;k6;k+) CON=0x89; PB=dis_7disk;PA=scan_conk;delay1ms(1); /*键盘函数*/char inkey() uchar i,j=0x10,k; uchar keytab20=0x18,0x28,0x48, 0x88,0x14,0x24,0x40,0x84, 0x12,0x22,0x42,0x82,0x11, 0x21, 0x41,0x81 ; CON=0x81; PC=0x00

32、;PA=0xff;PB=0xff; for(i=0;i4;i+) PC=j; PA=0xff;k=PC;k=k&0x0f;if(k!=0) delay1ms(1); k=PC; k=k&0x0f; if(k!=0) break; j=j1;delay1ms(1); k=k+j;for(i=0;i16;i+)if(keytabi=k) break; return i;/*蜂鸣器发声*/void bell(uchar t) uchar i; for(i=0;i100;i+) BEEP=BEEP; delay1ms(t); /*整点报时*/void play_bell(void)time_data5

33、=read_ds1302(read_add5);time_data6=read_ds1302(read_add6);if(time_data5=0&time_data6=0)bell(1); /*秒表*/void miaob(void)if(inkey()=2)delay1ms(10);while(inkey()=2);while(1)char k;for(k=0;k6;k+) CON=0x89; PB=dis_70;PA=scan_conk;delay1ms(1);if(inkey()=3)delay1ms(10);while(inkey()=3);disdata0=0;disdata1=0

34、;disdata2=0;disdata3=0;disdata4=0;disdata5=0;TH0=0x3C;TL0=0xB0;EA=1;TR0=1;ET0=1;while(1)scan();if(inkey()=3)TR0=0;EA=0;if(inkey()=2)break; if(inkey()=4)break;/*调时函数*/void key_scon(void)uchar i,j;if(inkey()=0)delay1ms(10);while(inkey()=0);write_ds1302(0x8e,0x00);/去写保护read_rtc();/读ds1302数据for(i=0;i7;i

35、+)j=time_datai/16;time_datai=time_datai%16;time_datai=time_datai+j*10;time_data4+;if(time_data4=24)time_data4=0;write_rtc();if(inkey()=1)delay1ms(10);while(inkey()=1);write_ds1302(0x8e,0x00);/去写保护read_rtc();/读ds1302数据for(i=0;i7;i+)j=time_datai/16;time_datai=time_datai%16;time_datai=time_datai+j*10;t

36、ime_data5+;if(time_data5=60)time_data5=0;write_rtc();write_ds1302(0x8e,0x80);/加写保护/*定点提醒*/void bj_display(void)uchar k;if(inkey()=3)delay1ms(10);while(inkey()=3);for(k=0;k6;k+) CON=0x89; PB=dis_70;PA=scan_conk;delay1ms(1);while(1)if(inkey()=0)delay1ms(10);while(inkey()=0);display4+;if(display4=10)display4=0;display5+;if(display5=7)display5=0;if(inkey()=1) delay1ms(10);while(inkey()=1);display2+;if(display2=10)display2=0;display3+;if(display3=7)display3=0;for(k=0;k=10) disdata0=0; disdata1+; if(disdata1=10) disdata1=0;

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

当前位置:首页 > 研究报告 > 信息产业


经营许可证编号:宁ICP备18001539号-1