加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 匠人手记

匠人手记.pdf

匠人手记

天道
2011-04-19 0人阅读 举报 0 0 暂无简介

简介:本文档为《匠人手记pdf》,可适用于IT/计算机领域

《匠人手记》网络版从从零零开开始始玩玩转转PPIICC之之旋旋转转时时钟钟作者:程序匠人发布日期:EMAIL:zjartisanhotmailcom《匠人的百宝箱》博客:http:cxjricorg《匠人手记》书友会:http:groupednchinacom看《匠人手记》与匠人同行!手记目录手记从零开始玩转PIC之旋转时钟一、前言二、准备工作与快速上手、芯片资源、软件开发环境MPLABIDEv、编译器picc、MPLABICD硬件调试及编程工具、ICD的连接顺序、从最简单的测试程序开始三、旋转时钟功能概述、基板、电机、指针板、红外遥控器、上位机四、指针板的供电方式、常见的供电方式、匠人采用的供电方式及结构、电源与串口信号的电路通路的复用五、显示处理、显示内容、驱动电路、显示程序、特殊显示画面的实现、字符、图片的显示、英文字符字库、汉字字库六、串口通讯、通讯协议、通讯协议的细节考虑、串口处理程序、串口的调试、用串口控制蜂鸣器七、温度处理、热敏电阻、硬件电路、软件程序八、内置EEPROM、需要在掉电后仍旧被记忆保存的数据、内置EEPROM的应用九、基板、规划、串口控制命令十、指针板源程序、概述、公共头文件commonh、主程序文件minc、主程序头文件mainh、中断服务程序文件Interruptionc、中断服务程序头文件Interruptionh、显示处理程序文件displayc、显示处理程序头文件displayh、温度处理程序文件temperaturec、温度处理程序头文件temperatureh、滤波处理程序文件filterc、滤波处理程序头文件filterh、串行通讯程序文件Serialc、串行通讯程序头文件Serialh、内部EEPROM操作程序文件eepromc、内部EEPROM操作程序头文件eepromh十一、硬件电路、指针板原理图、基板原理图、遥控器原理图十二、后记十三、附录:《匠人手记》简介、《匠人手记》内容简介、《匠人手记》目录、《匠人手记》封面及内页、《匠人手记》热销情况、《匠人手记》被各界推荐、《匠人手记》读者热评、购书渠道、相关连接、《匠人手记》书友会Q群、《匠人手记》网络版版权声明《匠人手记》网络版《从零开始玩转PIC之旋转时钟》第页手记从零开始玩转PIC之旋转时钟一、前言事情起源于年上半年的一个PIC的研讨会。据说参加该研讨会都可以元购买一套ICD(LE版即简化版省略了串口)。于是匠人就兴冲冲报名去参加了。没想到去了之后却被告知现场只有套ICD现货。如果要买必须先领取一张所谓的优惠券然后再凭优惠券到个月之后购买。而要获得优惠券就必须先填写一张意见反馈表。而要获得意见反馈表就必须听完课程。晕头晕脑间匠人总算搞明白了该ICD物品获取攻略如下:报到入场〉老老实实听课〉午餐〉获得意见反馈表〉填写意见反馈表换取优惠券〉登记〉回家〉待个月之后凭优惠券向代理商购买。这简直比游戏里获取终极宝物还麻烦。当然了那只是系统给出的正常游戏攻略。后门总会有的匠人就找出了一条捷径如下:报到先不入场先和展台前的小姐混个脸熟〉听课时睡觉养精蓄锐〉养足精神后中午狂吃〉吃完后谎称下午公司有要事必须先走向主人提前索取意见反馈表〉立即换取优惠券〉和早上混得脸熟的小姐软磨硬泡软硬兼施强行购买〉回家偷乐。总共只有套ICD就这么被匠人“抢”到了一套嘿嘿。那宝贝自买来后就一直扔在家里碰都没有去碰(我的块大洋啊呜呜)。中间遭遇了写书当站长选斑竹等一揽子琐事所以学习就放松了。惭愧啊。尤其是看到处女座的HOTPOWER都那么好学匠人真是无地自容。转眼间春去秋回想想人生再也不能如此虚度了。而正巧手上有两颗“骗”来了PICF芯片(后来又进一步骗来几颗升级版的PICF)匠人遂决定玩玩PIC。匠人的原则是要么不玩要玩就得玩转!不但要玩转而且要玩的飞转!怎样才能玩得“飞转”?匠人的答案就是让这颗PIC芯片“飞快”地“转”起来。这篇手记的标题叫着“玩转PIC”这可是很有道理的。哈哈!于是最后有了这篇手记。二、准备工作与快速上手在让这颗芯片“转”起来之前我们还得先做点功课学习一下芯片PICF的基本资源以及软硬件开发环境。、芯片资源关于PICF(匠人使用的是个引脚、DIP封装)读者大人们可以去查阅详细的芯片数据手册。匠人只挑一些我们这个项目中感兴趣的重要特性列举如下:《匠人手记》网络版《从零开始玩转PIC之旋转时钟》第页()个引脚刨去个VDD和个VSS引脚全部可以配置为IO口()程序存储空前为K(FLASHROM)()数据存储空间为字节(SRAM)()内置EEROM空间为字节()多路ADC功能(位精度)()个定时器()外部中断()级硬件堆栈()串口功能上面这样的介绍必定是不全面的但却是简洁明了的。实际上这颗芯片还有许多其它的可圈可点的特性比如:内部RC振荡、看门狗、CCP(捕捉、比较和PWM)模块、上电复位、掉电复位、睡眠模式。就不展开说了。、软件开发环境MPLABIDEv官方下载地址:http:wwwmicrochipcomstellentidcplgIdcService=SSGETPAGEnodeId=dDocName=enpart=SW可以在该页面下载以下软件包:zMPLABIDEvFullReleaseZippedInstallationzReleaseNotesforMPLABIDEvzMPLABIDEvBuildProjectPatch在该网页还有一些相关的用户手册可供下载。安装过程很简单。不过在安装InstallMPLABv时最好先是把病毒防火墙关闭。否则在安装接近结束时会跳出个故障窗口显示:“ErrorAnerroroccurredduringtheinstallationofssembly'MicrosoftMSXML,publicKeyToken="bdbabff",version="",type="win",processorArchitecture="x"PleaserefertoHelpandSupportfor”。然后系统执行反安装。那可是很让人郁闷的。匠人在这个问题上曾经碰壁多次后来在高手指点下关闭防火墙才搞定。、编译器piccMPLABIDEv自带了一个版本的picc。可惜是试用版好像有许多功能受限制。后来匠人向朋友处要来一个“特殊版本”的picc。安装顺利。千万不要来和匠人讨论关于PICC盗版和破解的问题哦。俺打死也不招!、MPLABICD硬件调试及编程工具MPLABICD为低成本所谓在硬件线调试器。有了它再加上一定的调试经验就不必购买昂贵的仿真器(ICE)了这给匠人的业余学习带了便利。与ICE相比使用ICD需要满足如下要求:《匠人手记》网络版《从零开始玩转PIC之旋转时钟》第页zICD需要占用目标板的一些软硬件资源。z目标单片机必须有一个正常运行的时钟。z只有当系统中所有的连接都正常时ICD才能进行调试。尽管ICD与ICE相比有一些不足但它也有一些突出的优点:z在量产后可直接与应用相连而不需要取下单片机来插入ICE仿真头。zICD可以在目标应用中对固件再编程而不需要其它连接或设备。MPLABICD通过六芯接口与目标单片机相连(参见图:MPLABICD与目标板的连接示意图)。图:MPLABICD与目标板的连接示意图前面已经讲到了匠人手上拥有的是一款简化版的ICD工具。据说为了降低成本它的串口被阉割了只留下了USB口。这就意味着ICD无法给目标版提供足够的电压因此匠人另外给目标版接了个USB取电口。(参见图:ICD与目标板的连接实物图)图:ICD与目标板的连接实物图《匠人手记》网络版《从零开始玩转PIC之旋转时钟》第页、ICD的连接顺序在应用的过程中ICD的连接总是失败报错也是千奇百怪。匠人潜心研究得出正确的连接顺序。这个顺序虽然繁琐但是可以取保连接成功。如下:()目标板通电()icd接入pc的usb口()icd与目标板连接()启动MPLABIDE()选择编程工具或调试工具为ICD(菜单:“debugger”>“selecttool”>“MPLABicd”或“programmer”>“selectprogrammer”>“MPLABicd”)。连接成功!()编程(下载程序到目标板上的芯片)或调试()撤销第步的选择(工具选项改回为:“none”)()退出MPLABIDE()断开icd与目标板的连接()断开icd与pc的连接()目标板断电、从最简单的测试程序开始==========================测试程序功能:PA不断翻转控制LED闪烁==========================文件名:Testc#include<pich>定义芯片工作时的配置位CONFIG(HSWDTDISPWRTENBORENDPLVPDISDUNPROTWRTDISDEBUGENUNPROTECT)CONFIG(HSWDTDISLVPDIS)定义变量unsignedchari,j,kbitflag,flag函数voidmain(void){i=j=k=TRISA=xwhile(){PORTA=xfor(i=i!=i){for(j=j!=j){《匠人手记》网络版《从零开始玩转PIC之旋转时钟》第页}}PORTA=xfor(i=i!=i){for(j=j!=j){}}}}说明:这个程序只有一个最最最最最最……最最简单的功能就是让PA不断翻转去控制一个独立LED的闪烁。通过这个程序匠人圆满完成了对开发工具和开发环境的初步学习达到以下学习目的:()快速入手。如何建立一个新项目并向项目中添加文件了解头文件《pich》的作用和引用方法了解如何设置器件、配置位、择语言工具等选项。()学习程序的调试。如何进行编译、连接、除错。熟悉MPLABIDE和PICC的工作环境如何选择DEBUG、如何设置相关参数熟悉Sim(软件仿真)的应用包括单步、全速、断点等调试手段以及如何在调试过程中观察内存、IO口、堆栈中的数据如何观察编译后的asm代码和lst文件。()学习ICD的应用。如何连接目标板和ICD、注意事项如何下载程序到芯片并且让芯片脱离ICD后单独工作。经过这个程序匠人建立了驾驭PIC芯片和开发工具的自信(这一点最重要)。接下来可以甩开膀子开干了。好吧现在开始为了让我们的PIC转起来而努力吧。三、旋转时钟功能概述旋转时钟系统由基板、指针板、直流电机、电源、红外遥控器以及上位机(PC)控制软件等部分组成。(参见图:旋转时钟系统框图)。、基板基板负责红外解码、按键检测、声控信号检测并解析这些控制信号去控制电机的转动或者把控制信号转换为串口控制命令发送给指针板。基板的主控芯片采用了EMP。原因只有一个字:便宜!(晕这好像是两个字?)基板上的声控模块由拾音头和信号放大比较电路组成。有了声控功能用户可以在远离旋转时钟的地方用拍手、跺脚、吹口哨等声响(这好像也是流氓们调戏良家妇女时惯用的方式)来启动显示。这样就不必每次都特意跑到旋转时钟跟前去按动按键或满屋子去找遥控器了。指针板的电源由基板提供该电源通过电机轴上的导电环传递到指针板上。同时导电环也是串口信号的传递路径。指针板根据来自串口的控制命令切换显示状态或者调整运《匠人手记》网络版《从零开始玩转PIC之旋转时钟》第页行参数。图:旋转时钟系统框图、电机电机采用的是普通直流电机负责带动指针板旋转。电机可以安装在基板上也可以根据实际需要脱离基板安装在外壳上。电机的启动或停止由基板上的CPU负责控制。由于没有采用转速匀速控制因此驱动电路和控制程序就比较简单。电机轴是金属的所以被同时充当了电源和串口通讯的地线。另外在电机轴上套了一个导电环在转动时导电环与电刷保持接触构成电源的正极和串口通讯的信号线、指针板指针板负责显示功能是旋转时钟的主要部件相当于最佳男主角(基板只是配角而遥控器则只能算是跑龙套的了。呵呵!)。指针板的主控芯片就是PICF。指针板上有一排超高亮LED。它们就是显示部件了亮点所在。指针板上有一个霍尔传感器在外壳的对应位置安装了一个磁钢。指针板每旋转一周霍尔传感器就会经过一次磁钢位置并感应到信号。这个信号被称为“过零信号”。有了这个信号CPU就可以在旋转的过程中实时检测计算指针板的角度位置。并根据指针板所处的不同位置点亮相应的LED利用人眼的视觉暂留效应形成完整的显示画面。通过检测两次过零信号的时间间隔就可以计算出电机转速或者指针旋转一周的时间。把该时间等分为份即可求得每个显示列的位置。这样就不必再去对电机进行匀速控制了。为了便于程序的计算匠人把整个指针板旋转的圆周等分为个等分位置。每个位置被称为一列(参见图:指针板转动轨迹划分示意图)。匠人也曾经考虑过整个圆周等分为份。后来感觉无此必要因为那样做并不能提高多少显示精细程度。另外这个键控模块基板CPU遥控接收声控模块电机驱动串口控制(电源控制)电源模块输入电源电机指针板CPU电源模块串口接收LED显示霍尔传感器蜂鸣器上位机(PC)基板指针板红外遥控器磁钢(定位)《匠人手记》网络版《从零开始玩转PIC之旋转时钟》第页数字超过了单字节所能代表的范围势必增加程序的复杂程度得不偿失。图:指针板转动轨迹划分示意图指针板上有一个蜂鸣器在执行按键等控制命令时鸣叫。另外还有闹钟鸣叫功能和整点鸣叫报时功能。指针板上有温度传感器NTC负责采集温度并可以显示出来。、红外遥控器总算轮到跑龙套的登场了。遥控器(或者说是遥控板因为没有外壳呵呵)采用比较简单的方案实现。主控芯片采用了EMPS。没什么原因一个跑龙套的用啥不是用呢?别挑三拣四了。遥控器上的按键与基板上的按键功能完全等同正因为如此遥控器甚至是可以省略的东东。如果真的打算省略的话那么基板上的红外检测电路也可一并省略。、上位机上位机程序是本项目的高端应用。上位机软件可以采用VB编程通过串口发送串行控制名令给指针板。其功能涵盖了基板上所有的串行控制功能并有所加强和扩展。比如可以通过电脑下载新的显示画面到指针板上并存储在CPU的内部EPROM中。这就意味着这个旋转时钟不但于设计者来说是可以DIY的而对于使用者来说也是可以DIY的他们可以自己定制个性显示画面。当然他们需要足够的耐心。列列列列列列列列…《匠人手记》网络版《从零开始玩转PIC之旋转时钟》第页四、指针板的供电方式旋转时钟项目的成败不是取决于电路和程序而是取决于结构。或者说取决于如何实现对指针板的供电和传递控制信息。、常见的供电方式根据匠人收集的前人的经验指针板的供电方式一般有以下三种:()自感应发电这种方法就是从指针板上引出导线接入到电机内部绕在转子上电机旋转时该导线切割磁场产生感应电动势经过整流后作为指针板上的电源。A、这种方式的优点是:z设计很巧妙无机械磨损。z更巧妙的是由于感应出来的电动势是交流的所以可以利用该过零信号来定位不必另外准备定位信号了。B、这种方式的缺点是:z提供的电流有限只能适合LED较少的旋转时钟当LED数量较多时需要更多的电流这种方式就不能满足了。z其次这种方式要对电机本身进行改造也有一定的难度。并不是所有的电机都适合这种改造。而且这种改造可能会给电机带来损害。z另外还有一个问题就是这种方式只有在电机旋转时才能发电给指针板供电一旦停止转动供电也就无以为继了这样要实现旋转时钟的不间断走时还得另加备用电池并采用低功耗设计。()自备电池这种方式就是在指针板上安装电池由电池供电。一般是用两到三节号电池。A、这种方式的优点是:z不用担心电压波动。z也不存在机械磨损不用担心接触不良之类问题的困扰。B、这种方式的缺点是:z很费电池三天两头换电池既不经济也不环保还忒麻烦!z电池很重一般的电机带不动必须用很大很大的电机哦。这也意味了成本的上升。()机械传导供电也就是采用滑环和电刷通过机械接触传导电流。《匠人手记》网络版《从零开始玩转PIC之旋转时钟》第页A、这种方式的优点是:z能够提供比较大的工作电流。B、这种方式的缺点是:z有机械摩擦会产生磨损。因此要求滑环和电刷材料要耐磨经得起折腾。另外还得有足够的弹性并且要耐锈否则会导致接触不良。z有机械阻力因此要求电机有比较大一点的功率。z有机械噪音。、匠人采用的供电方式及结构匠人采取的也是机械传导的方法不过有所改进的是匠人把串口控制信号与电源实现了复用。同一个电路通路既能传导电源也能传递控制信号。方法介绍如下:()选用电机轴比较长的电机类型。有条件的当然可以定制电机轴的长度。不过对于我们DIY一族来说一般没有这个条件。因为没有一定的采购量电机厂不愿意搭理咱们。所以匠人还是老老实实地跑遍了电子市场千挑万选软磨硬泡终于买到了比较合适的型号(参见图:电机实样)。图:电机实样()找到电机后需要对电机轴进行适当的改造。在此之前我们还需要准备以下一些特殊的东西:z一截小金属管充当滑环用。要求表面光滑耐磨内径略大于电机轴的直径并留有适当空间。(参见图:代替滑环的金属管)图:代替滑环的金属管z一段橡胶热塑套管遇热收缩的那种。(参见图:橡胶热塑套管)《匠人手记》网络版《从零开始玩转PIC之旋转时钟》第页图:橡胶热塑套管z一段适合做电刷的金属片要求耐磨并有适当弹性。我们可以用插头中的金属插片如果有必要可以找一根小弹簧用于给电刷和滑环的接触间提供适当的弹性压力(参见图:代替电刷的金属片及弹簧)。如果找不到合适的金属片也可以用回形针来代替。图:代替电刷的金属片及弹簧()电机轴及滑环的改造过程如下:z把橡胶套管套在电机轴上用打火机均匀加热烘烤套管令其收缩、包裹住电机轴(参见图:为电机轴套上热塑套管)。当然要注意掌握烘烤的火候别把家给烧了。哈哈未成年儿童一定要在家长的监护下实施该操作哦!图:为电机轴套上热塑套管z把金属管改造为滑环(参见图:将金属管改造为滑环)后我们可以把滑环套在电机轴套管上看看效果(参见图:把滑环套在电机轴上看看效果)。然后我们把滑环焊接安装在指针板上(参见图:把滑环焊接在指针板上)。《匠人手记》网络版《从零开始玩转PIC之旋转时钟》第页→→图:将金属管改造为滑环图:把滑环套在电机轴上看看效果图:把滑环焊接在指针板上z把电机安装在基座上。并安装金属电刷(参见图:电机与电刷安装效果图)。在该图中匠人用了一个回形针来代替电刷。就像我们前面所讲的也可以用其它的合适材料来实现这个结构。图:电机与电刷安装效果图《匠人手记》网络版《从零开始玩转PIC之旋转时钟》第页z把指针板安装在电机轴上电机轴与指针板地线之间用焊锡焊死。在焊接时注意调节指针板的重心并确保金属管(电源线)与电机轴(地线)之间不要搭焊短路。至此整个结构完成。参见(图:完整的供电结构侧面效果图)和(图:完整的供电结构正面效果图)。图:完整的供电结构侧面效果图图:完整的供电结构正面效果图z把电机轴接到电源负端(注:电机外壳与电机轴是短路导电的)电刷接到电源正端。指针板就可以通电工作了。这时如果让电机转动起来电刷与滑环作相对摩擦运动。仍旧可以源源不断地把电源共给指针板。、电源与串口信号的电路通路的复用电路原理图(参见图:供电与通讯电路)。供电与通讯控制工作时序的配合(参见图:供电与通讯工作时序)。《匠人手记》网络版《从零开始玩转PIC之旋转时钟》第页图:供电与通讯电路图:供电与通讯工作时序在空闲(不发送控制命令)状态基板CPU的串口发送端口(TX)保持高电平Q和Q导通电刷上的电平为高电平用于给指针板供电。在通讯(发送控制命令)状态基板CPU的TX口发送串口命令并通过电刷传递给指针板送至指针板CPU的串口接收端口(RX)。在通讯状态下如果发送的是数据“”(高电平)则照样可以给指针板供电如果发送的是数据“”(低电平)则指针板依靠自身的电容(C和C)储存的电荷工作。为了保证指针板的供电必须合理设计通讯命令的内容。例如要避免出现连续个以上的“X”字节因为连续发送数据“”(低电平)的话指针板电容里的电荷会被消耗光导致掉电。五、显示处理显示是本项目的噱头所在因此有必要在此多费一些笔墨。、显示内容旋转时钟的显示内容规划如下:()电机停止的时候不显示。()当电机启动但未进入稳态则显示螺旋线状的启动画面。(参见图:静止时状态及启动时画面)。空闲状态通讯状态空闲状态通讯状态空闲状态《匠人手记》网络版《从零开始玩转PIC之旋转时钟》第页图:静止时状态及启动时画面()在电机转动进入稳态后指针板可以接收串口控制命令切换显示各种不同的画面。如:模拟钟面、数字钟面、温度显示、闹钟显示、以及一些文字画面、自定义画面和设置画面。(参见图:部分显示画面)。图:部分显示画面为此匠人设计了下面这张真值表(参见表:显示状态真值表)。《匠人手记》网络版《从零开始玩转PIC之旋转时钟》第页电机状态标志设置使能标志显示状态ID设置状态ID状态显示内容***待机状态电机停止时不显示电机启动但未进入稳态则显示螺旋线状开机画面模拟钟显示模拟钟面(、、、整点显示数字其它整点显示小圆点)数字钟上部显示“时:分:秒”(小时制)下部显示钟摆(每秒摆动一次)温度计上部显示温度(形式:℃)下部显示最近小时温度曲线闹钟上部显示闹钟时、分和闹铃时间下部显示进度条项目信息交替显示"匠人的百宝箱"和"旋转时钟"、项目名称和版本号自定义字符显示行*个自定义字符串自定义点阵显示*点阵自定义画面*显示状态保留时钟“时”显示时钟“时:分:秒”其中“时”闪烁时钟“分”显示时钟“时:分:秒”其中“分:秒”闪烁闹钟“时”显示闹钟闹钟时、分和闹铃时间其中“时”闪烁闹钟“分”显示闹钟时、分和闹铃时间其中“分”闪烁闹铃时间显示闹钟时、分和闹铃时间其中闹铃时间闪烁报时功能显示整点报时功能“ONOFF”测转速显示转速(转秒)、单列显示时间设置值*设置状态保留表:显示状态真值表、驱动电路显示电路参见(图:显示电路)CPU的引脚分配参见(图:CPU引脚安排)。LED正端接到电源负端经过限流电阻接到CPU的IO口。之所以采用负端控制原因有三点:首先从CPU的IO口带载能力方面来看灌电流一般都比拉电流大所以采用LED负端控制能够提供更大的驱动能力。当然这不是主要的原因。《匠人手记》网络版《从零开始玩转PIC之旋转时钟》第页图:显示电路《匠人手记》网络版《从零开始玩转PIC之旋转时钟》第页图:CPU引脚安排其次由于指针板的供电与串行通讯是公用一根线的。在不通讯时该线为高电平为指针板提供源源不断的电力。而在通讯时如果遇上传输数据为“”(低电平)指针板只能自求多福了。这个时候指针板必须依靠自身的电容来维持工作电压度过这段低电平时期。偏偏这些LED又是耗能大户如果不隔离的话电容里那点能量很快就被消耗干净。而在采用LED负段控制后LED的电源和MCU的电源可以通过二极管隔离然后给MCU开个小灶在CPU的电源和地线间单独并联一个大容量电容。这个电容的能量只给CPU用而不让LED分一杯羹从而避免通讯过程中MCU失电导致复位或工作不稳。再次匠人一开始选用了PICF当指针板主控芯片这颗芯片的RA的特性比较古怪它在作为输出口时居然是漏极开路状态的(参见图:PICF的RA口内部电路示意图)。也就是说当该口输出高电平时其实输出的只是高阻态必须外接上拉电阻。据说这条阴沟让不少人翻了船于是匠人也未能幸免。一开始匠人也曾经采用过LED正端控制后来在这个IO口上摔得鼻青眼肿后才改弦更张修改为LED

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/22

匠人手记

仅供在线阅读

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利