新聞詳情

幻彩燈珠--STM32F103 SPI驅(qū)動(dòng)WS2812

 二維碼
發(fā)表時(shí)間:2022-03-30 09:59
文章附圖

  之前發(fā)了一個(gè)基于涂鴉平臺(tái)的寵物自動(dòng)喂食器點(diǎn)此跳轉(zhuǎn),已經(jīng)有小夜燈功能了,但是躁動(dòng)的心豈能因此平靜,功能以及花里胡哨,那就讓他華麗起來(lái),除了畫手們的涂裝風(fēng)格,作為電子工程師,得用我們自己的方式美化。正好手里有個(gè)ws2812的燈環(huán),全彩模式開始。

  WS2812特點(diǎn):

  1.WS2812燈珠內(nèi)置控制電路與RGB芯片,集成在一個(gè)5050封裝的元器件中,構(gòu)成一個(gè)完整的外控像素點(diǎn)。

  2.每個(gè)像素點(diǎn)的三基色可實(shí)現(xiàn)256級(jí)亮度顯示,完成16777216種顏色的全真色彩顯示,掃描頻率不低于400Hz/s。

  3.串行級(jí)聯(lián)接口,能通過(guò)一根信號(hào)線完成數(shù)據(jù)的接收與解碼。

  4.當(dāng)刷新速率30幀/秒時(shí),低速模式級(jí)聯(lián)數(shù)不小于512點(diǎn),高速模式不小于1024點(diǎn)。

  5.數(shù)據(jù)發(fā)送速度可達(dá)800Kbps。

  數(shù)據(jù)傳輸:

  ws2812的每顆燈珠的控制需要24位數(shù)據(jù),分為8位綠色+8位紅色+8位藍(lán)色,每個(gè)像素點(diǎn)的三基色顏色可實(shí)現(xiàn)256級(jí)亮度顯示,完成16777216種顏色的全真色彩顯示。燈珠之間采用串行級(jí)聯(lián),在上電復(fù)位以后,控制器可向燈帶發(fā)送一串24bit的數(shù)據(jù),比如需要點(diǎn)亮10顆燈,我們發(fā)送10個(gè)24bit的數(shù)據(jù)到第一個(gè)燈,第一個(gè)燈的DIN端接受控制器發(fā)過(guò)來(lái)的24bit數(shù)據(jù),第一個(gè)燈珠會(huì)提取第一個(gè)24bit數(shù)據(jù)后會(huì)將該數(shù)據(jù)送進(jìn)數(shù)據(jù)鎖存器,剩余的數(shù)據(jù)經(jīng)過(guò)內(nèi)部整形電路向下傳送,直到所有的燈都獲取一個(gè)24bit數(shù)據(jù)。這10個(gè)24bit數(shù)據(jù)的發(fā)送間隔不能超過(guò)50us,否則會(huì)導(dǎo)致下一次的顏色數(shù)據(jù)被第一個(gè)重新鎖存,就無(wú)法完成完整的點(diǎn)亮。( f# T% }0 [3 q

  這里需要著重點(diǎn)一下時(shí)序相關(guān)的知識(shí),先看時(shí)序波形圖和數(shù)據(jù)傳輸時(shí)間表:





  根據(jù)上面兩個(gè)圖可以看到ws2812的電平反轉(zhuǎn)是納秒級(jí)別的,所以在使用單片機(jī)外設(shè)時(shí)我們需要對(duì)單片機(jī)的外設(shè)的傳輸速度進(jìn)行控制,速度慢了根本無(wú)法點(diǎn)亮。; S( G) r; U: ]/ l" e: d( y) W

  操作開始:在驅(qū)動(dòng)ws2812的時(shí)候一般采用PWM或者SPI的方式,這兩個(gè)速度較快,比直接使用IO口進(jìn)行電平反轉(zhuǎn)要方便,且控制效果更好。這里我們采用SPI的方式,因?yàn)樵邳c(diǎn)燈是的數(shù)據(jù)發(fā)送間隔時(shí)間的約束,如果我們使用SPI發(fā)送的數(shù)據(jù)較多,中途遇到中斷可能會(huì)打斷我們的點(diǎn)燈,所以我這里使用SPI的DMA進(jìn)行控制,不怕被其他影響。

  $ K& Q* H) y8 A3 N

  通過(guò)硬件SPI我們模擬WS2812的通信時(shí)序。單片機(jī)選用STM32F103,主頻72M,SPI1分頻設(shè)置為8,這樣SPI1的通信頻率為9M。時(shí)間很充足,如果使用SPI2,則需要減小分頻系數(shù),否則無(wú)法點(diǎn)亮。我這里采用的便是SPI2,4分頻,因?yàn)镾PI1被我的屏幕占用了。1 h7 F1 f/ g& Q2 l3 H

  .h文件只要定義了燈珠的個(gè)數(shù)和0碼1碼。不同的燈珠數(shù)量只需修改PIXEL_NUM 的值

  #ifndef __WS2812_H#define __WS2812_H

  #include "stm32f10x.h"

  #define PIXEL_NUM 24

  //硬件spi模擬ws2811時(shí)序(用spi的8位數(shù)據(jù)模擬ws281x的一位數(shù)據(jù))//要將系統(tǒng)時(shí)鐘設(shè)置為56M,分頻數(shù)設(shè)置為8,則SPI的通信頻率為7M,傳輸一位數(shù)據(jù)的時(shí)間約為143納秒(ns)//3*143 = 429ns 5*143 = 715ns 符合WS281X芯片的通信時(shí)序。// _____ // | |___| 11111000 high level// ___ // | |_____| 11100000 low level" b0 v* d3 B$ G5 m

  #define WS_HIGH 0XF8#define WS_LOW 0XE0;

  void ws281x_init(void);void ws281x_closeAll(void);void ws281x_rainbowCycle(uint8_t wait);uint32_t ws281x_color(uint8_t red, uint8_t green, uint8_t blue);void ws281x_setPixelColor(uint16_t n ,uint32_t GRBcolor);void ws281x_show(void);

  void ws281x_theaterChase(uint32_t c, uint8_t wait);void ws281x_colorWipe(uint32_t c, uint8_t wait);void ws281x_rainbow(uint8_t wait);void ws281x_theaterChaseRainbow(uint8_t wait);

  #endif /* __WS2812_H */

  #include "../BOARD/ws2812/ws2812.h"#include "usart.h"#include "delay.h"

  uint8_t pixelBuffer[PIXEL_NUM][24] ;" k* H) D$ J, e; F W; H

  7 Z0 x! U" e; j% G" m

  void ws281x_init(void){ GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; DMA_InitTypeDef DMA_InitStructure;

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //PORTA時(shí)鐘使能 RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE); //SPI1時(shí)鐘使能 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //使能DMA傳輸5 m/ ^; {1 S- T5 l) c

  /* PA7 SPI1_MOSI */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //PA7復(fù)用推挽輸出 SPI GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOA

  SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx; //設(shè)置SPI單向或者雙向的數(shù)據(jù)模式:SPI設(shè)置為雙線雙向全雙工 SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //設(shè)置SPI工作模式:設(shè)置為主SPI SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //設(shè)置SPI的數(shù)據(jù)大小:SPI發(fā)送接收8位幀結(jié)構(gòu) SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; //串行同步時(shí)鐘的空閑狀態(tài)為低電平 SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; //串行同步時(shí)鐘的第2個(gè)跳變沿(上升或下降)數(shù)據(jù)被采樣 SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //NSS信號(hào)由硬件(NSS管腳)還是軟件(使用SSI位)管理:內(nèi)部NSS信號(hào)有SSI位控制 SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4; //定義波特率預(yù)分頻的值:波特率預(yù)分頻值為16 SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //指定數(shù)據(jù)傳輸從MSB位還是LSB位開始:數(shù)據(jù)傳輸從MSB位開始 SPI_InitStructure.SPI_CRCPolynomial = 7; //CRC值計(jì)算的多項(xiàng)式 SPI_Init(SPI2, &SPI_InitStructure); //根據(jù)SPI_InitStruct中指定的參數(shù)初始化外設(shè)SPIx寄存器

  SPI_Cmd(SPI2, ENABLE); //使能SPI外設(shè) SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Tx, ENABLE); DMA_DeInit(DMA1_Channel5); //將DMA的通道1寄存器重設(shè)為缺省值 DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t) &(SPI2 -> DR); //cpar; //DMA外設(shè)ADC基地址 DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)pixelBuffer; //cmar; //DMA內(nèi)存基地址 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST; //數(shù)據(jù)傳輸方向,從內(nèi)存讀取發(fā)送到外設(shè) DMA_InitStructure.DMA_BufferSize = PIXEL_NUM * 24; //cndtr; //DMA通道的DMA緩存的大小 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //外設(shè)地址寄存器不變 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //內(nèi)存地址寄存器遞增 DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; //數(shù)據(jù)寬度為8位 DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; //數(shù)據(jù)寬度為8位 DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; //工作在正常緩存模式 DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; //DMA通道 x擁有中優(yōu)先級(jí) DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; //DMA通道x沒有設(shè)置為內(nèi)存到內(nèi)存?zhèn)鬏?DMA_Init(DMA1_Channel5, &DMA_InitStructure); //根據(jù)DMA_InitStruct中指定的參數(shù)初始化DMA的通道USART1_Tx_DMA_Channel所標(biāo)識(shí)的寄存器 ws281x_closeAll(); //關(guān)閉全部的燈 delay_ms(100); //關(guān)閉全部的燈需要一定的時(shí)間 }

  void ws281x_closeAll(void){ uint16_t i; uint8_t j; for(i = 0; i < PIXEL_NUM; ++i) { for(j = 0; j < 24; ++j) { pixelBuffer[j] = WS_LOW; } } ws281x_show();}

  uint32_t ws281x_color(uint8_t red, uint8_t green, uint8_t blue){ return green << 16 | red << 8 | blue;}4 @, B7 p) q) {, `, I" X) s

  void ws281x_setPixelColor(uint16_t n ,uint32_t GRBcolor){ uint8_t i; if(n < PIXEL_NUM) { for(i = 0; i < 24; ++i) { pixelBuffer[n] = (((GRBcolor << i) & 0X800000) ? WS_HIGH : WS_LOW); } }}$ s) V [/ M! [& k: l2 S; F

  void ws281x_setPixelRGB(uint16_t n ,uint8_t red, uint8_t green, uint8_t blue){ uint8_t i; if(n < PIXEL_NUM) { for(i = 0; i < 24; ++i) { pixelBuffer[n] = (((ws281x_color(red,green,blue) << i) & 0X800000) ? WS_HIGH : WS_LOW); } }} S8 t. {2 h0 ~+ d$ f1 f

  void ws281x_show(void){ DMA_Cmd(DMA1_Channel5, DISABLE ); //關(guān)閉USART1 TX DMA1 所指示的通道 DMA_CleaRFlag(DMA1_FLAG_TC5); DMA_SetCurrDataCounter(DMA1_Channel5,24 * PIXEL_NUM );//DMA通道的DMA緩存的大小 DMA_Cmd(DMA1_Channel5, ENABLE); //使能USART1 TX DMA1 所指示的通道}( u f4 G3 L2 H# {6 x- J) Q

  / ], A6 r3 L9 b+ c# f9 ~) R

  // Input a value 0 to 255 to get a color value.// The colours are a transition r - g - b - back to r.uint32_t ws281x_wheel(uint8_t wheelPos) { wheelPos = 255 - wheelPos; if(wheelPos < 85) { return ws281x_color(255 - wheelPos * 3, 0, wheelPos * 3); } if(wheelPos < 170) { wheelPos -= 85; return ws281x_color(0, wheelPos * 3, 255 - wheelPos * 3); } wheelPos -= 170; return ws281x_color(wheelPos * 3, 255 - wheelPos * 3, 0);}0 {# {; H7 z! J0 T$ |# Z

  // Fill the dots one after the other with a colorvoid ws281x_colorWipe(uint32_t c, uint8_t wait) { for(uint16_t i=0; i

  void ws281x_rainbow(uint8_t wait) { uint16_t i, j;

  for(j=0; j<256; j++) { for(i=0; i

  // Slightly different, this makes the rainbow equally distributed throughoutvoid ws281x_rainbowCycle(uint8_t wait) { uint16_t i, j;( m/ S/ q* U' D, I4 ]5 B

  for(j=0; j<256*5; j++) { // 5 cycles of all colors on wheel for(i=0; i< PIXEL_NUM; i++) { ws281x_setPixelColor(i,ws281x_wheel(((i * 256 / PIXEL_NUM) + j) & 255)); } ws281x_show(); delay_ms(wait); }}# J( `" j3 |5 l7 j2 G g

  //Theatre-style crawling lights.void ws281x_theaterChase(uint32_t c, uint8_t wait) { for (int j=0; j<10; j++) { //do 10 cycles of chasing for (int q=0; q < 3; q++) { for (uint16_t i=0; i < PIXEL_NUM; i=i+3) { ws281x_setPixelColor(i+q, c); //turn every third pixel on } ws281x_show();% `& ^* R: S7 R

  delay_ms(wait);

  for (uint16_t i=0; i < PIXEL_NUM; i=i+3) { ws281x_setPixelColor(i+q, 0); //turn every third pixel off } } }}2 u% i! Q$ [9 I& R6 l8 R

  //Theatre-style crawling lights with rainbow effectvoid ws281x_theaterChaseRainbow(uint8_t wait) { for (int j=0; j < 256; j++) { // cycle all 256 colors in the wheel for (int q=0; q < 3; q++) { for (uint16_t i=0; i < PIXEL_NUM; i=i+3) { ws281x_setPixelColor(i+q, ws281x_wheel( (i+j) % 255)); //turn every third pixel on } ws281x_show();. T4 W/ b( e% o, E3 n

  delay_ms(wait);

  for (uint16_t i=0; i < PIXEL_NUM; i=i+3) { ws281x_setPixelColor(i+q, 0); //turn every third pixel off } } }}

  ( S" o5 I1 l0 m* `1 r( l- P

  ) M0 f9 L# m" x8 {

  1 Q1 n! D3 w( g9 E, S

  const char s[5];int8_t i;; R* I Y$ m( @* q' S" K

  int main(void){// usart1_init(115200); delay_init();% R( y0 V" N, i$ y) [% I

  ws281x_init();

  while(1) { // Some example procedures showing how to display to the pixels: ws281x_colorWipe(ws281x_color(255, 0, 0), 50); // Red ws281x_colorWipe(ws281x_color(0, 255, 0), 50); // Green ws281x_colorWipe(ws281x_color(0, 0, 255), 50); // Blue//colorWipe(strip.Color(0, 0, 0, 255), 50); // White RGBW // Send a theater pixel chase in... ws281x_theaterChase(ws281x_color(127, 127, 127), 50); // White ws281x_theaterChase(ws281x_color(127, 0, 0), 50); // Red ws281x_theaterChase(ws281x_color(0, 0, 127), 50); // Blue. K/ h) C4 i7 a. t- D) b

  //ws281x_rainbow(20); ws281x_rainbowCycle(20); ws281x_theaterChaseRainbow(200); for(i = 0; i < PIXEL_NUM; ++i) { ws281x_setPixelColor(i, ws281x_color(0,250,0)); ws281x_show(); delay_ms(500); } }}4 K1 G9 z9 ^3 Z- g/ {+ n" f

  在ws2812.c移植了Adafruit_NeoPixel庫(kù)的部分函數(shù),用以實(shí)現(xiàn)炫酷的顯示效果。; k h. }7 o9 N

  都是基礎(chǔ)的SPI,不說(shuō)廢話,移植就能用。展示一下效果吧!# U8 ]7 i! d2 f# n1 v2 g. z




  『本文轉(zhuǎn)載自網(wǎng)絡(luò),版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系刪除』

最新文章
2024-08-10
2024-08-10
2024-08-07
2024-08-07
2024-08-07
2024-08-07
2024-08-07
2024-07-02
2024-07-02
2024-07-02
隨機(jī)文章
LED光源的種類很多,不同的LED燈,內(nèi)部結(jié)構(gòu)所用的燈珠也會(huì)有細(xì)微差別。今天,小編為大家全面、系統(tǒng)地科普一下LED燈珠的常見類型,供大家參考使用。LED光源可以分為兩大類:芯片類光源和替換類光源。芯片類光源1引腳插入型(DIP)這種LED燈珠是結(jié)構(gòu)最簡(jiǎn)單的發(fā)光二極管,因?yàn)闊糁橄旅嬗袃筛嗡啤澳_”的細(xì)絲,可以直接穿接在電路板上,所以稱之為引腳插入式的燈珠。使用特點(diǎn):它的安全性好、性能穩(wěn)定,在低...
日前,富采投控旗下晶電與錼創(chuàng)科技全資子公司錼創(chuàng)顯示宣布合作,將由錼創(chuàng)顯示協(xié)助其建置6英寸Micro LED生產(chǎn)線。目前Micro LED大型顯示器是前驅(qū)產(chǎn)品,盡管仍有技術(shù)與成本問(wèn)題待克服,不過(guò)TrendForce集邦咨詢同步看好Micro LED運(yùn)用于頭戴式的AR穿透式智慧眼鏡、穿戴式的智慧手表以及車用的智慧駕駛座艙及透明顯示產(chǎn)品的發(fā)展,有望刺激Micro LED高階應(yīng)用產(chǎn)品的誕生,預(yù)估至2...
  LED電子顯示屏很重要的組成部分就有LED單元板,如果單元板有問(wèn)題,會(huì)直影響LED顯示屏的整體質(zhì)量!所以,如何辨別LED單元板的好壞是LED顯示屏商家關(guān)心的問(wèn)題,下面整理了一些檢測(cè)LED單元板的常見方法。  一、材質(zhì)  1. LED單元板板材  有些LED單元板廠家為了低價(jià)競(jìng)爭(zhēng),采用廉價(jià)的阻燃紙質(zhì)板或者是單面纖維板作為L(zhǎng)ED燈的PCB線路板。因?yàn)槿@wPCB板很貴。剛開始看不出差別,一般...
  8月17日,福建泉州市2022年重大項(xiàng)目視頻連線開工活動(dòng)在晉江舉行。據(jù)悉,晉江市此次共22個(gè)項(xiàng)目集中開工,總投資965.5億元,涵蓋光電顯示等多個(gè)領(lǐng)域?! 〈舜渭虚_工活動(dòng)中,位于高端制造產(chǎn)業(yè)園的MiniLED封裝產(chǎn)業(yè)項(xiàng)目作為安溪縣的代表性重大項(xiàng)目,向全市展示開工場(chǎng)面?!   D片來(lái)源:安溪縣融媒體中心  據(jù)悉,安溪縣MiniLED封裝產(chǎn)業(yè)項(xiàng)目總投資11.67億元,年度計(jì)劃投資1.5億元...
  1:幻彩燈珠簡(jiǎn)介  1.1 幻彩內(nèi)置IC燈珠的特點(diǎn)  幻彩內(nèi)置IC燈泡主要有兩個(gè)部分:一個(gè)是LED,另一個(gè)是IC晶體管。LED部分負(fù)責(zé)產(chǎn)生光,而IC晶體管則負(fù)責(zé)控制LED的亮度和顏色。通常情況下,一個(gè)幻彩內(nèi)置IC燈泡包含三個(gè)不同顏色的LED:紅、 綠、 和 藍(lán) (RGB) 。 控制晶體 管開關(guān)的電流大小,來(lái)調(diào)整 LED的亮度。而通過(guò)不同比例地控制三個(gè) LED的亮度,可以得到不同顏色的光。...
  led燈在我們的生活中使用極廣,同時(shí)在使用led燈時(shí)還會(huì)出現(xiàn)一些故障,如只發(fā)弱光,甚至是不亮了。面對(duì)這些情況應(yīng)該怎么辦?  一、led燈只發(fā)弱光怎么回事  電源參數(shù)主要注意兩個(gè),一個(gè)是瓦數(shù),一個(gè)是電源輸出電壓(也就是燈板上的輸入DC電壓)。  也可能是燈的驅(qū)動(dòng)電源損壞了,若是獨(dú)立電源,可買個(gè)相同規(guī)格的更換,若是一體的,建議整燈更換。  還有可能是led燈泡的問(wèn)題,也可以再買個(gè)燈泡看看?!?..
  led燈是現(xiàn)代生活中再常見不過(guò)的燈具,人們選擇led燈時(shí)會(huì)考慮其使用壽命,更需要注意保養(yǎng)。究竟led燈怎么保養(yǎng)?  一、led燈的使用壽命多少  正常來(lái)說(shuō),led燈的使用壽命差不多都是能夠達(dá)到4萬(wàn)小時(shí)到5萬(wàn)小時(shí)的,這個(gè)跟led燈的品牌和性能是有很大的關(guān)系的,像大品牌的led燈各方面還是比較有保障的,使用壽命久,而且質(zhì)量也是非常不錯(cuò)的,不容易出現(xiàn)問(wèn)題。  現(xiàn)在led燈的應(yīng)用還是非常廣泛的,...
  led燈不亮怎么回事  led燈是我們生活中再常見不過(guò)的燈具,led燈在使用過(guò)程中容易出現(xiàn)不亮的情況,究竟是怎么回事?不亮的話怎么修理呢  一、led燈不亮怎么回事  1、led燈條的焊接點(diǎn)有虛焊現(xiàn)象,運(yùn)輸過(guò)程中的震動(dòng)造成焊點(diǎn)脫落而導(dǎo)致燈帶不亮。  2、焊錫質(zhì)量不好,led燈條在彎折的過(guò)程中焊點(diǎn)容易產(chǎn)生脆裂、脫落現(xiàn)象?! ?、安裝時(shí)彎折角度過(guò)大,造成led燈條焊點(diǎn)與銅箔分離而導(dǎo)致不亮?!?..
  對(duì)于led燈人們都并不陌生,甚至我們生活中大部分燈具都是led燈,led燈在使用過(guò)程中可能會(huì)出現(xiàn)一些問(wèn)題,如不亮或者變?nèi)醯膯?wèn)題   一、led燈不亮怎么辦  1、關(guān)掉開關(guān),在折疊梯子的幫助下,拆掉led吸頂燈的外殼,并檢查燈管是否出現(xiàn)發(fā)黑發(fā)暗的地方。如果有,很有可能是燈管已經(jīng)損壞了。必須更換了,這種LED燈管在五金商店里面可以買到,建議選擇知名品牌?! ?、如果燈管還是完好的,那么應(yīng)該試...

聯(lián)系我們

----------------------------------------------

銷售熱線:181 2996 9297

電話:4008-320-328 /   0755-29573979   

傳真:0755-29573533

郵件:tczm@tczmled.com   郵編:518000

地址::深圳市光明區(qū)鳳凰街道長(zhǎng)鳳路263號(hào)天成高新園

郵箱:jiangeng@tczmled.com   (投訴與合作)


(關(guān)注我們)
_____________________________________________________________________________________________________________________________________________________________________________________________________________________________
_____________________________________________________________________________________________________________________________________________________________________________________________________________________________
會(huì)員登錄
登錄
其他賬號(hào)登錄:
我的資料
留言
回到頂部