11电信赵仵龙51_课设报告1.docx

上传人:来看看 文档编号:3322570 上传时间:2019-08-12 格式:DOCX 页数:33 大小:784.66KB
返回 下载 相关 举报
11电信赵仵龙51_课设报告1.docx_第1页
第1页 / 共33页
11电信赵仵龙51_课设报告1.docx_第2页
第2页 / 共33页
11电信赵仵龙51_课设报告1.docx_第3页
第3页 / 共33页
11电信赵仵龙51_课设报告1.docx_第4页
第4页 / 共33页
11电信赵仵龙51_课设报告1.docx_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《11电信赵仵龙51_课设报告1.docx》由会员分享,可在线阅读,更多相关《11电信赵仵龙51_课设报告1.docx(33页珍藏版)》请在三一文库上搜索。

1、目 录一、设计任务要求2 1.1、任务选择2 1.2、任务要求分析及实现2二、设计方案与原理2 2.1.硬件电路方案选择2 2.2、硬件电路设计原理 2 2.3软件部分的设计11三、运行结果及分析17 3.1.电子钟仿真结果17 3.2.AD转换器仿真结果18四、设计总结18五、参考文献18一、设计任务及要求 1.1、任务选择 按照老师要求,必须完成课程设计任务书的两项任务,任务书中总共有30项任务,可任选两项。经仔细阅读任务书,结合自己对STC89C51的掌握情况,我选择任务24和任务30。分别如下: (1)、任务 24:可调数字钟系统,要求支持小时、分、秒数字显示,并且支持小时、分手动调节

2、与复位功能。 (2)、任务 30:设计单片机外接 A/D 控制器,并将 AD 转换的数据送数码管显示。 1.2、任务要求分析及实现: (1)、任务24分析:本任务要求制作简易电子钟,并且时、分、秒可手动调节,可用STC89C51内部定时器T0或T1实现准确定时,用6位数码管分别显示时、分、秒,也可用1602液晶显时间。 (2)、任务30分析:由于硬件电路限制,此A/D转换器只能用STC89C51开发板上的ADC0804芯片结合数码管来完成8位A/D转换。二、设计方案与原理 2.1.硬件电路方案选择 (1)、可调数字钟方案选择与论证: 方案一:用内部定时器T1通过计算初值和循环实现定时1秒,用六

3、位数码管分别显示时、分、秒。 方案二:用内部定时器T1通过计算初值和循环实现定时1秒,用1602液晶显示屏显示时间。 用六位数码管虽然可以分别显示时、分、秒,但是的STC89C51I/O口并不是直接和数码管的7段相连,来传输数据。由于STC89C51的I/O较少,为了节省I/O,通过74LS573做扩展同时对I/O输出数据进行锁存。所以数码管的片选和段选均要经过74LS573来进行数据锁存,而,电子钟要求显示时、分、秒用到的数码管较多,编写程序就比较麻烦。而,1602液晶显示屏只要求定义好写地址和写命令即可显示时间,方便快捷,美观。 综上所述:可调数字钟选用方案二进行设计。 (2)、A/D转换

4、电路设计思路: 选用STC89C51开发板上的ADC0804进行AD采样,并将采样结果量化后送到51的P1口,然后通过控制锁存器打开数码管的片选和段选将采样值显示出来。 2.2、硬件电路设计原理 1、STC89C51简介: STC系列单片机是美国STC公司最新推出的一种新型51内核的单片机。片内含有Flash程序存储器、SRAM、UART、SPI、AD、PWM等模块。该器件的基本功能与普通的51单片机完全兼容。主要功能、性能参数:(1).内置标准51内核,机器周期:增强型为6时钟,普通型为12时钟;(2).工作频率范围:040MHZ,相当于普通8051的080MHZ;(3).STC89C5xR

5、C对应Flash空间:4KB8KB15KB;(4).内部存储器(RAM):512B;(5).定时器计数器:3个16位;(6).通用异步通信口(UART)1个;(7).中断源:8个;(8).有ISP(在系统可编程)IAP(在应用可编程),无需专用编程器仿真器;(9).通用IO口:3236个;(10).工作电压:3.85.5V;(11).外形封装:40脚PDIP、44脚PLCC和PQFP等2. 89C51单片机的引脚功能说明(1)VCC:电源电压(2)GND:地(3)P0口:P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电

6、路,对端口P0写“1”时可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复位,在访问期间激活内部上拉电阻。 (4)P1口:P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTE逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(ILL)。与AT89C51不同之处是,P1.0和P1.1还可分别作为定时/计数器2的外部计数输入(P 1.0/T2)和输入(P 1.1/T2EX ), Flash编程和程序校验

7、期间,P1接收低8位地址。表2-2-1 P1.0和P1.1的第二功能引 脚 号 功能特性P1.0T2(定时/计数器2外部计数脉冲输入),时钟输出P1.1T2EX(定时/计数2捕获/重装载触发和方向控制) 表2-2-1(5)P2口:P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口P2写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(ILL)。在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX DPTR指令)时,P2口送出高8位

8、地址数据。在访问8位地址的外部数据存储器(如执行MOVX RI指令)时,P2口输出P2锁存器的内容。(6)P3口:P3口是一组带有内部上拉电阻的8位双向I/O口。P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。此时,被外部拉低的P3口将用上拉电阻输出电流(ILL)。P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,如表4-2所示。 (7) RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。表2-2-2 P3口的第二功能:端口引脚第二功能P3.0RXD(串行输入口)P3.1

9、TXD(串行输出口)P3.2(外中断0)P3.3(外中断1)P3.4T0(定时/计数0)P3.5T1(定时/计数1)P3.6(外部数据存储器写选通)P3.7(外部数据存储器读选通) 表2-2-2(8)/VPP:外部访问允许。欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH ) 。端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存端状态。如端为高电平(接VCC端),CPU则执行内部程序存储器中的指令。Flash存储器编程时,该引脚加上+12V的编程允许电源VPP,当然这必须是该器件是使用12V编程电压VCC 。(9)XTAL1:振荡器反相放大器的及内部时钟

10、发生器的输入端。(10)XTAL2:振荡器反相放大器的输出端。3、74LS573锁存器工作原理: (1)、74LS573 的八个锁存器都是透明的D 型锁存器,当使能(G)为高时,Q 输出将随数据(D)输入而变。当使能为低时,输出将锁存在已建立的数据电平上。输出控制不影响锁存器的内部工作,即老数据可以保持,甚至当输出被关闭时,新的数据也可以置入。这种电路可以驱动大电容或低阻抗负载,可以直接与系统总线接口并驱动总线,而不需要外接口。特别适用于缓冲寄存器,I/O 通道,双向总线驱动器和工作寄存器。 真值表: 输出 enableLatch ENABLE启用D输出OLHHHLHLLLLXQOHXXZ 表

11、2-2-3H=高电平 L=低电平 =不定 Z=高阻态QO=建立稳态输入条件前Q的电平引脚功能表: Pin Names管脚号 Description 功能D0D7 Data Inputs数据输入LE Latch Enable Input (Active HIGH) 锁存使能输入(高电平有效) OE 3-STATE Output Enable Input (Active LOW) 3态输出使能输入(低电平有效)O0O7 3-STATE Latch Outputs 3态锁存输出 表2-2-4(2)51开发板的原理图: 表2-2-54、7段数码管工作原理及原理图: (1)、7段数码管一般由8个发光二极

12、管组成,其中由7个细长的发光二极管组成数字显示,另外一个圆形的发光二极管显示小数点。当发光二极管导通时,相应的一个点或一个笔画发光。控制相应的二极管导通,就能显示出各种字符,尽管显示的字符形状有些失真,能显示的数符数量也有限,但其控制简单,使有也方便。发光二极管的阳极连在一起的称为共阳极数码管,阴极连在一起的称为共阴极数码管。 (2)、硬件电路原理图: 表2-2-65、1602液晶显示原理 (1)、液晶显示原理 液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前

13、已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。 (2)、液晶显示器的分类 液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。除了黑白显示外,液晶显示器还有多灰度有彩色显示等。如果根据驱动方式来分,可以分为静态驱动(Static)、单纯矩阵驱动(SimpleMatrix)和主动矩阵驱动(ActiveMatrix)三种。液晶显示器各种图形的显示原理:线段的显示点阵图形式液晶由MN个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共168=128个点组成,屏上6416个显示单元与显示RAM区1024字节

14、相对应,每一字节的内容和显示屏上相应位置的亮暗对应。例如屏的第一行的亮暗由RAM区的000H00FH的16字节的内容决定,当(000H)=FFH时,则屏幕的左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,则屏幕的右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=00H,(00EH)=00H,(00FH)=00H时,则在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线。这就是LCD显示的基本原理。字符的显示用LCD显示一个字符时比较复杂,因为一个字符由68或88点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为

15、“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。这样一来就组成某个字符。但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可。 (3)原理图如下: 表2-2-77、A/D转换模块: ADC0804工作原理: (1)、(A/D转换概念:即模数转换(Analog to Digital),输入模拟量(比如电压信号),输出一个与模拟量相对应的数字量(常为二进制形式)。例如参考电压VREF为5V,采用8位的模数转换器时,当输入电压为0V时,输出的数字量为000

16、0 0000,当输入的电压为5V时,输出的数字量为1111 1111。当输入的电压从从0V到5V变化时,输出的数字量从0000 0000到1111 1111变化。这样每个输入电压值对应一个输出数字量,即实现了模数转换。 (3)、分辨率概念:分辨率是指使输出数字量变化1时的输入模拟量,也就是使输出数字量变化一个相邻数码所需输入模拟量的变化值。分辨率与A/D转换器的位数有确定的关系,可以表示成FS / 2 n 。FS表示满量程输入值,n为A/D转换器的位数。例如,对于5V的满量程,采用4位的ADC时,分辨率为5V/16=0.3125V (也就是说当输入的电压值每增加0.3125V,输出的数字量增加

17、;采用8位的ADC时,分辨率为5V/25619.5mV(也就是说当输入的电压值每增加19.5mV,则输出的数字量增加1);当采用12位的ADC时,分辨率则为5V/40961.22mV(也就是说当输入的电压值每增加1.22mV ,则输出的数字量增加1)。显然,位数越多,分辨率就越高。 (4)、ADC0804引脚功能:CS:芯片片选信号,低电平有效。即CS=0时,该芯片才能正常工作,高电平时芯片不工作。在外接多个ADC0804芯片时,该信号可以作为选择地址使用,通过不同的地址信号使能不同的ADC0804芯片,从而可以实现多个ADC通道的分时复用。WR:启动ADC0804进行ADC采样,该信号低电平

18、有效,即WR信号由低电平变成高电平时,触发一次ADC转换。RD:低电平有效,即RD=0时,DAC0804把转换完成的数据加载到DB口,可以通过数据端口DB0DB7读出本次的采样结果。VIN(+)和VIN(-):模拟电压输入端,单边输入时模拟电压输入接VIN(+)端,VIN(-)端接地。双边输入时VIN(+)、VIN(-)分别接模拟电压信号的正端和负端。当输入的模拟电压信号存在“零点漂移电压”时,可在VIN(-)接一等值的零点补偿电压,变换时将自动从VIN(+)中减去这一电压。VREF/2:参考电压接入引脚,该引脚可外接电压也可悬空,若外接电压,则ADC的参考电压为该外界电压的两倍,如不外接,则

19、VREF与Vcc共用电源电压,此时ADC的参考电压即为电源电压Vcc的值。CLKIN和CLKR:外接RC振荡电路产生模数转换器所需的时钟信号,时钟频率CLK = 1/1.1RC,一般要求频率范围100KHz1460KHz。AGND和DGND:分别接模拟地和数字地。 INTR:转换结束输出信号,低电平有效,当一次A/D转换完成后,将引起INTR=0,实际应用时,该引脚应与微处理器的外部中断输入引脚相连(如51单片机的INT0,INT1脚),当产生INTR信号有效时,还需等待RD=0才能正确读出A/D转换结果,若ADC0804单独使用,则可以将INTR引脚悬空。DB0DB7:输出A/D转换后的8位

20、二进制结果。 (5)、 ADC0804工作过程: a.启动转换:由图2-2-8中的上部“FIGURE 10A”可知,在CS信号为低电平的情况下,将WR引脚先由高电平变成低电平,经过至少tW(WR)I 延时后,再将WR引脚拉成高电平,即启动了一次AD转换。 b延时等待转换结束:依然由图6中的上部“FIGURE 10A”可知,由拉低WR信号启动AD采样后,经过1到8个Tclk+INTERNAL Tc延时后,AD转换结束,因此,启动转换后必须加入一个延时以等待AD采样结束。 c.读取转换结果:由图2-2-8的下部“FIGURE 10B”可知,采样转换完毕后,在CS信号为低的前提下,将RD脚由高电平拉

21、成低电平后,经过tACC的延时即可从DB脚读出有效的采样结果。图2-2-8:ADC0804手册给出的ADC转换时序图(6)原理图如下: 图2-2-98、矩阵键盘原理及电路图 (1)、矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。在行线和列线的每一个交叉点上,设置一个按键。这样键盘中按键的个数是44个。这种行列式键盘结构能够有效地提高单片机系统中I/O口的利用率。 (2)、44矩阵键盘的编程方法:先读取键盘的状态,得到按键的特征编码。先从P1口的高四位输出低电平,低四位输出高电平,从P1口的低四位读取键盘状态。再从P1口的低四位输出低电平,高四位输出高电平

22、,从P1口的高四位读取键盘状态。将两次读取结果组合起来就可以得到当前按键的特征编码。使用上述方法我们得到16个键的特征编码。举例说明如何得到按键的特征编码: 假设“1”键被按下,找其按键的特征编码。从P1口的高四位输出低电平,即P1.4P1.7为输出口。低四位输出高电平,即P1.0P1.3为输入口。读P1口的低四位状态为“1101”,其值为“0DH”。再从P1口的高四位输出高电平,即P1.4P1.7为输入口。低四位输出低电平,即P10P13为输出口,读P1口的高四位状态为“1110”,其值为“E0H”。将两次读出的P0口状态值进行逻辑或运算就得到其按键的特征编码为“EDH”。用同样的方法可以得

23、到其它15个按键的特征编码。 (3)原理图如下: 图2-2-102.3软件部分的设计: 1、计时模块流程图如下图所示。保护现场重装定时器初值循环次数减1否满20次?是秒单元加1否60s到?是秒单元清0,分单元加1否60分到?是分单元清0,时单元加1否24小时到?是时单元清0恢复现场返回 2、电子钟C语言程序如下: /*LCD数字中显示,时,分,秒手动按键可调,按下S4时,光标第一次显示到秒,此刻再按S8秒加1,按S12秒减1,同来可调时,分,当时调节完后,再按S4依次,光标消失,数字钟开始走*/#include#define uchar unsigned char#define uint un

24、signed intsbit dula=P26;/关闭所有数码管和二极管sbit wela=P27;sbit lcdrs=P35; /申明LCD使能端sbit lcden=P34;sbit s1=P30;sbit s2=P31;sbit s3=P32;sbit rd=P37;uchar code table=DX zhao-wu-long;uchar code table1= 00:00:00;uchar count,num,s1num; char shi,fen,miao;void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);vo

25、id write_com(uchar com)/写指令lcdrs=0; P0=com; delay(5); lcden=1; delay(5); lcden=0;void write_date(uchar date) /写数据lcdrs=1; P0=date; delay(5); lcden=1; delay(5);lcden=0;void init() /初始化函数dula=0;wela=0;lcden=0; write_com(0x38); /设置显示16*2,5*7点阵,8位数据接口 write_com(0x0c); /设置光标 write_com(0x06); /设置移位 write_

26、com(0x01); /显示清屏 write_com(0x80); for(num=0;num15;num+) /第一行显示的数组 write_date(tablenum);delay(5); write_com(0x80+0x40);/第二行显示数组 for(num=0;num12;num+) write_date(table1num);delay(5);TMOD=0x01; /选择定时器T0,工作方式1TH0=(65536-50000)/256; /初始化TL0=(65536-50000)%256;EA=1; /开总中断ET0=1; /打开T0中断TR0=1; /启动T0void writ

27、e_sfm(uchar add,uchar date)/定位显示数据函数 uchar shi,ge; shi=date/10; ge=date%10; write_com(0x80+0x40+add); write_date(0x30+shi); write_date(0x30+ge);void keyscan() /键盘扫描函数rd=0; if(s1=0) delay(1);if(s1=0); s1num+; while(!s1); /松手检测 if(s1num=1) TR0=0; write_com(0x80+0x40+10); /时间调整 write_com(0x0f); if(s1nu

28、m=2) /调整分 write_com(0x80+0x40+7); if(s1num=3) /调整秒 write_com(0x80+0x40+4); if(s1num=4) TR0=1; write_com(0x0c); s1num=0; if(s1num!=0) if(s2=0) /S2按下时时分秒相应的加1 delay(5);if(s2=0) while(!s2); if(s1num=1) miao+; /按S2秒加1 if(miao=60)miao=0; write_sfm(10,miao); write_com(0x80+0x40+10); if(s1num=2) fen+; /分加1

29、 if(fen=60)fen=0; write_sfm(7,fen); write_com(0x80+0x40+7); if(s1num=3) shi+; /时加1 if(shi=24) shi=0; write_sfm(4,shi); write_com(0x80+0x40+4); if(s3=0) /按下S3键时分时秒 减1 delay(5);if(s3=0) while(!s3); if(s1num=1) miao-; /秒减1 if(miao=-1) miao=59; write_sfm(10,miao); write_com(0x80+0x40+10); if(s1num=2) fe

30、n-; if(fen=-1) fen=59 /分减1 write_sfm(7,fen); write_com(0x80+0x40+7); if(s1num=3) shi-;/时时 减1 if(shi=-1) shi=23; write_sfm(4,shi); write_com(0x80+0x40+4); void main() init(); TMOD=0x01; /选择定时器T0,工作方式0 TH0=(65536-50000)/256; /初始化 TL0=(65536-50000)%256; EA=1; /开总中断 ET0=1; /打开T0中断 TR0=1; /启动T0 while(1)

31、keyscan(); if(count=20) count=0;miao+; if(miao=60) miao=0; fen+; if(fen=60) fen=0; shi+;if(shi=24)shi=0;write_sfm(4,shi); write_sfm(7,fen); write_sfm(10,miao);void time0() interrupt 1 /中断函数TH0=(65536-50000)/256; TL0=(65536-50000)%256; /重装初值count+;3.A/D转换电路C程序如下: /*调节W3电位器ADC0804模数转换后的数字量会显示在数码管上*/#i

32、nclude #define uchar unsigned char #define uint unsigned intsbit wr=P36;sbit rd=P37;sbit wela=P27;sbit dula=P26;sbit dio=P25;uchar dispbuf6;uchar code disptab=0x3f,0x6,0x5b,0x4f,0x66,0x6d,0x7d,0x27,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x0;uchar code dispbit=0xfe,0xfd,0xfb,0xf7,0xef,0xdf;uchar a;v

33、oid delay(uint x)uchar i,j;for(i=x;i0;i-)for(j=110;j0;j-);void Init_timer0()TMOD=0x01;TH0=(65535-5000)/256;TL0=(65535-5000)%256;EA=1;ET0=1;TR0=1;void timer0() interrupt 1uchar tmp;staticuchar count;P0|=0x3f; /关闭所有数码管,wela=1;tmp=dispbitcount; /数码管位选数组P0&=tmp;wela=0;dula=1;tmp=dispbufcount; /空数组tmp=di

34、sptabtmp;/数码管段选数组P0=tmp;dula=0;count+;if(count=6)count=0; TH0=(65535-5000)/256;TL0=(65535-5000)%256;dispbuf0=a/100;dispbuf1=a%100/10;dispbuf2=a%100%10;void main()Init_timer0(); dispbuf5=0xff;dispbuf4=0xff;dispbuf3=0xff;/关闭数码管 dio=1;/打开二极管wela=1;P0&=0x7f;wela=0;while(1)wr=0;delay(10);wr=1;delay(20);r

35、d=0;delay(1);rd=1;/完成采样a=P1;/采样的数据送去显示delay(200);三、运行结果及分析 3.1、电子钟在STC8951开发板上的运行结果: 图3-1-1 在1602液晶80B的RAM缓冲区的00-0F字节地址显示DX zhao-wu-long,在40-50字节地址显示时间,有图可知,1602显示正确,并且正常计时。3.2、A/D转换在开发板上的运行结果 图3-2-1 ADC0804是8位的AD转换器,芯片把采样结果送回P1口后经过处理让数码管显示范围在0-255之间,符合要求。同时转动W3滑动变阻器可以进行内部采样,在J6的1、2端口接线可进行外部采样。四、设计总

36、结 本来觉得自己单片机学的比较好,做老师给的任务应该会轻而易举,结果发现并非如此。尤其是在编程时,总体思路看起来确实没问题,但,在板子上运行就是不能达到预期的效果,在调电子钟的程序时,开始时钟不能正常计时,后来又不能通过按键控制,经过模块程序的反腐调节,最终才调好。在调节A/D转换的程序时,开始,根本无法采样到具体的值,数码管一直显示的乱码,经过一个下午的检查,发现自己的写,读时序不正确,改过来以后,最终实现了对内部和外部的采样。通过这一次课程设计,发现自己不懂的方面还很多,需要加强联系,尤其是编程,要经常练。五、参考文献1 谢自美电子线路设计实验测试M武汉:华中理工大学出版社,1992.2 何立民单片机应用系统设计M北京:北京航空航天大学出版社,1993.3 楼然笛单片机开发M.北京:人民邮电出版社,1994.4 付家才单片机控制工程实践技术M北京:化学工业出版社 2004.3.5 李光才单片机课程设计实例指导M北京:北京航空航天大学出版2004.6 朱定华单片机原理及接口技术实验M北京:北方交通大学出版2002.11.33

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

当前位置:首页 > 建筑/环境 > 装饰装潢


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