单片机原理及应用 课程设计报告单片机电子密码锁设计.doc

上传人:文库蛋蛋多 文档编号:4147271 上传时间:2023-04-07 格式:DOC 页数:28 大小:1.20MB
返回 下载 相关 举报
单片机原理及应用 课程设计报告单片机电子密码锁设计.doc_第1页
第1页 / 共28页
单片机原理及应用 课程设计报告单片机电子密码锁设计.doc_第2页
第2页 / 共28页
单片机原理及应用 课程设计报告单片机电子密码锁设计.doc_第3页
第3页 / 共28页
单片机原理及应用 课程设计报告单片机电子密码锁设计.doc_第4页
第4页 / 共28页
单片机原理及应用 课程设计报告单片机电子密码锁设计.doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《单片机原理及应用 课程设计报告单片机电子密码锁设计.doc》由会员分享,可在线阅读,更多相关《单片机原理及应用 课程设计报告单片机电子密码锁设计.doc(28页珍藏版)》请在三一办公上搜索。

1、单片机原理及应用课程设计报告课题名称电子密码锁学院自动控制与机械工程专业电气工程及其自动化班级xxxx学号xxxxx姓名xxxxx时间xxxxxxxxxxxxxxx目录摘要- 1-一、设计任务及要求- 1 -1.1、设计任务- 1 -1.2、设计要求- 1 -二、系统总体结构及工作原理- 1 -2.1系统总体结构- 2 -2.2 系统总体结构及电路图- 2 -三、各模块电路设计- 3 -3.1 AT89C51简介- 3 -3.2 模块电路- 7 -四、软件设计- 10 -4.1 主程序流程图- 10 -4.2、子程序代码- 10 -五、调试说明- 12 -六、总结- 15 -七、参考文献- 1

2、5 -八、附录 源程序源代码清单- 16 -摘要本次设计介绍了基于单片机电子密码锁的设计,该设计硬件主要由AT89C51最小系统、矩阵电路、LCD显示电路、电源电路和报警电路等几部分组成。软件主要由C语言编程。该密码锁由单片机技术,通过矩阵电路设置、修改密码、保护密码,并由LCD显示密码输入,从而实现对密码的设置、保护。关键词:AT89S51, 电子密码锁,矩阵键盘一、设计任务及要求1、设计任务:基于MCS-51系列单片机AT89C51,设计一个通过按键输入开锁的电子密码锁。2、设计要求:(1)通过44的矩阵键盘输入或设定开锁密码;(2)可以通过LCD查看已输入的字符个数显示为*;(3)使用串

3、行EEROM24C02A保存用户设置的密码;(4)使用LED和蜂鸣器指示密码锁的状态;(5)可以通过特殊的按键方法清除用户密码如同时按下特定的多个键;(6)其他功能。二、系统总体结构及工作原理2.1系统总体结构如图1所示系统框图:主要由电源电路、矩阵电路、报警电路、显示电路等几部分组成。图1 系统原理图其流程图如图2所示。开始 系统初始化,LCD 选择A/B判断密码是否正确 密码修改 输入密码 输入原始密码 输入修改密码判断密码是否正确LCD显示修改成功报警启动继电器模拟开锁报警LCD显示否是AB是否图1 系统原理图2.2系统总体电路图及工作原理工作原理:矩阵电路用于输入数字的密码和进行各种功

4、能的实现。可以通过连接单片机的矩阵键盘输入密码,后经过单片机对用户输入的密码与自己保存的密码进行对比,当按下B,输入密码时LED1黄灯亮,输入完毕后等灭,确认后,如果密码正确LED4绿灯亮,若密码错误,LED3亮红灯亮,且蜂鸣器发出声音报警;按下A后重置密码则LED2黄灯亮。然后控制引脚的高低电平传到开锁电路或者报警电路控制开锁还是报警。LCD则是显示密码的输入进程的,输入正确则会显示开锁成功,同时发光二级管灯亮。总体电路图如图3所示。图3 系统总体电路图三、各模块电路设计 3.1.AT89C51简介At89c51是美国公司atmel在1944年以EEPROM技术与Inter公司的80C51内

5、核的使用权进行交换,然后将flash技术与80C51内核相结合,形成了片内带有flash存储器的AT89C51系列的单片机。AT89C51单片机继承了原来单片机的原有功能,而且完全兼容。并且在此基础上增加了一些新的功能,如看门狗定时器WDT、ISP(在系统编程也叫在线编程)及SPI串行接口技术等。片内flash存储器允许在线(+5)电擦除。电写入或使用编程器对其重复编程。此外AT89C51系列单片机的还有具有功耗小,价格低廉,在线的EEPROM可以实现在线编程且可以重复编程,因此受到很多单片机爱好者欢迎。 3.1.1 主要参数(1) 与MCS-51 兼容(2) 4K字节可编程闪烁存储器 (3)

6、 寿命:1000写/擦循环 (4) 数据保留时间:10年 (5) 全静态工作:0Hz-24Hz (6) 三级程序存储器锁定 (7) 128*8位内部RAM (8) 32可编程I/O线 (9) 两个16位定时器/计数器 (10) 5个中断源(11) 可编程串行通道(12) 低功耗的闲置和掉电模式(13) 片内振荡器和时钟电路3.1.2 引脚功能说明 单片机引脚如图4所示 图4 单片机各引脚图40个引脚按其功能科分为三类:(1) 电源及时钟引脚-Vcc、GND;XTAL1、XTAL2。(2) 控制引脚-/PSEN、ALE/PROG、/EA/Vpp、RST(3) I/O口引脚-P0、P1、P2、P3

7、、为四个8为位I/O口的外部引脚下面结合图2一一介绍各引脚的功能(1) 电源引脚(1)Vcc(40)脚:接+5V电源(2)GND(20):接地(2) 时钟引脚(1)XTAL1(19):片内振荡器反相放大器和时钟发生器电路的输入端,当使用片内振荡器时,该引脚连接外部石英晶体和微调电容,当采用外部接时钟源时,该引脚接外部的时钟振荡器的信号。(2) XTAL2(18):片内振荡器的反相放大器的输出端,当使用片内振荡器时,该引脚连接外部石英晶体和微调电容;当采用外部时钟源时、该引脚悬空。(3) 控制引脚此类引脚提供控制信号,有的引脚还具有复用功能。RST(9):复位信号输入端,高电平有效。再次引脚加上

8、持续时间大于2个机器周期的高电平,就可以使单片机复位。在单片机正常工作时,此引脚应为小于且等于0.5V的低电平。/EA/Vpp(31):/EA为该引脚第一功能,既外部程序存储器访问允许控制端。当/EA引脚接高电平时,在PC值不超过0FFF时,将自动转向读取片外60KB(1000H-FFFFH)程序存储器空间中的程序。当/EA引脚接低电平时,只读取外部程序存储器中的内容,读取的地址范围为0000HFFFFH,片内的4KBFlash程序存储器不起作用。Vpp为该引脚的第二功能,既在对片内的Flash进行编程时,Vpp引脚接入编程变压。/PROG、ALE(30):ALE为CPU访问外部程序存储器或外

9、部数据存储器提供一个地址锁存信号,将低8位地址锁存在片外的地址锁存器中。/PROG为该引脚的第二功能,即在片内Flash存储器编程时,此引脚作为编程脉冲的输入端。/PSEN(29):片外程序存储器的读选通信号,低电平有效。4.1.2.3 并行I/O引脚P0:8位,漏极开路的双向I/O口。当AT89C51扩展外部存储器及I/O接口芯片时,P0口作为地址总线及数据总线的分时复用端口。P0口也可作为通用的I/O使用,但需加上拉电阻,这时为准双向口。P1:8位,Pl 是一个带内部上拉电阻的8位双向IO口,Pl的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“l”,通过内部的上拉电阻把

10、端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL),Flash编程和程序校验期间,Pl接收低8位地址。P2 :8位,P2 是一个带有内部上拉电阻的8 位双向IO 口,P2 的输出缓冲级可驱动(吸收或输出电流)4 个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL),在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVXDPTR指令)时,P2口送出高8位地址数据。在访问8 位地址的外部数据存储器(

11、如执行MOVXRi 指令)时,P2 口线上的内容(也即特殊功能寄存器(SFR)区中P2寄存器的内容),在整个访问期间不改变。Flash编程或校验时,P2亦接收高位地址和其它控制信号。P3 :8位,P3 口是一组带有内部上拉电阻的8 位双向I0 口。P3 口输出缓冲级可驱动(吸收或输出电流)4 个TTL逻辑门电路。P3口除了作为一般的I0口线外。此外,P3口还有一些特殊功能,如下所示:1) P3.0 RXD(串行输入口) 2) P3.1 TXD(串行输出口)3) P3.2 /INT0(外部中断0)4) P3.3 /INT1(外部中断1)5) P3.4 T0(记时器0外部输入)6) P3.5 T1

12、(记时器1外部输入)7) P3.6 /WR(外部数据存储器写选通)8) P3.7 /RD(外部数据存储器读选通)3.2模块电路3.2.1矩阵键盘电路本设计就采用行列式键盘,同时也能减少键盘与单片机接口时所占用的I/O线的数目,在按键比较多的时候,通常采用这样方法。 每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要4条行线和4条列线,即可组成具有44个按键的键盘。工作原理:在这种行列式矩阵键盘非键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形

13、式。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成44=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。扫描原理 :把每个键都分成水平和垂直的两端接入,比如说扫描码是从垂直的入,那就代表那一行所接收到的扫描码是同一个bit,而读入扫描码的则是水平,扫描的动作是先输入扫描码,再去读取输入的值,经过比对之后就可知道是哪个键被按下。键盘电路如图5所示。图5 键盘电路图3

14、.2.2 LCD显示电路显示电路设计采用字符型液晶屏显示,显示电路如图6所示。图6 LED显示电路图32.3 报警电路报警电路由5个220电阻、一个NPN型三极管、2个LED-YELLOW、1个LED-RED、1个LED-GERRN及两个电源个接地组成,当按下B,输入密码时LED1黄灯亮,输入完毕后等灭,确认后,如果密码正确LED4绿灯亮,若密码错误,LED3亮红灯亮,且蜂鸣器发出声音报警;按下A后重置密码则LED2黄灯亮。报警电路图如图7所示。 图7 报警电路图四 、软件设计4.1 主程序流程图电子密码锁设计软件设计主程序流程图如图8所示。开始 系统初始化,LCD 选择A/B判断密码是否正确

15、 密码修改 输入密码 输入原始密码 输入修改密码判断密码是否正确LCD显示修改成功报警启动继电器模拟开锁报警LCD显示否是AB是否图8 主程序流程图 4.2子程序代码 (1)初始化系统,设置初始密码如图9所示。图9 初始化代码(2)LCD控制指令如图10所示 图10 LCD控制指令(3)键盘编码如图11。图11 键盘编码(4) 从键值表读入键值12图12 从键值表读入键值五、调试说明系统启动后,LCD显示如下: 图13 LCD显示图 按下操作键A或B操作如下;1) 操作键A:设置新的5位数字(09)密码。2) 操作键B:输入5位数字(09)密码并检查。当按B时,LED1灯亮显示输入5位数字密码

16、,显示如下:图14 按B键后显示器 输完5位密码时,LED1灯熄灭,表示密码输入完毕,再按确认键,密码开始核对,核对通过后,LED4灯亮,表示锁已经打开。如下图: 图15 密码正确当密码输入错误时,蜂鸣器发出警报,LED3灯亮,LCD显示:图16 密码错误 当按下A时,LED2灯亮,LCD显示如下: 图17 按下A后输入5位原始密码后LED2灯熄灭,按确认键,密码核对,如果密码错误,报警提示。如密码正确,LED2灯亮,LCD显示如下:图18 输入密码正确密码修改完成,恢复到起始显示状态。六、总结以上为课程设计期间所设计的基于AT89C51单片机电子密码锁电路,它经过多次修改和整理,以是一个比较

17、不错的设计,可以满足人们的基本要求,但因为水平有限,此电路中也存在一定的问题,譬如说电路的密码不能遗忘,一旦遗忘,就很难打开,这可以通过增加电路解决,但过于复杂,本次设计未其中;通过这两周的设计,学会找到问题并解决问题,譬如在设计过程中遇到些问题,我们获得巨大收获:首先,通过学习使自己对课本上的知识可以应用于实际,比如对绘图软件Pritues的实用及其编程软件UV4的使用,使得的理论与实际相结合,加深自己对课本知识的更好理解,同时实习也段练了我们团结合作精神,能够充分利用图书馆去查阅资料,增加了许多课本以外的知识,能达到学以致用。对我们学生来说,理论与实际同样重要,这是我们以后在工作中说明自己

18、能力的一个重要标准。 实践是检验真理的唯一标准,当然也是检验学习成果的标准。在经过一段时间的学习之后,我们需要了解自己的所学应该如何应用在实践中,因为任何知识都源于实践,归于实践,所以要将所学的知识在实践中来检验。在冯老师的指导下,我能顺利完成本次课程设计,感谢老师!七、参考文献1 楼然苗,胡佳文,等.51系列单片机原理及设计实例M.北京:北京航空航天大学出版社,2010.2 何立民.单片机高级教程应用与设计M.北京: 北京航空航天大学出版社,2000.3 杨旭方.单片机控制与应用实训教程M.北京:电子工业出版社,2010.4 黄仁欣,马彪副主编.单片机原理及运用技术.M北京:清华大学出版社,

19、20055 杨西明,朱骐主编.单片机编程与应用入门M. 北京:机械工业出版社.2004.6 先锋工作室编著.单片机程序设计实例M. 北京: 清华大学出版社.2003. 7 陈粤初。单片机应用系统设计与实践M.北京:北京航空航天大学出版社,19918 王幸之。AT89系列单片机原理与接口技术M。北京:北京航空航天大学出版社, 20049 张毅刚等主编。单片机原理与应用设计M。北京:电子工业出版社, 2008八、附件(1) 系统整机电路原理图图19 系统整机电路原理图(2) 程序清单RS BIT P2.2 ;定义LCD的RS引脚由P2.2引脚控制 RW BIT P2.1 ;定义LCD的RW引脚由P

20、2.1引脚控制 E BIT P2.0 ;定义LCD的E引脚由P2.0引脚控制 ORG 0000H AJMP START ORG 0050HSTART: MOV P0, #01H ;清除LCD屏幕 ACALL ENABLE MOV P0,#38H ;设置LCD为8位点阵方式 ACALL ENABLE MOV P0,#0FH ;开显示 ACALL ENABLE MOV P0,#06H ;移动光标 MOV 50H,#8 MOV 51H,#8 MOV 52H,#0 MOV 53H,#3 MOV 54H,#6 ;设置5位初始密码MAIN: LCALL ENABLE LCALL KSXSHI ;开始显示

21、AA: LCALL KEY ;调用键盘扫描程序 CJNE A,#10,BB ;若不为A键,则跳转为判断是否为B键 LP: ACALL ANAHX AJMP MAIN BB: CJNE A,#11,AA ;若不为B键则重新扫描 ACALL ANBHX LJMP MAINENABLE:CLR RS ;LCD控制指令 CLR RW CLR E LCALL DELAY SETB E RET;*键盘编码部分*KEY: MOV P1,#0F0HKEY0: MOV A,P1 CPL A ANL A,#0F0H MOV R1,A ;读取列线数据并存入R1中 JZ KEY ;若无键按下,则继续扫描KEY1: M

22、OV P1,#0FH MOV A,P1 CPL A ANL A,#0FH MOV R2,A ;读取列线数据并存入R1中 JZ KEY ;若无键按下,则继续扫描TT: JBC F0,WAIT SETB F0 LCALL DELAY SJMP TTGRET: RET;*确定按键值*WAIT: MOV A,P1 ;等待按键释放 CPL A ANL A,#0FH JNZ WAITKEY2: MOV A,R1 MOV R1,#03H MOV R3,#03H CLR CKEY3: RLC A JC KEY4 DEC R1 ;修正列编号 DJNZ R3,KEY3KEY4: MOV A,R2 MOV R2,#

23、00H MOV R3,#03H CLR CKEY5: RRC A JC KEY6 INC R2 ;修正列编号 DJNZ R3,KEY5KEY6: MOV A,R2 CLR C RLC A RLC A ADD A,R1 ;将行线和列线相加得到键值 RET;*开始显示效果*KSXSHI:MOV P0,#80H ACALL ENABLE MOV DPTR,#TABLE3 LCALL WRITE1 ;显示8051 PASSWORD MOV P0,#0C0H LCALL ENABLE MOV DPTR,#TABLE2 LCALL WRITE1 ;显示A OR B KEY RET;*按A后的操作部分*AN

24、AHX: MOV P0,#80H ACALL ENABLE MOV DPTR,#TABLE4 LCALL WRITE1 ;显示SET PASSWORD MOV P0,#0C0H LCALL ENABLE MOV DPTR,#TABLE5 LCALL WRITE1 ;显示 * * * * * LCALL XG_PASS RET;*按B后的操作部分*ANBHX: MOV P0,#80H ACALL ENABLE MOV DPTR,#TABLE6 ;显示SHU RU MI MA LCALL WRITE1 MOV P0,#0C0H LCALL ENABLE MOV DPTR,#TABLE5 ;显示 *

25、 * * * * LCALL WRITE1 LCALL IP_PASS RET;*输入5位密码值*IP_PASS:MOV B,#5 MOV R0,#40H T: CLR P2.3 ACALL KEY SETB P2.3 MOV R0,A ;将从键盘得到的键值依次存入40H,41H,42H,43H,44H单元 INC R0 DJNZ B,T ;循环5次得到5个键值 ACALL KEY CJNE A,#12,PT ;将键值和12比较,看是否为确认键 MOV A,40H CJNE A,50H,KK MOV A,41H CJNE A,51H,KK MOV A,42H CJNE A,52H,KK MOV

26、 A,43H CJNE A,53H,KK MOV A,44H CJNE A,54H,KK ;将密码和初始密码比较,看密码是否正确 CLR P2.7 ;密码正确则LED4绿灯亮 MOV P0,#80H ACALL ENABLE MOV DPTR,#TABLE11 LCALL WRITE1 ;密码正确,输出LOCK OPENED! MOV P0,#0C0H LCALL ENABLE MOV DPTR,#TABLE5 LCALL WRITE1 ;显示 * * * * * MOV B,#100PR: LCALL DELAY DJNZ B,PR SETB P2.7PT: RET;*输错密码时显示ERRO

27、R*KK: CLR P2.6 CLR P2.5 ;密码错误,报警并LED3红灯亮 MOV P0,#80H ACALL ENABLE MOV DPTR,#TABLE10 LCALL WRITE1 ;密码错误,显示PASSWORD ERROR! MOV P0,#0C0H LCALL ENABLE MOV DPTR,#TABLE5 LCALL WRITE1 ;显示 * * * * * MOV B,#50PK: LCALL DELAY DJNZ B,PK SETB P2.5 SETB P2.6 RET;*修改密码操纵部分*XG_PASS:MOV P0,#80H ACALL ENABLE MOV DPT

28、R,#TABLE9 LCALL WRITE1 ;显示INPUT THE MOV P0,#0C0H LCALL ENABLE MOV DPTR,#TABLE8 LCALL WRITE1 ;显示OLD PASSWORD MOV B,#5 MOV R0,#30HYT: CLR P2.4 ;红灯LED2亮,表示可以输入密码,5位输入完毕后,灯灭 ACALL KEY SETB P2.4 MOV R0,A ;将从键盘得到的键值依次存入40H,41H,42H,43H,44H单元 INC R0 DJNZ B,YT ;循环5次得到5个键值 ACALL KEY CJNE A,#12,XT ;判断是否为确认键 MO

29、V A,30H CJNE A,50H,KK MOV A,31H CJNE A,51H,KK MOV A,32H CJNE A,52H,KK MOV A,33H CJNE A,53H,KK MOV A,34H CJNE A,54H,KK ;将从键盘输入的密码与初始密码比较 MOV P0,#80H ACALL ENABLE MOV DPTR,#TABLE9 LCALL WRITE1 MOV P0,#0C0H LCALL ENABLE MOV DPTR,#TABLE7 LCALL WRITE1 ;密码正确则显示INPUT THE NEW PASSWORD MOV B,#5 MOV R0,#50HXT

30、1: CLR P2.4 ;红灯LED2亮,表示可以输入密码,5位输入完毕后,灯灭 ACALL KEY SETB P2.4 MOV R0,A ;将输入的新密码存入原来的旧密码单元 INC R0 DJNZ B,XT1 ACALL KEY CJNE A,#12,XT ;判断是否为确认键 MOV P0,#80H ACALL ENABLE MOV DPTR,#TABLE1 LCALL WRITE1 MOV P0,#0C0H LCALL ENABLE MOV DPTR,#TABLE0 ;显示PASSWORD XIU GAI PASS LCALL WRITE1 XT: RET ;*写数据*WRITE1:MO

31、V R1,#00H A1: MOV A,R1 MOVC A,A+DPTR ;从键值表中读取键值 LCALL WRITE2 INC R1 CJNE A,#00H,A1 RETWRITE2:MOV P0,A SETB RS CLR RW CLR E LCALL DELAY SETB E RETDELAY: MOV R7,#255 D1: MOV R6,#255D2: DJNZ R6,D2 DJNZ R7,D1 RETTABLE11: DB 4CH,4FH,43H,4BH,20H,20H,20H,4FH,50H,45H,4EH,45H,44H,21H DB 20H,21H,00H ;LOCK OPE

32、NED!TABLE10: DB 20H,50H,41H,53H,53H,57H,4FH,52H,44H,20H,45H,52H,52H,4FH DB 52H,21H,00H ;PASSWORD ERROR!TABLE9: DB 20H,49H,4EH,50H,55H,54H,20H,20H,20H,20H,54H,48H,45H,20H DB 20H,20H,00H ;INPUT THETABLE8: DB 20H,4FH,4CH,44H,20H,20H,50H,41H,53H,53H,57H,4FH,52H,44H DB 20H,20H,00H ;OLD PASSWORDTABLE7: DB

33、 20H,4EH,45H,57H,20H,20H,50H,41H,53H,53H,57H,4FH,52H,44H DB 20H,20H,00H ;NEW PASSWORDTABLE6: DB 20H,53H,48H,55H,20H,20H,52H,55H,20H,20H,20H,4DH,49H,20H DB 4DH,41H,00H ;SHU RU MI MATABLE5: DB 20H,20H,20H,2AH,20H,2AH,20H,2AH,20H,2AH,20H,2AH,20H,20H DB 20H,20H,00H ; * * * * *TABLE4: DB 20H,53H,45H,54H,

34、20H,20H,50H,41H,53H,53H,57H,4FH,52H,44H DB 20H,20H,00H ;SET PASSWORDTABLE3: DB 38H,30H,35H,31H,20H,20H,20H,50H,41H,53H,53H,57H,4FH,52H DB 44H,20H,00H ;8051 PASSWORDTABLE2: DB 20H,41H,20H,20H,4FH,52H,20H,20H,42H,20H,20H,4BH,45H,59H DB 20H,20H,00H ;A OR B KEYTABLE1: DB 4DH,49H,20H,4DH,41H,20H,52H,44H,20H,58H,49H,55H,20H,47H DB 41H,49H,00H ;MI MA XIU GAITABLE0: DB 20H,20H,43H,48H,45H,4EH,47H,20H,20H,20H,47H,4FH,4EH,47H DB 20H,20H,00H ;CHENG GONG END

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号