毕业设计(论文)多功能实验板设计.doc

上传人:仙人指路1688 文档编号:2401016 上传时间:2023-02-17 格式:DOC 页数:22 大小:415KB
返回 下载 相关 举报
毕业设计(论文)多功能实验板设计.doc_第1页
第1页 / 共22页
毕业设计(论文)多功能实验板设计.doc_第2页
第2页 / 共22页
毕业设计(论文)多功能实验板设计.doc_第3页
第3页 / 共22页
毕业设计(论文)多功能实验板设计.doc_第4页
第4页 / 共22页
毕业设计(论文)多功能实验板设计.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《毕业设计(论文)多功能实验板设计.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)多功能实验板设计.doc(22页珍藏版)》请在三一办公上搜索。

1、本科生实习论文(设计)题目:多功能实验板 姓名: 学号: 0310401039 系别: 物理与电子信息科学系 专业: 电子信息科学与技术指导教师: 起止日期: 2006年10月2006年11月 2006年11月 3 日目录引言.3关键词.31总体设计方案.32硬件电路.3 21 芯片说明3 211 AT89C513 212 DS18B205 22 八位数码直读显示电路7 23 4*4矩阵十六键键盘电路.7 24 电源电路83制板过程.831 基本流程.832 注意的问题.84实现功能.841 电子时钟.8 42 秒表.14 43 温度测量.14 44 计算器.195总结.206致谢.207参考

2、文献.20附录.21 附录一:总电路原理图21附录二:PCB板图21附录三:电路板实物图22附录四:元件清单22引言:单片微机简称单片机,其为可编程芯片,应用范围非常广泛。本设计将用单片机有主体,制作一个简单的系统。关键词:动态扫描,单线技术1总体方案设计:本设计主要用单片机AT89C51来实现,单片机为可编程的,在单片机能正常工作的基础之上,用其并口进行扩展,接入两个四位的数码管,并用74LS245驱动,4*4的十六键矩阵键盘,这样就基本上构成了一个简单的系统.l 输入单元-十六键键盘.l 处理单元-AT89C51.l 输出显示单元-两个四位数码管.2硬件结构: 21 芯片说明 211 AT

3、89C51AT89C51是一个低电压,高性能CMOS 8位单片机,片内含4k bytes的可反复擦写的Flash只读程序存储器和128 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,内置功能强大的微型计算机的AT89C51提供了高性价比的解决方案。 AT89C51是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,AT89C51可以按照常规方法进行编程,也可以在线编程。其将

4、通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。P0口:P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口.作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口写1可作为高阻抗输入端用.P1口:P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路.对端口写1,通过内部的上拉电阻把端口拉到高电平,此时可作为输入口.作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(ILL).P2口:P2是1个带有内部上拉电阻的8位双向I/O口,P2的输出

5、缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路.对端口写1,通过内部的上拉电阻把端口拉到高电平,此时可作为输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(ILL).P3口:P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,如下表所示:P3口还接收一些用于Flash闪速存储器编程和程序效验的控制信号.RST:复位输入.当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位. ALE/PROG:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节.即使不访问外部存储器,ALE仍以时钟振荡频率的1

6、/6输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的.要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲.PSEN:程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C51由外部程序存储器取指令(或数 据)时,每个机器周期两次PSEN有效,即输出两个脉冲.在此期间,当访问外部数据存储器,这两次有效的PSEN信号不出现.EA/VPP:外部访问允许.欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地).需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态.XTAL1:振荡器反向放大器的及内部时钟发生器的输入端.XTA

7、L2:振荡器反向放大器的输出端.时钟振荡器:AT89C51中有一个用于构成内部振荡器的高增益反向放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端.这个放大器与作为反馈元件的片外石英晶体一起构成自激振荡器.外接石英晶体及电容C1.C2接在放大器的反馈回路中构成并联振荡电路.对外接电容C1.C2虽然没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低.振荡器工作的稳定性.起振的难易程度及温度稳定性,如果使用石英晶体,我们推荐电容使用30PF+-10PF212 温度传感器DS18B20DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传

8、统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现位的数字值读数方式。DS18B20的性能特点如下:l 独特的单线接口仅需要一个端口引脚进行通信;l 多个DS18B20可以并联在惟一的三线上,实现多点组网功能;l 无须外部器件;l 可通过数据线供电,电压范围为3.05.5;l 零待机功耗;l 温度以或位数字;l 用户可定义报警设置;l 报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;l 负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作; DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制

9、补码读数形式提供,以0.0625/LSB形式表达,其中S为符号位。这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。例如+125的数字输出为07D0H,+25.0625的数字输出为0191H,-25.0625的数字输出为FF6FH,-55的数字输出为FC90H。DS18B20温度传感器的存储器DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的

10、E2RAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。暂存存储器包含了8个连续字节,前两个字节是测得的温度信息,第一个字节的内容是温度的低八位,第二个字节是温度的高八位。第三个和第四个字节是TH、TL的易失性拷贝,第五个字节是结构寄存器的易失性拷贝,这三个字节的内容在每一次上电复位时被刷新。第六、七、八个字节用于内部计算。第九个字节是冗余检验字节。该字节各位的意义如下: TM R1 R0 1 1 1 1 1 低五位一直都是1 ,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用户不要去改动。R1和R0用来设置分辨率,如下表所示:

11、(DS18B20出厂时被设置为12位)分辨率设置表: R1R0分辨率温度最大转换时间009位93.75ms 0110位187.5ms 1011位375ms 1112位750ms 根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后释放,DS18B20收到信号后等待1660微秒左右,后发出60240微秒的存在低脉冲,主CPU收到此信号表示复位成功。22 八位数码管直读显示八位数码显示是由两个

12、四位数码管构成。八字段接在P0口,P0口接入了1K的上拉电阻,而八个位选端经驱动芯片74LS245接入P2口,如下两表:数码管字段码显示表(对应P0口代码表)如下:(不带小数点)显示数学P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0P1gchdefab00101111105fH101000001041H21001101109bH3110100110d3H4110001010c5H5110101100d6H6110111100deH701000011043H8110111110dfH9110101110d7H(注:1.数码管为共阴极的 2.带小数点7fh,61h,0bbh,0f

13、3h,0e5h,0f6h,0feh,63h,0ffh,0f7h)数码管位选表:(对应P2口)数码管1数码管2千百十个千百十个P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0 (注:P2口低电平有效)23 十六键键盘4*4矩阵分部键盘有十六个微动开关,以4*4矩阵分部,接入P1口,这种接入文法可以有效的利用并口,因为AT89C51单片机的并口是有限的。具体电路见总原理图。 24 电源电路 如下图: 该电路只有稳压的作用,输入电压为直流,范围在7.515V之间。3电路制板过程: 31 基本流程 本次电路的PCB板制作用到的是Protel 99软件。用该软件做好PCB电子模板后,然后

14、转印到敷铜板上,经过腐蚀,电路板就制成。 32 遇到的问题 制板的关键就在于转印到敷铜板上是否成功。在这一步中要我们有耐心。通过转印机后,一定要等其冷却。4实现功能: 41 电子时钟时钟由六位八字段数码显示,依次为小时,分钟,秒钟,各有两位显示。上电初始化时为零时零分零秒,并开始运行.小时,分钟,秒钟都可调.由四个微动开关控制,分别为:1.时,分,秒选择键-由小数点跟踪确定.2.确认键-时间调好后,按该键可以退出调整,继续进行记时.3.加,减两键-在时,分,秒选择好后,分别对其进行加,减操作(精度为1).程序如下:ORG 0000HAJMP MAINORG 000BHAJMP TIMEORG

15、0030HMAIN:mov 20h,#00hMOV 21H,#00HMOV 22H,#00HMOV 23H,#00HMOV IP,#02H ;IP,IE初始化MOV IE,#82HMOV TMOD,#01H ;设定定时器工作方式?MOV TL0,#0B0HMOV TH0,#3CHSETB TR0 ;启动定时?MOV SP,#40H ;重设堆栈指针NEXT: LCALL DISP ;调用显示子程序?LCALL KEY ;调用按键检测子程序JZ NEXT ;LCALL ANKEY ;调用按键处理子程序SJMP NEXT ;重新循环NOPNOPNOP;定时中断处理程序:TIME: PUSH ACC

16、;保护现场PUSH PSWMOV TL0,#0B4H ;赋定时初值MOV TH0,#3CHINC 20H ;MOV A,20HCJNE A,#20,RETI1MOV 20H,#00H ;一秒钟时间到MOV A,21HADD A,#01HDA AMOV 21H,ACJNE A,#60H,RETI1MOV 21H,#00H ;一分钟时间到MOV A,22HADD A,#01HDA AMOV 22H,ACJNE A,#60H,RETI1MOV 22H,#00H ;一小时时间到MOV A,23HADD A,#01HDA AMOV 23H,ACJNE A,#24H,RETI1MOV 23H,#00H ;

17、到时间达到24小时,清零.RETI1: POP PSW ;恢复现场POP ACCRETI ;中断返回?NOPNOP;显示子程序DISP: ANL 2FH,#10H ;处理小数点MOV A,21H ;处理秒21H-2DH,2EHANL A,#0FHORL A,2FHMOV 2FH,AMOV A,21HANL A,#0F0HSWAP AMOV 2EH,AANL 2DH,#10HMOV A,22H ;处理分钟22H-2CH,2DHANL A,#0FHORL A,2DHMOV 2DH,AMOV A,22HANL A,#0F0HSWAP AMOV 2CH,AANL 2BH,#10HMOV A,23H ;

18、处理小时23H-2AH,2BHANL A,#0FHORL A,2BHMOV 2BH,AMOV A,23HANL A,#0F0HSWAP AMOV 2AH,AMOV R0,#2FH ;显示偏移量MOV R3,#06HMOV DPTR,#TABLEMOV A,#11111110bLOOP1: MOV B,A ;MOV P2,aMOV A,R0MOVC A,A+DPTRMOV P0,a ;送显示MOV R2,#80H ;延时DJNZ R2,$DEC R0MOV A,BRl ADJNZ R3,LOOP1 ;循环显示RETTABLE: db 05fh,41h,09bh,0d3h,0c5h,0d6h,0d

19、eh, ;不带小数点DB 043h,0dfh,0d7h,00,00,00,00,00,00DB 07fH,61H,0bbh,0f3H,0e5H,0f6H,00feH,63H ;带小数点DB 0ffH,0f7H,00,00,00,00,00,00NOPNOP;按键判断程序KEY: MOV P1,#0fH ;MOV A,P1CPL AANL A,#0fHJZ RETX ;无键按下则返回LCALL DISP ;LCALL DISPMOV A,P1CPL AANL A,#0fHJZ RETX ;键盘去抖动。MOV R6,A ;将键值存入R6。LOOP2: LCALL DISP ;MOV A,P1CPL

20、 AANL A,#0fHJNZ LOOP2 ;等待键释放MOV A,R6RETX: RETNOPNOP;按键处理子程序ANKEY: CLR EA ;关中断LX: MOV A,R6JB ACC.0,L1 ;是功能键转L1JB ACC.1,L2 ;是确认键转L2JB ACC.2,L3 ;是减1键转L3JNB ACC.3,L12 ;不是增1键,转L12JB 2BH.4,L6 ;判断使哪一位(时、分、秒)的值加1JB 2DH.4,L8JB 2FH.4,L9L12: LCALL DISPLCALL DISPLCALL KEY ;判断有无键按下。JZ L12LJMP LXL2: MOV 25H,#00H

21、;确认键处理程序CLR 2BH.4CLR 2DH.4CLR 2FH.4SETB EARETL3: JB 2BH.4,L61 ;增一键处理程序JB 2DH.4,L81JB 2FH.4,L91AJMP L12L1: MOV A,25H ;功能键处理程序JZ LB1JB ACC.0,LB2JB ACC.1,LB3JNB ACC.2,L12LB1: MOV 25H,#01H ;25H单元是标志位,(25H)=01H调节时单元的值SETB 2BH.4CLR 2DH.4CLR 2FH.4AJMP L12LB3: MOV 25H,#04H ;25H单元是标志位,(25H)=01H调节秒单元的值SETB 2F

22、H.4CLR 2DH.4CLR 2BH.4AJMP L12LB2: MOV 25H,#02H ;25H单元是标志位,(25H)=01H调节分单元的值SETB 2DH.4CLR 2BH.4CLR 2FH.4AJMP L12L61: AJMP L611 ;L81: AJMP L811 ;L91: AJMP L911L6: MOV A,23H ;时加一ADD A,#01HDA AMOV 23H,ACJNE A,#24H,L15L15: JC L112MOV 23H,#00HL112: AJMP L12L8: MOV A,22H ;分加一ADD A,#01HDA AMOV 22H,ACJNE A,#6

23、0H,L16L16: JC L112MOV 22H,#00HAJMP L12L9: MOV A,21H ;秒加一ADD A,#01HDA AMOV 21H,ACJNE A,#60H,L17L17: JC L112MOV 21H,#00HAJMP L12L611: MOV A,23H ;时减一ADD A,#99HDA AMOV 23H,ACJNE A,#99H,L112MOV 23H,#23HAJMP L12L811: MOV A,22H ;分减一ADD A,#99HDA AMOV 22H,ACJNE A,#99H,L112MOV 22H,#59HAJMP L12L911: MOV A,21H

24、;秒减一ADD A,#99HDA AMOV 21H,ACJNE A,#99H,L112MOV 21H,#59HAJMP L12NOPNOPEND42 秒表秒表的程序设计跟时钟差不多,这里就不再说明了。43 温度测量 主要用到DS1820以及单总线技术,硬件的接入非常的简单(见测温硬件)。由于硬件的一线结构,单线传输,因此,在软件编程就会有比较严格的时序要求。 以下程序可测量显示精度为0.06的温度值。用四位数码管显示,前两位是整数部分,后两位是小数部分。显示范围为0100摄氏度。DAT BIT P3.1 ;数据通信口WDLSB DATA 30H ;读出的温度低字节WDMSB DATA 31H

25、;读出的温度高字节;*ORG 0000HLJMP MAINORG 000BHSJMP TIMER0 ;定时显示;*;定时显示子程序,采用循环扫描方式;显示缓冲区40H47HORG 0040HTIMER0:mov dptr,#tabmov a,40hmovc a,a+dptrMOV P0,a;最后一位值送p0mov P2,#11111110b; 点亮最后一位CALL T1MSmov dptr,#tabmov a,41hmovc a,a+dptrmov p0,amov P2,#11111101bCALL T1MSmov dptr,#tab1mov a,42hmovc a,a+dptrmov p0,

26、amov P2,#11111011bCALL T1MSmov dptr,#tabmov a,43hmovc a,a+dptrmov p0,amov P2,#11110111bMOV TH0,#LOW(65536-10000) ;定时器10MS中断MOV TL0,#HIGH(65536-10000)RETIT1MS: mov r5,#00h ;延时子程序tt: mov r6,#9djnz r6,$djnz r5,ttrettab:db 5fh,41h,9bh,0d3h,0c5h,0d6h,0deh,43h,0dfh,0d7htab1:db 7fh,61h,0bbh,0f3h,0e5h,0f6h,

27、0feh,63h,0ffh,0f7h;*;主程序:MAIN: MOV SP,#60HMOV P1,#0FFHMOV R2,#8MOV R0,#40H ;OVER: MOV R0,#00HINC R0DJNZ R2,OVERMOV TMOD,#01HMOV TH0,#LOW(65536-10000)MOV TL0,#HIGH(65536-10000)SETB EASETB ET0SETB TR0LOOP: LCALL DSWD ;调用读出DS18B20温度程序SJMP LOOP ; 读出DS18B20温度程序DSWD:CLR EALCALL RSTJNB F0,KEND ;如果没有应答,返回主程

28、序MOV R0,#0CCHLCALL SEND_BYTE ;跳过ROM匹配MOV R0,#44H ;发出温度转换命令LCALL SEND_BYTESETB EAMOV P1,#00001111BMOV 48H,#1 ;廷时75ms以上准备读SS2: MOV 49H,#255SS1: MOV 4AH,#255SS0: DJNZ 4AH,SS0DJNZ 49H,SS1DJNZ 48H,SS2MOV P1,#11111100BCLR EALCALL RSTJNB F0,KENDMOV R0,#0CCH ;跳过ROM匹配LCALL SEND_BYTEMOV R0,#0BEH ;发出读温度命令LCALL

29、 SEND_BYTELCALL READ_BYTEMOV WDLSB,ALCALL READ_BYTEMOV WDMSB,ALCALL TRANS12KEND: mov p1,#01010101bSETB EARET;*;温度转换程序:精确到:0.06 ;TRANS12:MOV A,30HANL A,#0F0HMOV 3AH,AMOV A,31HANL A,#0FHORL A,3AHSWAP AMOV B,#10DIV ABMOV 43H,AMOV 42H,B ;MOV DPTR,#TABBMOV A,30HANL A,#0FHMOV B,#2MUL ABMOVC A,A+DPTRMOV 41

30、H,AMOV A,30HANL A,#0FHMOV B,#2MUL ABINC AMOVC A,A+DPTRMOV 40H,ARETTABB: DB 0,0,0,6,1,2,1,8,2,5,3,1,3,7,4,3,5,0DB 5,6,6,2,6,8,7,5,8,1,8,7,9,3;*SEND_BYTE: ;发送一个字节程序MOV A,R0MOV R5,#8SEN3: CLR CRRC AJC SEN1LCALL WRITE_0SJMP SEN2SEN1: LCALL WRITE_1SEN2: DJNZ R5,SEN3 ; 循环8次,写一个字节RETREAD_BYTE: ;读一个字节程序MOV

31、R5,#8READ1: LCALL READRRC ADJNZ R5,READ1 ; 循环8次,读一个字节MOV R0,ARET;复位程序,如果复位置位F0,没有就复位F0RST: SETB DATNOPNOPCLR DATMOV R6,#250 ;主机发复位脉冲持续3s200=600sDJNZ R6,$MOV R6,#50DJNZ R6,$SETB DAT ;主机释放总线,口线改为输入MOV R6,#15DJNZ R6,$CALL CHCK ;调用应答检查程序MOV R6,#60DJNZ R6,$SETB DATRETCHCK: MOV C,DATJC RST0SETB F0 ;检测到信号,

32、置位F0SJMP CHCK0RST0: CLR F0 ;未准备好F0复位CHCK0: RETWRITE_0: ;写0CLR DATMOV R6,#30DJNZ R6,$SETB DATRETWRITE_1:CLR DAT ;写1NOPNOPNOPNOPNOPSETB DATMOV R6,#30DJNZ R6,$RET;读一位数据程序READ: SETB DAT ;先复位至少1US产生读起始信号NOPNOPCLR DATNOPNOPSETB DAT ;置位DAT准备接收数据NOPNOPNOPNOPNOPNOPNOPMOV C,DATMOV R6,#23DJNZ R6,$RETEND44 计算器对

33、计算器的设计我把它分为四个部分:l 键盘输入.l 储存.l 运算.l 显示.在这个设计中,只完成了第一部分-键盘输入.键盘输入主要通过每个键的键值大小来确定的,在这个程序设计中,通过动态扫描来读出每个键的键值.键盘的硬件结构上述已有介绍,4*4矩阵,十六键键盘.用0来扫描输出,在扫描的同时读出输入的变化.再由输入,输出来确定键值.主要的程序如下:key:mov r3,#0efh ;输入扫描初始值 mov r1,#00h l2:mov a,r3 mov p1,a ;载入扫描值 acall delay kk1: mov a,p1 ;读出扫描后的结果 mov r2,a acall delay mov

34、 a,p1 xrl a,r2 cjne a,#00h,kk1 ;判断是否有键按下 kk:mov a,r2 mov r4,a setb c mov r5,#04h mov r1,#00h l3:rrc a ; jnc l4 inc r1 djnz r5,l3 mov a,r3 setb c rlc a mov r3,a jc l2 mov r1,#ffh ajmp l6 l4:mov a,r1 add a,r1 mov r1,a add a,r1 mov r1,a mov a,r4 setb c l5:rlc a jnc kk2 inc r1 sjmp l5 kk2:mov a,p1 ;mov

35、a,#0eeh xrl a,r2 cjne a,#00h,l6 ajmp kk2 l6:mov a,r1 ret5总结:本次设计的主芯片为AT89C51单片机,有16键键盘,八位数码显示,P3口作为扩展口,在本硬件的基础上,加上软件的驱动,我们成功的实现了电子时钟,电子秒表,基于DS18B20的温度测量。但在计算器和温度控制软件设计上,由于程序上的问题没有完成。这说明我们在程序的编写上还要进一步的努力。通过本次实习,我们学到了许多书本上没有的知识,也累积了一些经验,这些都是在遇到问题后,通过自己的努力和勤奋,在解决这些问题中学习到的。在以后的学习和工作中,我们要善于观察,团结合作,多思多想,继续学习。6致谢:感谢老师们在实习过程中给与我们的细心教导。7参考文献:1 余锡存 曹国华等编 单片机原理及接口技术2 阎石著 数字电子技术基础 3 潘永雄 沙河 刘向阳 编著 电子线路CAD实用教程4 网上的一些资料附录附录一:附录二:附录三:附录四:名称规格数量单片机AT89C511温度传感器DS18B201驱动芯片74LS2451稳压管78051数码管GEM3461AE2微动开关-17排阻1K1电阻,电容-若干

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号