智能温度控制器显示end(如何用实验的方法确定温度控制器的相关参数)

seosqwseo4周前 (04-24)测评日记15

一、急需智能仪器课程设计·· 加急

第1章系统设计 1

1.1温度采集报警系统 1

第2章硬件设计 2

2.1测温和控制电路 2

2.2显示控制电路 5

2.3声光报警电路 6

第3章软件设计 8

总结 9

参考文献 10

附录1整体电路图 11

附录2源程序 12

第1章系统设计

1.1温度采集报警系统

如图1.1所示为温度采集报警系统框图。该课程设计将以单片机控制的温度采集系统为主,利用单片机完成对温度的检测,实现安全温度内正常显示温度值,超出设定的温度上限则进行声光报警。

系统在温度采集时主要应用了DS18B20芯片,该器件经过初始化后单片机首先进行ROM匹配,当受到测温器件发回的信号时证明该器件正常工作,接着单片机发送温度转换命令进行温度采集,测温的精确度很高,可以精确到小数点后四位。设计中还应用了HD7279芯片进行数码管显示的驱动,一共应用了6位数码管。报警电路采用由NE555所组成多谐振荡电路。

图1.1系统框图

第2章硬件设计

2.1测温和控制电路

(1)测温

测温使用的DS18B20是典型的应用单总线技术的器件。1-wire单总线是Maxim全资子公司Dallas的一项专有技术。与目前多数标准串行数据通信方式,如SPI/I2C/MICROWIRE不同,它采用单根信号线,既传输数据位,又传输数据位的定时同步信号,而且数据传输是双向的。大多数1-wire器件不需要额外的供电电源,可直接从单总线上获得足够的电源电流(即寄生供电方式)。它具有节省I/O口线资源、结构简单、成本低廉、便于总线扩展和维护等诸多优点。

1-wire单总线适用于单个主机系统,能够控制一个或多个从机设备。当只有一个从机位于总线上时,系统可按照单节点系统*作;而当多个从机位于总线上时,则系统按照多节点系统*作。

为了较为全面地介绍单总线系统,将系统分为三个部分讨论:硬件结构、命令序列和信号方式(信号类型和时序)。

硬件结构:

顾名思义,单总线只有一根数据线。设备(主机或从机)通过一个漏极开路或三态端口,连接至该数据线,这样允许设备在不发送数据时释放数据总线,以便总线被其它设备所使用。单总线端口为漏极开路,其内部等效电路如图1所示。

单总线要求外接一个约5k的上拉电阻;这样,单总线的闲置状态为高电平。不管什么原因,如果传输过程需要暂时挂起,且要求传输过程还能够继续的话,则总线必须处于空闲状态。位传输之间的恢复时间没有限制,只要总线在恢复期间处于空闲状态(高电平)。如果总线保持低电平超过480μs,总线上的所有器件将复位。另外,在寄生方式供电时,为了保证单总线器件在某些工作状态下(如温度转换期间、EEPROM写入等)具有足够的电源电流,必须在总线上提供强上拉[1]。

(2)控制

At89S51是美国ATMEL公司生产的低电压、高性能CMOS8位单片机;片内含有4k字节的可反复擦写的只读程序存储器(PEROM)和128字节的随机存取数据存储器(RAM);器件采用AMTEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统;片内置通用2位**处理器(CPU)和Flash存储单元,功能强大的AT89C51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。功能特性概述

AT89S51提供以下标准功能:4k字节Flash闪速存储器、128字节内部RAM、32个I/O口线、两个16位定时/计数器、1个5向量两级中断结构、一个全双工串行通信口、片内振荡器及时钟电路,同时,AT89S51可降至0Hz的静态逻辑*作并支持两种软件可选的节电工作模式;空闲方式停止CPU的工作,但允许RAM、定时/计数器、串行通信口及中断系统继续工作;掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作一直到下个硬件复位[2]。

引脚功能说明

Vcc:电源电压

GND:地

P0口:P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口;作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口写“1”可作为高阻抗输入端用。

在访问外部数据存储器或者程序存储器时,这组口线分时转换地址(低8位)和数据总线复用;在访问期间激活内部上拉电阻。

在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时要求外接上拉电阻

P1口:P1是一个带内部上拉电阻的8位双向I/O口;P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路,对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口;作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低会输出一个电流。

Flash编程和程序校验期间,P1接收低8位地址

P2口:P2口是一个带有内部上拉电阻的8位双向I/O口;P2的输出缓冲级可驱动个(吸收或输出电流)4个TTL逻辑门电路,对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口;作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低会输出一个电流。

在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据;在访问8位地址的外部数据存储器(如执行MOVX@RI)时,P2口线上的内容(即特殊功能寄存器(SFR)区中的R2寄存器的内容),在整个访问期间不改变;

Flash编程或校验时,P2亦接收高位地址和其它控制信号。

P3口:P3口是一个带有内部上拉电阻的8位双向I/O口;P2的输出缓冲级可驱动个(吸收或输出电流)4个TTL逻辑门电路,对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口;作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低会输出一个电流。

P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能;如下表2-1所示:

表2-1

端口引脚第二功能

P3.0 RXD(串行输入口)

P3.1 TXD(串行输出口)

P3.2(外中断0)

P3.3(外中断1)

P3.4 T0(定时/计数器0)

P3.5 T1(定时/计数器1)

P3.6(外部数据存储器写选通)

P3.7(外部数据存储器读选通)

P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。

RST:复位输入;当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位

ALE/PROG:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节;即使不访问外部存储器,ALE仍以时钟振荡频率的1/6输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的;要注意的是,每当访问外部数据存储器时将跳过一个ALE脉冲。

如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE*作,该位置位后,只有一条MOVX和MOVC指令ALE才会被激活,此外该引脚会被微弱拉高,单片机执行外部程序时,应该置ALE无效。

EA/VPP:外部访问允许;欲使CPU仅访问外部程学存储器(地址为0000H FFFFH),EA端必须保持低电平(接地)。需要注意的是,如果加密位LB1被编程,复位时内部会锁存EA端的状态[3]。

如EA端为高电平(接Vcc端),CPU则执行内部程序存储器中的指令。

Flash存储编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。

XTML1:振荡器反相放大器的及内部时钟发生器的输入端。

XTML2:振荡器反相放大器的输出端。

图2.1测温和控制电路

2.2显示控制电路

HD7279A是一片具有串行接口的,可同时驱动8位共阴式数码管(或64个LED点阵)的智能显示驱动芯片,该芯片同时还可连接多达64键的键盘矩阵。该芯片内部含有译码器,可直接接受16进制码,HD7279A还同时具有2种译码方式,HD7279(A)还具有多种控制指令,如消隐、闪烁、左移、右移、段寻址等。HD7279与单片机仅需4条接口线,其中CS为片选信号。当MCU访问HD7279时,应将片选端置为低电平。DATA为串行数据/输出端,当向HD7279发送数据时,DATA为输入端;当HD7279A输出键盘代码时,DATA为输出端。其特点为:

-串行接口,无需外围元件可直接驱动LED

-各位独立控制译码/不译码及消隐和闪烁属性

-(循环)左移/(循环)右移指令

-具有段寻址指令,方便控制独立LED

-64键键盘控制器,内含去抖动电路

-有DIP和SOIC两种封装形式供选择

图2.2显示控制电路

2.3声光报警电路

555集成定时器是一种模拟和数字电路相混合的集成电路。它结构简单,使用灵活,用途十分广泛,可以组成多种波形发生器、多谐振荡器、定时延时电路、双稳触发电路、报警电路、检测电路、频率变换电路等。

555定时器的电路原理图及管脚排列图分别如图2.3和2.4所示。

555含有两个比较器A1、A2,其中5端为电压控制端,通过外接一个参考电源,可以改变上、下触发电位值,不用时,可通过一个0.01μF旁路电容接地。4端为触发器复位端,不用时应接高电平。总之,555相当于一个可用模拟电压来控制翻转的R-S触发器。图2.5就是用555构成的多谐振荡电路,产生的振荡脉冲信号经过三极管放大后驱动扬声器报警,由单片机的P1.5端口输出高电平发出报警。

图2.5报警电路

第3章软件设计

该课程设计中主要利用了DS18B20芯片进行测温,该芯片是单总线器件,顾名思义单总线只有一根数据线,因此在通信时时序就显得十分重要,我们在编程时也要十分注意这一点。在程序中测温时首先要对DS18B20进行初始化,初始化过程由单片机发出的复位脉冲和芯片响应的应答脉冲组成,应答脉冲使主机知道,总线上有从机设备,且准备就绪。由于总线上只挂接了一片测温芯片,因此可直接跳过ROM匹配发出测温命令。该设计可实时显示温度值,便于连续观测。系统源程序见附录2。软件流程图如下所示:

图3.1软件流程图

总结

这次课程设计使我掌握了很多实践知识,在老师和同学的帮助下对单片机有了进一步的了解。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,进而提高自己的实际动手能力和独立思考的能力。整个设计过程可以说不是很顺利,因为有很多知识已经淡忘,还有很多新的东西没有掌握,所以这次设计在不断的复习、学习中度过,使我受益匪浅,也使我对单片机的运用有了进一步的了解和掌握,也为今后的学习生活和工作打下良好的基础。后我要衷心感谢老师的辛勤指导,感谢帮助我同学。

参考文献

[1]张毅坤,陈善久.单片微型计算机原理及应用[M].西安:西安电子科技大学出版社,2002.

[2]张友德,赵志英,徐时亮.单片微机原理应用与实验[M].上海:复旦大学出版社,2000.

[3]蔡美琴,张为民,沈新群,张荣娟.MCS-51系列单片机系统及其应用[M].北京:高等教育出版社,1992.

附录1整体电路图

附录2源程序

TEMPH EQU 35H

TEMPL EQU 34H

DQ EQU P1.2;18B20

BIT_COUNT EQU 30H

TIMER EQU 31H

TEN EQU 32H

DATA_IN EQU 20H

DATA_OUT EQU 21H

TIMER1 EQU 33H

DAT BIT P1.0

CLK BIT P1.1

CS BIT P1.3

ORG 0000H

AJMP START

ORG 0003H

LJMP INT0

ORG 0030H

MAIN:

MOV SP,#60H

MOV P1,#11011101

START:

LCALL GET_TEMPER

LCALL CHULI_1;36H-37H-38H存有温度值

LCALL DELAY

LCALL DELAY

SETB P1.4;报警灯灭

CLR P1.5;报警铃停

AJMP START

;--------------------------------------------

GET_TEMPER:

SETB DQ

LCALL INIT_1820;复位

MOV A,0CCH;跳过ROM

LCALL WRITE_1820

MOV A,#44H

LCALL WRITE_1820

LCALL DELAY

LCALL INIT_1820;复位

MOV A,0CCH;跳过ROM

LCALL WRITE_1820

MOV A,#0BEH;读取温度值

LCALL WRITE_1820

LCALL READ_1820;29H(低),28H(高)

RET

;----------------------------------------

INT0:

PUSH PSW

PUSH ACC

MOV DATA_OUT,#15H

LCALL SEND

LCALL RECEIVE

SETB CS

MOV R2,DATA_IN

POP ACC

POP PSW

RETI

;-------------发射子程------------------

SEND:

MOV BIT_COUNT,#8

CLR CS

CALL LONG_DELAY

SEND_LOOP:

MOV C,DATA_OUT.7

MOV DAT,C

SETB CLK

MOV A,DATA_OUT

RL A

MOV DATA_OUT,A

CALL SHOUT_DELAY

CLR CLK

CALL SHOUT_DELAY

DJNZ BIT_COUNT,SEND_LOOP

CLR DAT

RET

;---------------------------------------

RECEIVE:

MOV BIT_COUNT,#8

SETB DAT

CALL LONG_DELAY

RECEIVE_LOOP:

SETB CLK

CALL SHOUT_DELAY

MOV A,DATA_IN

RL A

MOV DATA_IN,A

MOV C,DAT

MOV DATA_IN.0,C

CLR CLK

CALL SHOUT_DELAY

DJNZ BIT_COUNT,RECEIVE_LOOP

CLR DAT

RET

;-------------------------------------

LONG_DELAY:

MOV TIMER,#25;50US

DELAY_LOOP:

DJNZ TIMER,DELAY_LOOP

RET

SHOUT_DELAY:

MOV TIMER,#4;8US

DELAY_LOOP1:

DJNZ TIMER,DELAY_LOOP1

RET

;-------------处理的数据从36H起始-------------

CHULI_1:

MOV 36H,#00H

MOV 37H,#00H

MOV 38H,#00H

MOV C,28H.7

JC FUSHU

MOV TEMPH,28H;高位

MOV TEMPL,29H;低位

INC TEMPH;修正

S1:

MOV A,36H

ADD A,#25H

DA A

MOV 36H,A

MOV A,37H

ADDC A,#06H

DA A

MOV 37H,A

MOV A,38H

ADDC A,#00H

DA A

MOV 38H,A

DJNZ TEMPL,S1

DJNZ TEMPH,S1

LCALL DISPLAY_1

RET

FUSHU:

MOV TEMPH,28H

MOV TEMPL,29H

XRL TEMPL,#0FFH;变为原码

XRL TEMPH,#0FFH

MOV A,TEMPL

ADD A,#01H

MOV TEMPL,A

MOV A,TEMPH

ADDC A,#00H

MOV TEMPH,A

INC TEMPH;修正

S2:

MOV A,36H

ADD A,#25H

DA A

MOV 36H,A

MOV A,37H

ADDC A,#06H

DA A

MOV 37H,A

MOV A,38H

ADDC A,#00H

DA A

MOV 38H,A

DJNZ TEMPL,S2

DJNZ TEMPH,S2

LCALL DISPLAY_2

RET

;----------------------复位子程序----------------

INIT_1820:

SETB DQ

NOP

CLR DQ

;主机发出延时480微秒的复位低脉冲

MOV R1,#3

TSR1:

MOV R0,#80

DJNZ R0,$

DJNZ R1,TSR1

SETB DQ;然后拉高数据线

NOP

NOP

NOP

MOV R0,#25H

TSR2:

JNB DQ,TSR3;等待DS18B20回应

DJNZ R0,TSR2

LJMP TSR4;延时

TSR3:

SETB F0;置标志位,表示DS1820存在

LJMP TSR5

TSR4:

CLR F0;清标志位,表示DS1820不存在

LJMP TSR7

TSR5:

MOV R0,#117

TSR6:

DJNZ R0,TSR6;时序要求延时一段时间

TSR7:

SETB DQ

RET

;-------------------------------------------------

;写DS18B20的子程序(有具体的时序要求)

WRITE_1820:

MOV R2,#8;一共8位数据

CLR C

WR1:

CLR DQ;置低电平,开始写输出

MOV R3,#6

DJNZ R3,$

RRC A

MOV DQ,C

MOV R3,#23

DJNZ R3,$

SETB DQ

NOP

DJNZ R2,WR1

SETB DQ

RET

;-------------------------------------------------

;读DS18B20的程序,从DS18B20中读出两个字节的温度数据

READ_1820:

MOV R4,#2;将温度高位和低位从DS18B20中读出

MOV R1,#29H;低位存入29H(TEMPER_L),高位存入28H(TEMPER_H)

RE00:

MOV R2,#8;数据一共有8位

RE01:

CLR C

SETB DQ

NOP

NOP

CLR DQ

NOP

NOP

NOP

SETB DQ

MOV R3,#9

RE10:

DJNZ R3,RE10

MOV C,DQ

MOV R3,#23

RE20:

DJNZ R3,RE20

RRC A

DJNZ R2,RE01

MOV@R1,A

DEC R1

DJNZ R4,RE00

RET

;---------------------显示程序----------------------

DISPLAY_1:

MOV DATA_OUT,#0A4H;复位

LCALL SEND

SETB CS

MOV A,36H

ANL A,#0FH

MOV R3,A

MOV DATA_OUT,#10000000B

LCALL SEND

MOV DATA_OUT,R3

LCALL SEND

MOV A,36H

SWAP A

ANL A,#0FH

MOV R3,A

MOV DATA_OUT,#10000001B

LCALL SEND

MOV DATA_OUT,R3

LCALL SEND

MOV A,37H

ANL A,#0FH

MOV R3,A

MOV DATA_OUT,#10000010B

LCALL SEND

MOV DATA_OUT,R3

LCALL SEND

MOV A,37H

SWAP A

ANL A,#0FH

MOV R3,A

MOV DATA_OUT,#10000011B

LCALL SEND

MOV DATA_OUT,R3

LCALL SEND

MOV A,38H

ANL A,#0FH

ORL A,#80H;DP=1

MOV R3,A

MOV DATA_OUT,#84H

LCALL SEND

MOV DATA_OUT,R3

LCALL SEND

MOV A,38H

SWAP A

ANL A,#0FH

MOV R3,A

MOV DATA_OUT,#85H

LCALL SEND

MOV DATA_OUT,R3

LCALL SEND

;判断是否报警,设为50度--38H

MOV A,38H

ANL A,#0F0H

SWAP A

MOV R4,A

MOV A,#00H

BCD_H:

ADD A,#0AH

DJNZ R4,BCD_H

MOV 40H,A

MOV A,38H

ANL A,#0FH

ADD A,40H

SUBB A,#32H

JC JIXU;判断温度

CLR P1.4;报警灯亮

SETB P1.5;报警

JIXU:;小于50度

RET

;-----------------------------------------

DISPLAY_2:

MOV DATA_OUT,#0A4H;复位

LCALL SEND

SETB CS

MOV A,36H;直接取高位

SWAP A

ANL A,#0FH

MOV R3,A

MOV DATA_OUT,#10000000B

LCALL SEND

MOV DATA_OUT,R3

LCALL SEND

MOV A,37H

ANL A,#0FH

MOV R3,A

MOV DATA_OUT,#10000001B

LCALL SEND

MOV DATA_OUT,R3

LCALL SEND

MOV A,37H

SWAP A

ANL A,#0FH

MOV R3,A

MOV DATA_OUT,#10000010B

LCALL SEND

MOV DATA_OUT,R3

LCALL SEND

MOV A,38H

ANL A,#0FH

ORL A,#80H;DP=1

MOV R3,A

MOV DATA_OUT,#83H

LCALL SEND

MOV DATA_OUT,R3

LCALL SEND

MOV A,38H

SWAP A

ANL A,#0FH

MOV R3,A

MOV DATA_OUT,#84H

LCALL SEND

MOV DATA_OUT,R3

LCALL SEND

MOV DATA_OUT,#85H

LCALL SEND

MOV DATA_OUT,#0AH

LCALL SEND

RET

;------------------------------------------

DELAY:

MOV R5,#06H;750ms

DELAY2:

MOV R7,#0H

DELAY1:

MOV R6,#0H

DJNZ R6,$

DJNZ R7,DELAY1

DJNZ R5,DELAY2

RET

;------------------------------------------

END

二、如何用实验的方法确定温度控制器的相关参数

智能控制方法。智能温度控制方法包括自适应控制算法、智能PID算法以及参数自整定方法。自适应控制算法能根据控制对象的特点建立数学模型,通过一系列优化运算决定控制量的大小。智能PID算法是在纂本PID算法的基础上,附加一些新的规则使PID调节适应过程变量的变化,达到较好的控制效果。控制器不仅能完成PID参数自整定,而且还能在程序运行中,根据给定条件调用不同的PID参数组。

多种工作方式。智能温度控制器具有准备(READY)、运行(RUN)、保持(HOLD)、测试(TEST)、结束(END)、PV启动、自动(AUTO)、手动(MANUAL)等多种工作方式,以满足温度过程控制的需要。

强大的程序功能。支持工艺曲线数量,每条工艺曲线的段数,参数的设置范围,曲线的链接和循环,各种**的数量等内容反映了控制器的程序处理能力。例如DCP31智能温度控制器,工艺曲线数量19条,每条工艺曲线30段,时间设置范围从0到99小时59分,曲线的链接0~19,程序循环次数0~9999,还有8种*作和时间**在编程时可供选择。

多种报警设置。智能温度控制韶支持多种报警形式,如温度上、下限报警,温度偏差报警,温度绝对值报警等,报警是否生效,在什么条件下报警都可以通过参数设置完成。

模块化结构。硬件和软件的模块化结构是智能温度控制器的一大特点,根据使用者的不同要求,采用不同的模块组合,完成特定的控制功能。在进行选择时,主要考虑与输人信号有关的输人模块,与输出控制相关的输出模块,与数据通讯相关的通讯模块及与控制相关的控制模块等。

参数化设置。简单而方便的参数化设置,使得智能温度控制器应用更加灵活,强大的控制能力和过程适应性都是通过参数设置完成的。参数可分为功能参数、传感器参数、控制参数和工艺参数等4类。功能参数决定了控制器的软硬件组成和结构,传感器参数与输人信号有关,控制参数与过程变量控制有关,工艺参数取决于现场工艺要求。

较强的过程显示功能。智能温度控制器采用LED或LCD显示器,支持测量值(PV),设定值(SP),程序号,段号,工艺曲线,工作状态和工作信息显示等。这些显示信息基本能满足温度过程控制要求,使*作者一目了然地观察到控制器工作状态,了解过程控制变量的变化情况。

相关文章

海信电视55E3G-PRO55英寸4K超清120Hz防抖质量好吗

海信电视55E3G-PRO55英寸4K超清120Hz防抖质量好吗

很多小伙伴在关注海信电视55E3G-PRO55英寸4K超清120Hz防抖怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分享和相应的优惠信息,为大家推荐一款高性...

小米(MI)小米电视55英寸E55S超高清4K全面屏Pro蓝牙语音控制2G+32G网络平板电视机怎么样

小米(MI)小米电视55英寸E55S超高清4K全面屏Pro蓝牙语音控制2G+32G网络平板电视机怎么样

很多小伙伴在关注小米(MI)小米电视55英寸E55S超高清4K全面屏Pro蓝牙语音控制2G+32G网络平板电视机怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用...

Vidda43英寸使用心得反馈

Vidda43英寸使用心得反馈

很多小伙伴在关注Vidda43英寸怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分享和相应的优惠信息,为大家推荐一款高性价比的产品,一起来看看吧。...

TCL电视75Q10G质量好不好

TCL电视75Q10G质量好不好

很多小伙伴在关注TCL电视75Q10G怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分享和相应的优惠信息,为大家推荐一款高性价比的产品,一起来看看吧。...

Camorama凯眸4K全景运动摄像机车载支架测评怎么样

Camorama凯眸4K全景运动摄像机车载支架测评怎么样

很多小伙伴在关注Camorama凯眸4K全景运动摄像机车载支架怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分享和相应的优惠信息,为大家推荐一款高性价比的产品...

六品堂课程专拍链接质量好不好

六品堂课程专拍链接质量好不好

很多小伙伴在关注六品堂课程专拍链接怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分享和相应的优惠信息,为大家推荐一款高性价比的产品,一起来看看吧。...