(毕业论文)倒计时显示器设计.doc

上传人:仙人指路1688 文档编号:3929551 上传时间:2023-03-28 格式:DOC 页数:33 大小:281KB
返回 下载 相关 举报
(毕业论文)倒计时显示器设计.doc_第1页
第1页 / 共33页
(毕业论文)倒计时显示器设计.doc_第2页
第2页 / 共33页
(毕业论文)倒计时显示器设计.doc_第3页
第3页 / 共33页
(毕业论文)倒计时显示器设计.doc_第4页
第4页 / 共33页
(毕业论文)倒计时显示器设计.doc_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《(毕业论文)倒计时显示器设计.doc》由会员分享,可在线阅读,更多相关《(毕业论文)倒计时显示器设计.doc(33页珍藏版)》请在三一办公上搜索。

1、兰州理工大学信号检测与处理课程设计设计题目 倒计时显示器设计 学院 电气工程与信息工程学院 专业班级 学号 姓名 指导教师 时间 2013 年 春 学期 摘 要近年来随着计算机在社会领域的渗透,单片机的应用正在不断的走向深入,同时带动传统控制检测日新月益更新。在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,以做完善。生活中单片机的应用很广,如电子倒计时牌就能够帮你记住一些重要的日子叫你不会忘记。它可以用于奥运会的倒计时、世界博览会的倒计时、高考的倒计时等重要的日子的计时,使你的生活变

2、的简单而有规律。制作一些大的电子倒计时牌也能方便大众,如2016年奥运会在里约热内卢举办,如果设计一个醒目的倒计时器就很好的给大众一个提醒的作用。本设计选取时钟芯片DS1302与AT89C51同步通信构成数字时钟电路。其简单的三线接口能为单片机节省大量资源,而且DS1302的备用电源能力保证电路断电后仍能保存时间和数据信息。显示电路使用LCD1602,功耗低,可视性好。该时钟电路可实现时钟、日期、闹铃、倒计时等强大的功能,它优越的性能,在很多领域的应用中,尤其是某些自动化控制、长时间无人看守的测控系统等对时钟精确性和可靠性有较高要求的场合,具有很高的使用价值。关键词:单片机;C语言;电子倒计时

3、器;Keil uVision3兰州理工大学I第一章 绪言- 4 -第二章 方案论证5方案选择5第三章 硬件设计63.1 结构框图63.2 控制芯片模块(AT89C51)63.2 时钟芯片模块93.3 LCD显示模块13第四章 软件设计174.1 整体设计思路174.2 系统流程图174.3 主程序18第五章 设计总结315.1 调试中的问题315.2 未完成的功能315.3 总结及体会31第一章 绪言 本次课程设计采用的单片机是AT89C51, AT89C51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写10

4、00次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。 AT89S51具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。 此外,AT89S51

5、设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。 此次课程设计中输出显示使用的是LCD1602,需要显示当前的年月日及倒计时天数。为了倒计时显示器的通用性,数据的设置与修改可通过与单片机相连的按键来完成。用以校正时间和修改倒计时天数。 第二章 方案论证方案选择近年来随着科技技术飞速的发展可以通过途径实现倒计时器的设计,然而单片机的应用正在不断地走向深

6、入,在许多领域中基于单片机实现的倒计时得到了广泛的应用,比如在体育比赛中的计时器;安全措施中的定时报警器;游戏中的倒计时;维持秩序的交通信号灯;红路灯,交通控制器,闹钟等等。此次课程设计是利用单片机实现倒计时器的设计以下是三种设计方案。 方案一:基于AT89S51单片机的数码管显示模块显示的倒计时器。主要是以单片机来控制,用按键来设定倒计时初始时刻的值,数码管作为显示模块来显示剩余的时间。此电路对于倒计时器中的LED数码管示器来说,采用以软件为主的接口方法,即不使用专门的硬件译码器,而采用软件程序进行译码。 方案二:基于AT89S51单片机的LCD液晶显示模块1602显示的倒计时器。使用并行接

7、口时钟芯片DS12887设计时钟电路。利用并行时钟芯片DS12887为核心计时芯片,组成数字时钟电路。该电路能够准确计时,还附加许多其它功能,在掉电时能保存用户设置参数和故障状态参数等重要参数。 方案三:基于AT89S51单片机的LCD液晶显示模块1602显示的倒计时器。主要是以单片机来控制,用按键来设定倒计时初始时刻的值,LCD1602液晶作为显示模块来显示剩余的时间。使用串行接口时钟芯片DS1302设计时钟电路。以串行时钟芯片DS1302为核心计时芯片,组成数字时钟电路。该电路不但能准确地计时、附加其它功能,而且,其三线接口可以节省接口资源,在断电后不丢失时间和数据信息。通过以上三种论证方

8、案最终选择第三种方案因为在三种方案里第三种方案的校时比较准LCD1602的功耗较低节能省电,再者我们在学习的过程中对1302也有一定的了解设计的时候也比较容易,且其接口简单综合性能良好,因此选择第三种方案。 第三章 硬件设计3.1 结构框图LCD1602显示电路AT89C51单片机按键控制输入(用以校正时间)DS1302时钟电路3.2 控制芯片模块(AT89C51) (一)、AT89C51主要功能列举如下:1、为一般控制应用的 8 位单芯片2、晶片内部具时钟振荡器(传统最高工作频率可至 12MHz)3、内部程式存储器(ROM)为 4KB4、内部数据存储器(RAM)为 128B5、外部程序存储器

9、可扩充至 64KB6、外部数据存储器可扩充至 64KB7、32 条双向输入输出线,且每条均可以单独做 I/O 的控制8、5 个中断向量源9、2 组独立的 16 位定时器10、1 个全多工串行通信端口11、8751 及 8752 单芯片具有数据保密的功能12、单芯片提供位逻辑运算指令(二)、AT89C51各引脚功能介绍:VCC:AT89S51 电源正端输入,接+5V。VSS:电源地端。XTAL1:单芯片系统时钟的反相放大器输入端。XTAL2:系统时钟的反相放大器输出端,一般在设计上只要在 XTAL1 和 XTAL2 上接上一只石英振荡晶体系统就可以动作了,此外可以在两引脚与地之间加入一 20PF

10、 的小电容,可以使系统更稳定,避免噪声干扰而死机。RESET:AT89S51的重置引脚,高电平动作,当要对晶片重置时,只要对此引脚电平提升至高电平并保持两个机器周期以上的时间,AT89S51便能完成系统重置的各项动作,使得内部特殊功能寄存器之内容均被设成已知状态,并且至地址0000H处开始读入程序代码而执行程序。EA/Vpp:EA为英文External Access的缩写,表示存取外部程序代码之意,低电平动作,也就是说当此引脚接低电平后,系统会取用外部的程序代码(存于外部EPROM中)来执行程序。因此在8031及8032中,EA引脚必须接低电平,因为其内部无程序存储器空间。如果是使用 8751

11、 内部程序空间时,此引脚要接成高电平。此外,在将程序代码烧录至8751内部EPROM时,可以利用此引脚来输入21V的烧录高压(Vpp)。ALE/PROG:ALE是英文Address Latch Enable的缩写,表示地址锁存器启用信号。AT89S51可以利用这支引脚来触发外部的8位锁存器(如74LS373),将端口0的地址总线(A0A7)锁进锁存器中,因为AT89S51是以多工的方式送出地址及数据。平时在程序执行时ALE引脚的输出频率约是系统工作频率的1/6,因此可以用来驱动其他周边晶片的时基输入。此外在烧录8751程序代码时,此引脚会被当成程序规划的特殊功能来使用。PSEN:此为Progr

12、am Store Enable的缩写,其意为程序储存启用,当8051被设成为读取外部程序代码工作模式时(EA=0),会送出此信号以便取得程序代码,通常这支脚是接到EPROM的OE脚。AT89S51可以利用PSEN及RD引脚分别启用存在外部的RAM与EPROM,使得数据存储器与程序存储器可以合并在一起而共用64K的定址范围。PORT0(P0.0P0.7):端口0是一个8位宽的开路汲极(Open Drain)双向输出入端口,共有8个位,P0.0表示位0,P0.1表示位1,依此类推。其他三个I/O端口(P1、P2、P3)则不具有此电路组态,而是内部有一提升电路,P0在当做I/O用时可以推动8个LS的

13、TTL负载。如果当EA引脚为低电平时(即取用外部程序代码或数据存储器),P0就以多工方式提供地址总线(A0A7)及数据总线(D0D7)。设计者必须外加一锁存器将端口0送出的地址栓锁住成为A0A7,再配合端口2所送出的A8A15合成一完整的16位地址总线,而定址到64K的外部存储器空间。PORT2(P2.0P2.7):端口2是具有内部提升电路的双向I/O端口,每一个引脚可以推动4个LS的TTL负载,若将端口2的输出设为高电平时,此端口便能当成输入端口来使用。P2除了当做一般I/O端口使用外,若是在AT89S51扩充外接程序存储器或数据存储器时,也提供地址总线的高字节A8A15,这个时候P2便不能

14、当做I/O来使用了。PORT1(P1.0P1.7):端口1也是具有内部提升电路的双向I/O端口,其输出缓冲器可以推动4个LS TTL负载,同样地若将端口1的输出设为高电平,便是由此端口来输入数据。如果是使用8052或是8032的话,P1.0又当做定时器2的外部脉冲输入脚,而P1.1可以有T2EX功能,可以做外部中断输入的触发脚位。PORT3(P3.0P3.7):端口3也具有内部提升电路的双向I/O端口,其输出缓冲器可以推动4个TTL负载,同时还多工具有其他的额外特殊功能,包括串行通信、外部中断控制、计时计数控制及外部数据存储器内容的读取或写入控制等功能。其引脚分配如下:P3.0:RXD,串行通

15、信输入。P3.1:TXD,串行通信输出。P3.2:INT0,外部中断0输入。P3.3:INT1,外部中断1输入。P3.4:T0,计时计数器0输入。P3.5:T1,计时计数器1输入。P3.6:WR:外部数据存储器的写入信号P3.7:RD,外部数据存储器的读取信号。3.2 时钟芯片模块DS13021是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟芯片,它可以对年、月、日、周日、时、分、秒进行计时,且具有闰年补偿功能,工作电压宽达2.55.5V。时钟可工作在24小时格式或12小时(AM/PM)格式。 DS1302与单片机的接口使用同步串行通信,仅用3条线与之相连接。可采用一次传送一

16、个字节或突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个318的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。1. DS1302引脚功能与内部结构DS1302的引脚功能如表32.2.1所示,外形及内部如图32.2.1: 引脚号引脚名称功能1VCC2主电源2、3X1、X2振荡源,外接32768Hz晶振4GND地线5RST复位/片选线6I/O串行数据输入/输出端(双向)7SCLK串行时钟输入端8VCC1后备电源表32.2.1 DS1302引脚功能表图32

17、.2.1 DS1302管脚图及内部结构图2. DS1302的控制字DS1302的控制字节如图32.2.2所示: 7 6 5 4 3 2 1 01RAMA4A3A2A1A0RAM 图32.2.2 DS1302控制字节的含义控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。3. DS1302的复位引脚通过把输入驱动置高电平来启动所有的数据传送。 输入有两种功能:首先,接通控制逻辑

18、,允许地址命令序列送入移位寄存器;其次,提供了终止单字节或多字节数据的传送手段。当为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中置为低电平,则会终止此次数据传送,并且I/O引脚变为高阻态。上电运行时,在Vcc2.5V之前,必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。4 .DS1302的数据输入输出在控制指令字输入后的下一个SCLK时钟的上升沿时数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位至高位7,数据读写时序如图32.2.3所示:图

19、32.2.3数据读写时序5.DS1302的寄存器DS1302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。其日历、时间寄存器及其控制字见表2。此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器的内容。 DS1302与RAM相关的寄存器分为两类,一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H-FDH,其中奇数为读操作,偶数为写操作;再一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为F

20、EH(写)、FFH(读)。寄存器名命令字取值范围各位内容写操作读操作76543210秒寄存器 80H81H00-59CH10SECSEC分寄存器82H83H00-59010MINMIN时寄存器84H85H01-12或00-2312/24010HRHR日寄存器86H87H01-28,29,30,310010DATEDATE月寄存器88H89H01-1200010MMONTH周寄存器8AH8BH01-0700000DAY年寄存器8CH8DH00-9910YEARYEAR表32.2.2 DS1302的日历、时钟寄存器及其控6DS1302电路图3.3 LCD显示模块1. LCD1602特点 LCD16

21、02具有功耗低,使用寿命长,而且使用简单,容易掌握的特点。与数码管显示对比,电路更加简单,功耗也相对较低,可视性更好。芯片管脚说明:编号符号引脚说明编号符号引脚说明1VSS电源地9D2Data I/O2VDD电源正极10D3Data I/O3VL液晶显示偏压信号11D4Data I/O4RS数据/命令选择端(H/L)12D5Data I/O5R/W读写选择端(H/L)13D6Data I/O6E使能信号14D7Data I/O7D0Data I/O15BLA背光源正极8D1Data I/O16BLK背光源负极表32.3 .1 LCD1602芯片管脚说明 2. LCD1602硬件电路原理图图32

22、.3.2.1 LCD接口电路3 LCD1602的使用(1)显示模式设置(初始化)如表32.3.3.1所示指令码功能00111000设置162显示,57点阵,8位数据接口表 32.3.3.1液晶LCD1602显示模式设置(2)显示开关及光标设置(初始化)如表32.3.3.2所示指令码功能00001DCBD=1 开显示; D=0 关显示C=1 显示光标; C=0 不显示光标B=1 光标闪烁; B=0 光标不显示000001NSN=1 当读或写一个字符后地址指针加一,且光标加一N=0 当读或写一个字符后地址指针减一,且光标减一S=1 当写一个字符后,整屏显示左移(N=1)或右移(N=0)S=0 当写

23、一个字符,整屏显示不移动 表32.3.3.2 液晶LCD1602显示开关及光标设置 (3)数据指针设置如表32.3.3.3所示指令码功能80H+地址码(027H,40H67H)设置数据地址指针表32.3.3.3 液晶LCD1602数据指针设置(4)读写数据如表32.3.3.4所示操作输入输出读状态RS=L,RW=H,E=HD0D7=状态字写指令RS=L,RW=L,D0D7=指令码,E=高脉冲无读数据RS=H,RW=H,E=HD0D7=数据写数据RS=H,RW=L,D0D7=数据,E=高脉冲无表32.3.3.4液晶LCD1602读写数据第四章 软件设计4.1 整体设计思路基于此次的课程设计要求我

24、们小组经过讨论最后决定采用1602和1302两种芯片来完成任务要求,首先要让显示器显示正常的时间及倒计时天数,若是在计时的时候需要调整计时天数则可通过键盘实现,同样若在计时的时候需要校正时间也可通过键盘实现。4.2 系统流程图进入设定模式NY左移,友谊进入不同设置同的N显示年月日及倒计时天数 开始 处理模式(加或减)NY 将设置的时间或倒计时天数计入相应的寄存器不断显示寄存器的值,时间和日期按设定的值显示按确定退出 结束4.3 主程序#include /52单片机头文件,一般不要改动,里面包含特殊功能寄存器的定义#include #define uchar unsigned char/将uns

25、igned char定义为uchar,简化输写。提高编程速度#define uint unsigned int/将unsigned char定义为uint,简化输写。提高编程速度 sbit lcdrs=P10; /数据命令选择控制sbit lcdrw=P11; /读/写选择控制sbit lcden=P12; /使能信号sbit SCL2=P13; /SCL2定义为P1口的第3位脚,连接DS1302SCL和ADC0831SCL脚sbit SDA2=P14; /SDA2定义为P1口的第4位脚,连接DS1302SCL和ADC0831SDA脚sbit RST = P15; / DS1302片选脚sbi

26、t H1=P04; /高四位分别对应P04-P07sbit H2=P05;sbit H3=P06;sbit H4=P07;sbit D=P17;unsigned char l_tmpdate8=0x00,0x06,0x03,0x18,0x0c,0x07,0x06,0;unsigned char l_tmpdisplay8=0x40,0x40,0x40,0x40,0x40,0x40,0x40,0;code unsigned char write_rtc_address7=0x80,0x82,0x84,0x86,0x88,0x8a,0x8c; code unsigned char read_rtc

27、_address7=0x81,0x83,0x85,0x87,0x89,0x8b,0x8d;uchar t0= - - ;uchar t1= : : ;uchar wendu=0123456789;uchar shi,ge;uchar nian,yue,ri,shi,fen;uchar key,num; long number;uchar j;uchar flag,m,n; uchar qian2,bai2,shi2,ge2; void delay1(uchar z)uchar x,y;for(x=1000;x1;x-)for(y=z;y1;y-);void delay(uchar z) uch

28、ar x,y;for(x=1000;x1;x-)for(y=z;y1;y-);void write_com(uchar com)lcdrs=0;P2=com;delay1(5);lcden=1;delay1(5);lcden=0;void write_date(uchar date)lcdrs=1;P2=date;delay1(5);lcden=1;delay1(5);lcden=0;void init_lcd()uchar i;lcden=0;lcdrw=0;write_com(0x38);write_com(0x01);write_com(0x0c);write_com(0x06);wri

29、te_com(0x80);for(i=0;i16;i+)write_date(t0i);delay(0);write_com(0x80+0x40);for(i=0;i16;i+)write_date(t1i);delay(0);/*DS1302*/void Write_Ds1302_Byte(unsigned char temp) unsigned char i; for (i=0;i=1; /右移一位 SCL2=1; /*/void Write_Ds1302( unsigned char address,unsigned char dat ) RST=0;_nop_(); SCL2=0;_n

30、op_(); RST=1; _nop_(); /启动 Write_Ds1302_Byte(address);/发送地址 Write_Ds1302_Byte(dat);/发送数据 RST=0; /恢复/*/unsigned char Read_Ds1302 ( unsigned char address ) unsigned char i,temp=0x00; RST=0;_nop_(); SCL2=0;_nop_(); RST=1;_nop_(); Write_Ds1302_Byte(address); for (i=0;i=1;/右移一位 SCL2=1; RST=0;_nop_();/以下为

31、DS1302复位的稳定时间 RST=0;SCL2=0;_nop_();SCL2=1;_nop_();SDA2=0;_nop_();SDA2=1;_nop_();return (temp);/返回/*读取 日历*/void Read_RTC(void)unsigned char i,*p; p=read_rtc_address; /地址传递 for(i=0;i7;i+)/分7次读取 年月日时分秒星期 l_tmpdatei=Read_Ds1302(*p); p+; /*设定 日历*/void Set_RTC(void)unsigned char i,*p,tmp;for(i=0;i7;i+)tmp

32、=l_tmpdatei/10;l_tmpdatei=l_tmpdatei%10;l_tmpdatei=l_tmpdatei+tmp*16;Write_Ds1302(0x8e,0x00); p=write_rtc_address;/传地址 for(i=0;i7;i+)/7次写入 年月日时分秒星期 Write_Ds1302(*p,l_tmpdatei); p+; Write_Ds1302(0x80,0x00);void jiaoshi()switch(j)case 0:break; case 1:nian=num/10*16+num%10;Write_Ds1302(0x8c,nian);/年bre

33、ak;case 2:yue=num/10*16+num%10;Write_Ds1302(0x88,yue);/月break;case 3:ri=num/10*16+num%10;Write_Ds1302(0x86,ri);/日break;case 4:shi=num/10*16+num%10;Write_Ds1302(0x84,shi);/时break;case 5:fen=num/10*16+num%10;Write_Ds1302(0x82,fen);/分break;void display() uchar nians,niang,yues,yueg,ris,rig;uchar shis,s

34、hig,fens,feng,miaos,miaog; uchar qian1,bai1,shi1,ge1;nians=l_tmpdate6/16;niang=l_tmpdate6&0x0f;yues=l_tmpdate4/16;yueg=l_tmpdate4&0x0f;ris=l_tmpdate3/16;rig=l_tmpdate3&0x0f;shis=l_tmpdate2/16/10;shig=l_tmpdate2&0x0f;fens=l_tmpdate1/16;feng=l_tmpdate1&0x0f;miaos=l_tmpdate0/16;miaog=l_tmpdate0&0x0f; i

35、f(shis=0&shig=0&fens=0&feng=0&miaos=0&miaog=0)number-;if(number=0) D=0;write_com(0x80+4);write_date(wendunians);write_com(0x80+5);write_date(wenduniang);write_com(0x80+7);write_date(wenduyues);write_com(0x80+8);write_date(wenduyueg);write_com(0x80+10);write_date(wenduris);write_com(0x80+11);write_da

36、te(wendurig);write_com(0x80+0x40);write_date(wendushis);write_com(0x80+0x40+1);write_date(wendushig);write_com(0x80+0x40+3);write_date(wendufens);write_com(0x80+0x40+4);write_date(wendufeng);write_com(0x80+0x40+6);write_date(wendumiaos);write_com(0x80+0x40+7);write_date(wendumiaog); qian1=number/100

37、0; bai1=number%1000/100; shi1=number%1000%100/10; ge1=number%10;write_com(0x80+0x40+10);write_date(wenduqian1);write_com(0x80+0x40+11);write_date(wendubai1);write_com(0x80+0x40+12);write_date(wendushi1);write_com(0x80+0x40+13);write_date(wenduge1);void Init() EA=1;/首先开启总中断EX0=1; /开启外部中断 0IT0=1; / 设置成下降沿触发方式EX1=1; /开启外部中断 0IT1=1;/*键盘*/uchar saomiao() P0=0xfe; if(H1=0)key=1; /按键盘S1,显示0if(H2=0)key=2; /按键盘S2,显示1if(H3=0)key=3; /按键盘S3,显示2if(H4=0)key=4; /按键盘S4,显示3P0=0xfd;if(H1=0)key=5; /按键盘S5,显示4if(H2=0)key=6; /按键盘S6,显示5if(H3=0)key=7; /按键盘S7,显示6if(H4=0)key=8; /按键盘S8,显示7P

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

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号