ImageVerifierCode 换一换
格式:DOC , 页数:20 ,大小:144.54KB ,
资源ID:2646627      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/2646627.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(实验一-直流、步进电机综合控制系统设计.doc)为本站上传会员【w****g】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

实验一-直流、步进电机综合控制系统设计.doc

1、实验一 直流、步进电机综合控制系统设计 ———————————————————————————————— 作者: ———————————————————————————————— 日期: 20 个人收集整理 勿做商业用途 实验一 直流、

2、步进电机综合控制系统设计 一、实验目的 通过本次实验熟悉MagicARM2410 GPIO、UART、RTC,步进电机,直流电机,IIC的工作原理;并能熟悉的编程控制。 二、实验要求 以MagicARM2410为实验平台,设计一个通过串口通信交互控制的综合型控制系统.具体来说,可在启动时,自动列出一些选项,通过键盘选择某个选项而实现其功能;考虑到实时性,再按某个控制键能立刻停止当前功能而回到初始的待选状态。具体功能要求如下:     1、实现四个LED灯按照十六进制的规则依次亮灭;     2、在超级终端上输入两个两位数,实现两位数的加减乘除并显示运算结果;     3、显

3、示当前的年月日、星期、时分秒;     4、实现步进电机的调速和正反转;可用旋转按钮W1或按键控制调速,在超级终端和数码管上同步显示其正反转和转速信息;     5、实现直流电机德调速和正反转;可用旋转按钮W2或按键控制调速,在超级终端和数码管上同步显示其正反转和转速信息;     6、利用IIC通信,实现EEPROM的读写;在超级终端上显示地址和数据。 三 、实验原理 (一)LED灯 四个小灯分别接于GPE11、GPE12 GPH4、GPH6端口;控制端口“0“和“1"分别实现亮灭(端口设为输出)如下: void LED_init(void) { /

4、/ 初始化I/O rGPECON = (rGPECON & (~(0x0F<<22))) | (0x05〈<22); // rGPECON[25:22] = 0101b,设置GPE11、GPE12为GPIO输出模式 rGPHCON = (rGPHCON & (~(0x33〈〈8))) | (0x11<<8); // rGPHCON[13:8] = 01xx01b,设置GPH4、GPH6为GPIO输出模式 } (二)UART UART是一种通用串行数据总线,用于异步通信.该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用来与PC进

5、行通信,包括与监控调试器和其它器件,如EEPROM通信。UART首先将接收到的并行数据转换成串行数据来传输。消息帧从一个低位起始位开始,后面是5~8个数据位,一个可用的奇偶位和一个或几个高位停止位。接收器发现开始位时它就知道数据准备发送,并尝试与发送器时钟频率同步.如果选择了奇偶,UART就在数据位后面加上奇偶位。奇偶位可用来帮助错误校验。 在接收过程中,UART从消息帧中去掉起始位和结束位,对进来的字节进行奇偶校验,并将数据字节从串行转换成并行。UART也产生额外的信号来指示发送和接收的状态。例如,如果产生一个奇偶错误,UART就置位奇偶标志。 UART作用 1. 发送/接收逻辑 2.

6、 波特率的产生  3. 数据收发  4. 中断控制{出现以下情况时,可使UART 产生中断:   FIFO 溢出错误  线中止错误(line—break,即Rx 信号一直为0 的状态,包括校验位和停止位在内)  奇偶校验错误  帧错误(停止位不为1)  接收超时(接收FIFO 已有数据但未满,而后续数据长时间不来)  发送  接收 由于所有中断事件在发送到中断控制器之前会一起进行“或运算”操作,所以任意时刻 UART 只能向中断产生一个中断请求.通过查询中断状态函数UARTIntStatus( ),软件可以在同一个中断服务函数里处理多个中断事件(多个并列的if 语句)。 5 回环操作

7、 6 串行红外协议 UART初始化函数如下 void UART_Init(void) { int i; if(g_uart_sel) // 判断是否为串口1 { // I/O口设置 (GPH5,GPH4) rGPHUP = rGPHUP | (0x03〈〈4); rGPHCON = (rGPHCON & (~0x00000F00)) | (0x00000A00); // 串口模式设置 rUFCON1 = 0x00; // 禁止FIFO功能 rUMCON1 = 0x00; // AFC(流控制)禁能

8、 rULCON1 = 0x03; // 禁止IRDA,无奇偶校验,1位停止位,8位数据位 rUCON1 = 0x245; // 使用PCLK来生成波特率,发送中断为电平触发模式,接收中断为边沿触发模式, // 禁止接收超时中断,使能接收错误中断,正常工作模式,中断或查询方式(非DMA) // 串口波特率设置 rUBRDIV1=(int)(PCLK/16.0/UART_BPS + 0。5) -1; } else { // I/O口设置 (GPH3,GPH2) rGPHUP = rGPHUP |

9、 (0x03〈<2); rGPHCON = (rGPHCON & (~0x000000F0)) | (0x000000A0); // 串口模式设置 rUFCON0 = 0x00; // 禁止FIFO功能 rUMCON0 = 0x00; // AFC(流控制)禁能 rULCON0 = 0x03; // 禁止IRDA,无奇偶校验,1位停止位,8位数据位 rUCON0 = 0x245; // 使用PCLK来生成波特率,发送中断为电平触发模式,接收中断为边沿触发模式, // 禁止接收超时中断,使

10、能接收错误中断,正常工作模式,中断或查询方式(非DMA) // 串口波特率设置 rUBRDIV0=(int)(PCLK/16。0/UART_BPS + 0.5) —1; } for(i=0;i<100;i++); } (三)RTC A 概述 实时时钟(RTC)单元在系统电源关闭的情况下可以在备用电池下工作。RTC 可以使用STRB/LDRB ARM 操作传输二进制码十进制数的 8 位数据给 CPU。数据包括秒、分钟、小时、日期、天、月、年的时间信息。RTC 单元可以在 32.768KHz 的外部晶振下工作,可以可以执行报警功能。 B 特点

11、 BCD 数:秒、分钟、小时、日期、日、月、年 — 闰年生成器 — 报警功能:报警中断或从掉电模式中唤醒 - 已经解决 2000 年问题 - 独立电源引脚(RTCVDD) — 支持对于实时内核时间节拍的毫秒节拍时间中断 C 实时时钟操作 C.1 闰年发生器 闰年发生器可以基于 BCDDATE、BCDMON、BCDYEAR 的数据,从 28、29、30、31 中确定每个月的最后一天.该模块在确定某月最后一天的时候会考虑闰年的因素。一个 8 位的计数器仅能代表两个 BCD 数字,所以它不能确定是否是 00 年(该年的最后两个数字是00)。 C。2读写寄存器 为了写R

12、TC模块中的BCD寄存器,RTCCON寄存器的位 0 必须置 1。为了显示秒分小时星期日月年,CPU应该分别读取在RTC模块中的BCDSEC,BCDMIN,BCDHOUR,BCDDAY,BCDDATE,BCDMON,和BCDYEAR。但是,因为多寄存器读取可能存在一秒的误差。例如,当用户读BCDYEAR和BCDMON,结构假定是 2059 年 12 月 31 日 23 点 59 分。当用户读BCDSEC寄存器,值的范围是从 1 到 59(秒)就没有问题,但是如果值是 0,年月日就变成了 2060 年 1 月 1 日0 时 0 分因为有刚才提到的 1 秒误差.在这种情况下如果BCDSEC为 0,

13、用户应该重读BCDYEAR到BCDSEC。 C。3 备用电池操作 RTC 逻辑可以由备用电池驱动,其通过 RCTVDD 引脚给 RTC 模块提供电源,即使系统电源关闭。当系统关闭时,CPU 和 RTC 模块的接口是封闭的,备用电池仅驱动振荡电路和BCD 计数器以最小化电源消耗。 C。4 报警功能 RTC 在掉电模式或正常操作模式下的特定时间会发出报警信号。在正常操作模式下报警中断(INT_RTC)被激活。在掉电模式下,电源管理唤醒信号(PMWKUP)也如 INT_RTC一样被激活。RTC 报警寄存器(RTCALM)决定了报警的使能状态和报警时间设定的条。 C.5 节拍时间中断 RT

14、C 节拍时间是用于中断请求。TICNT 寄存器有一个中断使能位和对于中断的计数器值当节拍时间中断出现时,计数器的值为 0。中断周期如下:Period = ( n+1 ) / 128 secondn: 节拍计数器值 (1~127)RTC 节拍时间可以用于实时操作系统内核时间节拍。如果时间节拍由 RTC 时间节拍生成,与实时操作系统功能相关的时间就会和实时同步。 D。RTC寄存器 (1)实时时钟控制寄存器(RTCCON) (2)节拍时间计数寄存器(TICNT) (3)RTC 报警控制寄存器(RTCALM) (4)报警秒数据寄存器(ALMSEC) (5)报警分钟数据寄存器(ALMMI

15、N) (6)报警小时数据寄存器(ALMHOUR) (7)报警日期数据寄存器(ALMDATE) (8)报警月数据寄存器(ALMMON) (9)报警年数据寄存器(ALMYEAR) (10)BCD 秒寄存器(BCDSEC) (11)BCD 分寄存器(BCDMIN) (12)BCD 小时寄存器(BCDHOUR) (13)BCD 日期寄存器(BCDDATE) (14)BCD 日寄存器(BCDDAY) (15)BCD 月寄存器(BCDMON) (16)BCD 年寄存器(BCDYEAR) (四)步进机与直流电机工作原理 步进电机是一种将电脉冲转化为角位移的执行机构。步进电机正传,双

16、四拍程序。 时序控制为AB——BC--CD——DA--AB,共控制运转4圈(电机步距角为18度)。 每一步的延时控制。值越大,延时越久;步进电机反转,双四拍程序时序控制为AD--DC--CB—-BA——AD。步距角为18度)。每一步的延时控制。值越大,延时越久。 正转模式:dly为延时 void MOTO_Mode1(uint32 dly) { // AB相有效 GPIOSET(MOTOA); GPIOSET(MOTOB); Delay(dly); GPIOCLR(MOTOA); GPIOCLR(MOTOB

17、 // BC相有效 GPIOSET(MOTOB); GPIOSET(MOTOC); Delay(dly); GPIOCLR(MOTOB); GPIOCLR(MOTOC); // CD相有效 GPIOSET(MOTOC); GPIOSET(MOTOD); Delay(dly); GPIOCLR(MOTOC); GPIOCLR(MOTOD); // DA相有效 GPIOSET(MOTOD);

18、 GPIOSET(MOTOA); Delay(dly); GPIOCLR(MOTOD); GPIOCLR(MOTOA); } 直流电机由PWM脉冲调制控制;脉冲为1是电机转动,0时停止转动。通过PWM占空比来实现加减速.参考程序: void StepMOTO_Test(void) { // uint32 a = 0; // 步进电机控制口设置 rGPCCON = (rGPCCON & (~0x0000FC03)) | (0x00005401); // GPC0、GPC5——7口设

19、置为输出 rGPCUP = rGPCUP | 0x00E1; // 禁止GPC0、GPC5——7口的上拉电阻 rGPCDAT = rGPCDAT & (~0x00E1); // 设置GPC0、GPC5—-7口输出低电平 while(1) { UART_SendStr(”Please input 'z' OR ’f’ to control zhengzhuan and fanzhuan\n"); UART_SendStr(”Pr

20、ess 'o' key exit test\n"); switch(getch = UART_GetKey()) { case 'z': { sprintf("Press ’j’ to speed up ; ’ESC' break out.”); for(;;) { Change_Speed(); MOTO_Mode1(speed1); // 控制步进电机正转 //在终端上显示速度 sprintf(disp_buf2, "Zheng

21、zhuan: StepMoto_speed is %d \n”, (330—speed1)); UART_SendStr(disp_buf2); if(UART_GetFlag() == 'j’) speedup();//加速 if(UART_GetFlag() == 0x1B) //按Esc键退出测试 break;

22、 } break; } case 'f’: { sprintf(”Press ’j' to speed up ; 'ESC’ break out。”); for(; ;) { Change_Speed(); MOTO_Mode2(speed1); // 控制步进电机反转 //在终端上显示速度 sprintf(disp_buf2, ”Fan

23、zhuan: StepMoto_speed is %d \n”, —(330—speed1)); UART_SendStr(disp_buf2); if(UART_GetFlag() == ’j’) UART_SendStr("j"); speedup();//加速 if(UART_GetFlag() == 0x1B) //按Esc键退出测试

24、 break; } break; } default: break; } if(getch == 'o’) //按下字母’o’键退出整个步进电机测试 break; } } 直流电机测试程序: void DCMOTO_Test(void) { uint32 i = 0,

25、a = 0; uint16 pwm_dac; char get_ch = 0; // TOUT0口设置 rGPBCON = (rGPBCON & (~(0x03<〈0))) | (0x02〈<0); // rGPBCON[1:0] = 10b,设置TOUT0功能 rGPBUP = rGPBUP | 0x0001; // 禁止TOUT0口的上拉电阻 // 设置GPH9为GPIO输出模式 rGPHCON = (rGPHCON & (~(0x0

26、3<〈18))) | (0x01<〈18); // GPH9口 rGPHDAT = rGPHDAT & (~(1〈<9)); // 输出0电平 rGPHUP = rGPHUP | (1〈〈9); // 初始化PWM输出.设PWM周期控制值为255 pwm_dac = 250*255/330; // 初始化占空比 PWM_Init(255, pwm_dac); while(1) { //按’z'键控制正传

27、'f’键控制反转,’s'键停止转动 ’Esc'退出测试 UART_SendStr("\nPress the key to control state: ’z'——zhengzhuan 'f’--fanzhuan ’s'--stop\n”); switch((get_ch =UART_GetKey())) { case ’z’: { rGPBDAT = rGPHDAT | (1<<9); rGPHDAT = rGPHDAT & (~(1〈<9));

28、 while(1) { Change_Speed(); rTCMPB0 = (speed2*255/330); sprintf(disp_buf3, ”DCMoto_speed is %d \n", speed2); //终端显示正转速度 UART_SendStr(disp_buf3); if(UART_GetFlag() == 's’) { rGPBDAT

29、 = rGPHDAT & (~(1〈<9)); rGPHDAT = rGPHDAT & (~(1〈<9)); break; } } break; } case ’f’: { rGPBDAT = rGPHDAT & (~(1〈<9)); rGPHDAT = rGPHDAT | (1〈<9); while(

30、1) { Change_Speed(); rTCMPB0 = (speed2*255/330); sprintf(disp_buf3, "DCMoto_speed is %d \n", (-speed2)); //终端显示正转速度 UART_SendStr(disp_buf3); if(UART_GetFlag() == 's') { rGPBDAT = rGPHDAT

31、 & (~(1〈〈9)); rGPHDAT = rGPHDAT & (~(1<<9)); break; } } break; } default : break; } if(UART_GetFlag() == 0x1B) break; } } (五)IIC通信实现EEPROM的读写 (一)I2C,一种总

32、线结构.I2C串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上. 实验过程中必须先初始化总线—启动总线后才能用其进行通信。 int I2C_SendByte(uint8 dat) //发送一字节数据,并接收应答位 int I2C_RcvByteNA(uint8 *dat)// 接收I2C总线上一字节数据并发送非应答位 int I2C_RcvByteA(uint8 *dat)// 接上I2C总线上一字节数据,并发送应答位 void StopI2C(uin

33、t8 send)//结束总线 int ISendStr(uint8 sla, uint8 *suba, uint8 *s, uint8 no) 【** Descriptions: 使用硬件I2C发送数据。 ** Input: sla 从机地址 ** suba 器件子地址(第一字节用来表示子地址字节个数) ** s 发送数据缓冲区 ** no 发送数据个数 ** Output: 操作成功返回TRUE,仲载失败/无从机应答返回FALSE ** Note: 使用前设置好参数。程序不会更改s、suba缓冲区的数据】 int IRcvSt

34、r(uint8 sla,uint8 *suba,uint8 *s,uint8 no) //v使用硬件I2C读取数据.参数和发送对应 (二)测试EEPROM程序 void TestEEPROM(void) { uint8 suba[2]; int rw_err; int i; rw_err = 0; // 写数据测试 suba[0] = 1; // 1位子地址 suba[1] = 0x00; // 子地址 for(i=0; i<10; i++) { dat_buf[i]

35、 = i+’0’; } UART_SendStr(”data of write:”); for(i = 0; i 〈 5; i++) UART_SendByte(dat_buf[i]); UART_SendStr(”\n"); i2c_opsta=ISendStr(CAT1025, suba, dat_buf, 5); for(i=0; i〈10000; i++); // 等待写周期 // 读出校验 for(i=0; i〈5; i++) dat_buf[i] = 0x00; i2c_opsta=IRcvStr(C

36、AT1025, suba, dat_buf, 5); UART_SendStr(”data of read:"); for(i = 0; i 〈 5; i++) UART_SendByte(dat_buf[i]); UART_SendStr("\n”); for(i=0; i<5; i++) { if(dat_buf[i] != (i+’0')) rw_err = 1; } // 判断操作是否出错,如果出错则蜂鸣报警 if(rw_err) ErrorShow(); } 【如果写入的数据和读出的相同,则测

37、试通过】 四、实验程序 【main函数:主要实现与终端交互的功能,通过键盘输入字符的判断来决定执行的功能】 int main(void) { uint8 g_getch ; int i = 0; UART_Select(0); //选择UART0 UART_Init(); //UART0初始化 LED_init(); //LED相关初始化 EINT_init(); //外部中断初始化 while(1) { fun_test(); switch(g_getch = UART

38、GetKey()) { case '1': { UART_SendByte(g_getch); UART_SendStr(”\n”); LED_DispAllOn(); //LED灯全亮 DelayNS(10); UART_SendStr("\nTest LED_DispAllOn is Over!\n"); break; } case ’2': { UART_SendByte(g_getch);

39、UART_SendStr(”\n"); LED_DispAllOff(); //LED灯全灭 DelayNS(10); UART_SendStr(”\nTest LED_DispAllOff is Over!\n”); break; } case ’3': { UART_SendByte(g_getch); UART_SendStr("\n”); for(;;) //死循环,当检测到按

40、下‘Esc’键时退出 { LED_onebyone(); //流水灯 if(UART_GetFlag() == 0x1B) //检测是否按下’Esc'键 break; } LED_DispAllOff(); UART_SendStr(”\nTest LED_OnebyOne is Over!\n”); break; } case '4’: { UART_SendByte(g_getch);

41、 UART_SendStr("\n"); Arithmitic(); //加减乘除测试模块 UART_SendStr("\nTest Addsubmuldiv_Test is Over!\n"); break; } case ’5’: { UART_SendByte(g_getch); UART_SendStr(”\n"); DateWeekTime_Test();

42、 UART_SendStr(”\nTest DateWeekTime_Test is Over!\n"); break; } case '6’: { UART_SendByte(g_getch); UART_SendStr("\n”); StepMOTO_Test(); UART_SendStr(”\nTest StepMOTO_Test is Over!\n”); break; } case

43、'7': { UART_SendByte(g_getch); UART_SendStr(”\n”); DCMOTO_Test(); UART_SendStr("\nTest DCMOTO_Test is Over!\n”); break; } case ’8': { UART_SendByte(g_getch); UART_SendStr("\n"); IIC_Test(); UART_Sen

44、dStr(”\nTest IIC_Test is Over!\n”); break; } case ’9': { return 0; } default: break; } } return 0; } 五、思考讨论题或体会或对改进实验的建议 通过这个综合实验,不仅熟悉了Magic2410各部分的工作原理,学习了如何去控制各部件,而且也学到了很多C的技巧(比如:#define SUM(a,b) ((a)+(b))等等在算术运算中宏的使用可以使函数既简洁又通用);还有看了那些底层驱动之后,知道了驱动的与 应用的本质区别:驱动实现所有基本功能,而不对上层应用加以限制,要注意它的技巧性与简洁性.

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服