当前位置: 首页 > news >正文

建设垂直网站需要哪些流程图网站建设高度

建设垂直网站需要哪些流程图,网站建设高度,推广一般收多少钱,wordpress 端口号1.I2C介绍 I2C总线是一种通用数据总线#xff0c;两根通信线#xff1a;SCL#xff08;Serial Clock#xff09;、SDA#xff08;Serial Data#xff09; 同步#xff0c;半双工#xff0c;带数据应答#xff0c;支持总线挂载多设备#xff08;一主多从、多主多从两根通信线SCLSerial Clock、SDASerial Data 同步半双工带数据应答支持总线挂载多设备一主多从、多主多从 2.硬件电路 所有I2C设备的SCL连在一起SDA连在一起设备的SCL和SDA均要配置成开漏输出模式【只有低电平和浮空两种状态】。 SCL和SDA各添加一个上拉电阻 3.I2C时基单元 在读写时SCL低电平时SDA写SCL高电平时SDA不变 在起始和结束时SCL高电平SDA变化 空闲状态SCL和SDA由于外挂的上拉电阻拉高致高电平 起始和终止都是由主机产生的从机始终不会去碰SCL和SDA线 起始条件 SCL高电平期间SDA从高电平切换到低电平 终止条件 SCL高电平期间SDA从低电平切换到高电平 发送一个字节 SCL低电平期间主机将数据位依次放到SDA线上高位先行然后释放SCL从机将在SCL高电平期间读取数据位所以SCL高电平期间SDA不允许有数据变化依次循环上述过程8次即可发送一个字节【在发送时SCL和SDA都由主机进行控制】 由于有时钟线的控制主机可以进入中断此时传输会暂停时序不会发送变化 接收一个字节 SCL低电平期间从机将数据位依次放到SDA线上高位先行然后释放SCL主机将在SCL高电平期间读取数据位所以SCL高电平期间SDA不允许有数据变化依次循环上述过程8次即可接收一个字节主机在接收之前需要释放SDA此时从机获得SDA控制权释放SDA就是主机切换成输入模式“释放”可以理解为主机原本就是输入模式在下拉为低电平时是输出模式 发送应答 发送应答和接收应答就是发送数据的一位和接收数据的一位 主机在接收完一个字节之后在下一个时钟发送一位数据数据0表示应答数据1表示非应答 发送应答逻辑主机接收完一个字节数据后主机会给从机发送一个发送应答决定是否继续接收不继续接收就会收回对SDA的控制权 接收应答 主机在发送完一个字节之后在下一个时钟接收一位数据判断从机是否应答数据0表示应答数据1表示非应答主机在接收之前需要释放SDA 接收应答逻辑主机发送完一个字节数据后发送一个接收应答释放SDA控制权若有从机拿到控制权并拉低电平表示某个从机接收完毕。 4.MPU6050简介与应用 MPU6050是一个6轴姿态传感器可以测量芯片自身X、Y、Z轴的加速度、角速度参数通过数据融合可进一步得到姿态角欧拉角常应用于平衡车、飞行器等需要检测自身姿态的场景 MPU6050得出来的姿态角有三种PITCH俯仰角、ROLL横滚角、YAW航向角【对应XYZ】 3轴加速度计Accelerometer测量X、Y、Z轴的加速度 3轴陀螺仪传感器Gyroscope测量X、Y、Z轴的角速度 9轴是多了3轴磁力计磁场强度补测得的航向角因为磁场和硬件问题造成的积分累积偏差。 5.MPU6050参数 16位ADC采集传感器的模拟信号量化范围-32768~32767 加速度计满量程选择±2、±4、±8、±16g【量化范围对应加速度计的量程范围变化大则选大量程测量范围越广变化小则选小量程精度更高】 陀螺仪满量程选择 ±250、±500、±1000、±2000°/sec 可配置的数字低通滤波器平缓信号抖动可配置的时钟源可配置的采样分频 6.硬件电路 引脚功能图 7.I2C基本结构 8.软件I2C读写MPU6050 接线图 main.c #include stm32f10x.h #include Delay.h #include OLED.h #include MPU6050.huint8_t ID; int16_t AX, AY, AZ, GX, GY, GZ;int main(void) {OLED_Init();MPU6050_Init();OLED_ShowString(1, 1, ID:);ID MPU6050_GetID();OLED_ShowHexNum(1, 4, ID, 2);while (1){MPU6050_GetData(AX, AY, AZ, GX, GY, GZ);//参数指针指向各个寄存器地址OLED_ShowSignedNum(2, 1, AX, 5);OLED_ShowSignedNum(3, 1, AY, 5);OLED_ShowSignedNum(4, 1, AZ, 5);OLED_ShowSignedNum(2, 8, GX, 5);OLED_ShowSignedNum(3, 8, GY, 5);OLED_ShowSignedNum(4, 8, GZ, 5);} } MyI2C.c #include stm32f10x.h // Device header #include Delay.h /* 封装三个函数操作相应的IO口便于移植 MyI2C_W_SCL MyI2C_W_SDA MyI2C_R_SDA */ void MyI2C_W_SCL(uint8_t BitValue) {GPIO_WriteBit(GPIOB, GPIO_Pin_10, (BitAction)BitValue);Delay_us(10); }void MyI2C_W_SDA(uint8_t BitValue) {GPIO_WriteBit(GPIOB, GPIO_Pin_11, (BitAction)BitValue);Delay_us(10); }uint8_t MyI2C_R_SDA(void) {uint8_t BitValue;BitValue GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11);Delay_us(10);return BitValue; }void MyI2C_Init(void) {RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_OD;GPIO_InitStructure.GPIO_Pin GPIO_Pin_10 | GPIO_Pin_11;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOB, GPIO_InitStructure);GPIO_SetBits(GPIOB, GPIO_Pin_10 | GPIO_Pin_11); }void MyI2C_Start(void) {MyI2C_W_SDA(1);//为了兼容sr重复起始条件先释放sda后释放sclMyI2C_W_SCL(1);MyI2C_W_SDA(0);MyI2C_W_SCL(0); }void MyI2C_Stop(void) {MyI2C_W_SDA(0);//为了确保释放sda是高电平先拉低sdaMyI2C_W_SCL(1);MyI2C_W_SDA(1); }void MyI2C_SendByte(uint8_t Byte) {uint8_t i;for (i 0; i 8; i ){MyI2C_W_SDA(Byte (0x80 i));//高位先行按位与取出相应位数右移得到相应的位MyI2C_W_SCL(1);//高位读取sda数据MyI2C_W_SCL(0);} }uint8_t MyI2C_ReceiveByte(void) {uint8_t i, Byte 0x00;//定义一个字节的数据MyI2C_W_SDA(1);//主机释放sdafor (i 0; i 8; i ){MyI2C_W_SCL(1);//scl高电平时放入数据if (MyI2C_R_SDA() 1){Byte | (0x80 i);//输出寄存器为1则在该字节的相应位置写入1}MyI2C_W_SCL(0);}return Byte; } //发送用应答 void MyI2C_SendAck(uint8_t AckBit) {MyI2C_W_SDA(AckBit);MyI2C_W_SCL(1);MyI2C_W_SCL(0); } //接收应答 uint8_t MyI2C_ReceiveAck(void) {uint8_t AckBit;MyI2C_W_SDA(1);//释放sda而不是输出1MyI2C_W_SCL(1);AckBit MyI2C_R_SDA();//读到0则表示从机应答MyI2C_W_SCL(0);return AckBit; } MyI2C.h #ifndef __MYI2C_H #define __MYI2C_Hvoid MyI2C_Init(void); void MyI2C_Start(void); void MyI2C_Stop(void); void MyI2C_SendByte(uint8_t Byte); uint8_t MyI2C_ReceiveByte(void); void MyI2C_SendAck(uint8_t AckBit); uint8_t MyI2C_ReceiveAck(void);#endif MPU6050.c #include stm32f10x.h // Device header #include MyI2C.h #include MPU6050_Reg.h#define MPU6050_ADDRESS 0xD0//指定地址写 void MPU6050_WriteReg(uint8_t RegAddress, uint8_t Data) {MyI2C_Start();MyI2C_SendByte(MPU6050_ADDRESS);MyI2C_ReceiveAck();MyI2C_SendByte(RegAddress);MyI2C_ReceiveAck();MyI2C_SendByte(Data);MyI2C_ReceiveAck();MyI2C_Stop(); } //指定地址读 uint8_t MPU6050_ReadReg(uint8_t RegAddress) {uint8_t Data;MyI2C_Start();MyI2C_SendByte(MPU6050_ADDRESS);MyI2C_ReceiveAck();MyI2C_SendByte(RegAddress);MyI2C_ReceiveAck();//重复起始条件MyI2C_Start();MyI2C_SendByte(MPU6050_ADDRESS | 0x01);//指定地址写修改最低位为1MyI2C_ReceiveAck();Data MyI2C_ReceiveByte();MyI2C_SendAck(1);//主机收回控制权MyI2C_Stop();return Data; } //指定地址写之前需要取消睡眠模式 void MPU6050_Init(void) {MyI2C_Init();MPU6050_WriteReg(MPU6050_PWR_MGMT_1, 0x01);//最后三位选择时钟0x01选择陀螺仪x轴的时钟MPU6050_WriteReg(MPU6050_PWR_MGMT_2, 0x00);//不需要待机MPU6050_WriteReg(MPU6050_SMPLRT_DIV, 0x09);//10分频MPU6050_WriteReg(MPU6050_CONFIG, 0x06);//后三位给110低通滤波器MPU6050_WriteReg(MPU6050_GYRO_CONFIG, 0x18);//中间2位是满量程给11是最大量程MPU6050_WriteReg(MPU6050_ACCEL_CONFIG, 0x18);//中间2位是满量程给11是最大量程 }uint8_t MPU6050_GetID(void) {return MPU6050_ReadReg(MPU6050_WHO_AM_I);//指定地址读 } //获取数据寄存器函数参数为指针指向各个数据寄存器的地址 void MPU6050_GetData(int16_t *AccX, int16_t *AccY, int16_t *AccZ, int16_t *GyroX, int16_t *GyroY, int16_t *GyroZ) {uint8_t DataH, DataL;DataH MPU6050_ReadReg(MPU6050_ACCEL_XOUT_H);DataL MPU6050_ReadReg(MPU6050_ACCEL_XOUT_L);*AccX (DataH 8) | DataL;//该变量为16位有指针指向该地址DataH MPU6050_ReadReg(MPU6050_ACCEL_YOUT_H);DataL MPU6050_ReadReg(MPU6050_ACCEL_YOUT_L);*AccY (DataH 8) | DataL;DataH MPU6050_ReadReg(MPU6050_ACCEL_ZOUT_H);DataL MPU6050_ReadReg(MPU6050_ACCEL_ZOUT_L);*AccZ (DataH 8) | DataL;DataH MPU6050_ReadReg(MPU6050_GYRO_XOUT_H);DataL MPU6050_ReadReg(MPU6050_GYRO_XOUT_L);*GyroX (DataH 8) | DataL;DataH MPU6050_ReadReg(MPU6050_GYRO_YOUT_H);DataL MPU6050_ReadReg(MPU6050_GYRO_YOUT_L);*GyroY (DataH 8) | DataL;DataH MPU6050_ReadReg(MPU6050_GYRO_ZOUT_H);DataL MPU6050_ReadReg(MPU6050_GYRO_ZOUT_L);*GyroZ (DataH 8) | DataL; } /* 多返回值设计 1. 在该文件中定义全局变量extern暴露出去在main文件中使用 2. 用指针 3. 使用结构体打包 MPU6050.h #ifndef __MPU6050_H #define __MPU6050_Hvoid MPU6050_WriteReg(uint8_t RegAddress, uint8_t Data); uint8_t MPU6050_ReadReg(uint8_t RegAddress);void MPU6050_Init(void); uint8_t MPU6050_GetID(void); void MPU6050_GetData(int16_t *AccX, int16_t *AccY, int16_t *AccZ, int16_t *GyroX, int16_t *GyroY, int16_t *GyroZ);#endif MPU6050_Reg.h #ifndef __MPU6050_REG_H #define __MPU6050_REG_H#define MPU6050_SMPLRT_DIV 0x19 #define MPU6050_CONFIG 0x1A #define MPU6050_GYRO_CONFIG 0x1B #define MPU6050_ACCEL_CONFIG 0x1C#define MPU6050_ACCEL_XOUT_H 0x3B #define MPU6050_ACCEL_XOUT_L 0x3C #define MPU6050_ACCEL_YOUT_H 0x3D #define MPU6050_ACCEL_YOUT_L 0x3E #define MPU6050_ACCEL_ZOUT_H 0x3F #define MPU6050_ACCEL_ZOUT_L 0x40 #define MPU6050_TEMP_OUT_H 0x41 #define MPU6050_TEMP_OUT_L 0x42 #define MPU6050_GYRO_XOUT_H 0x43 #define MPU6050_GYRO_XOUT_L 0x44 #define MPU6050_GYRO_YOUT_H 0x45 #define MPU6050_GYRO_YOUT_L 0x46 #define MPU6050_GYRO_ZOUT_H 0x47 #define MPU6050_GYRO_ZOUT_L 0x48#define MPU6050_PWR_MGMT_1 0x6B #define MPU6050_PWR_MGMT_2 0x6C #define MPU6050_WHO_AM_I 0x75#endif 9.硬件I2C读写MPU6050 接线图 main.c #include stm32f10x.h // Device header #include Delay.h #include OLED.h #include MPU6050.huint8_t ID; int16_t AX, AY, AZ, GX, GY, GZ;int main(void) {OLED_Init();MPU6050_Init();OLED_ShowString(1, 1, ID:);ID MPU6050_GetID();OLED_ShowHexNum(1, 4, ID, 2);while (1){MPU6050_GetData(AX, AY, AZ, GX, GY, GZ);OLED_ShowSignedNum(2, 1, AX, 5);OLED_ShowSignedNum(3, 1, AY, 5);OLED_ShowSignedNum(4, 1, AZ, 5);OLED_ShowSignedNum(2, 8, GX, 5);OLED_ShowSignedNum(3, 8, GY, 5);OLED_ShowSignedNum(4, 8, GZ, 5);} } MPU6050.C #include stm32f10x.h // Device header #include MPU6050_Reg.h#define MPU6050_ADDRESS 0xD0 //等待和超时退出函数 void MPU6050_WaitEvent(I2C_TypeDef* I2Cx, uint32_t I2C_EVENT) {uint32_t Timeout;Timeout 10000;while (I2C_CheckEvent(I2Cx, I2C_EVENT) ! SUCCESS){Timeout --;if (Timeout 0){break;}} }//指定地址写 void MPU6050_WriteReg(uint8_t RegAddress, uint8_t Data) {I2C_GenerateSTART(I2C2, ENABLE);//生成起始条件/*非阻塞式函数需要通过状态标志位判断是否完成*/MPU6050_WaitEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT);//检查EV5事件I2C_Send7bitAddress(I2C2, MPU6050_ADDRESS, I2C_Direction_Transmitter);//发送7位地址读写标志位由第三个参数决定该函数自带接收应答的过程【接收数据也自带发送应答功能】MPU6050_WaitEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED);//检查EV6事件I2C_SendData(I2C2, RegAddress);//将数据写入DR寄存器硬件自动转到移位寄存器MPU6050_WaitEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTING);//检查EV8事件I2C_SendData(I2C2, Data);MPU6050_WaitEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED);//检查EV8——2事件I2C_GenerateSTOP(I2C2, ENABLE);//生成终止条件 } //指定地址读先指定地址写再调用当前地址读 uint8_t MPU6050_ReadReg(uint8_t RegAddress) {uint8_t Data;//指定地址写I2C_GenerateSTART(I2C2, ENABLE);MPU6050_WaitEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT);I2C_Send7bitAddress(I2C2, MPU6050_ADDRESS, I2C_Direction_Transmitter);MPU6050_WaitEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED);I2C_SendData(I2C2, RegAddress);MPU6050_WaitEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED);//当前地址读I2C_GenerateSTART(I2C2, ENABLE);//重复起始条件MPU6050_WaitEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT);I2C_Send7bitAddress(I2C2, MPU6050_ADDRESS, I2C_Direction_Receiver);//发送7位地址读写标志位由第三个参数决定不是发送则则置1发送则为0MPU6050_WaitEvent(I2C2, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED);//EV6事件/*如果只需要接收一个字节则在EV6事件之后需要ACK置0且配置stop标志位否则会多读取一个字节如果是接收多个字节则直接等待EV7事件在EV7_1事件之前ACK置0且配置stop标志位为1*/I2C_AcknowledgeConfig(I2C2, DISABLE);//配置ACK应答位为0I2C_GenerateSTOP(I2C2, ENABLE);//配置停止位MPU6050_WaitEvent(I2C2, I2C_EVENT_MASTER_BYTE_RECEIVED);//等待EV7事件Data I2C_ReceiveData(I2C2);//将数据读取到DR寄存器硬件自动转到移位寄存器I2C_AcknowledgeConfig(I2C2, ENABLE);//恢复ACK应答位为1方便指定地址收多个字节return Data; } //硬件I2C初始化和指定地址写 void MPU6050_Init(void) {RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_OD;GPIO_InitStructure.GPIO_Pin GPIO_Pin_10 | GPIO_Pin_11;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOB, GPIO_InitStructure);//I2C初始化I2C_InitTypeDef I2C_InitStructure;I2C_InitStructure.I2C_Mode I2C_Mode_I2C;I2C_InitStructure.I2C_ClockSpeed 50000;//最大400KHzI2C_InitStructure.I2C_DutyCycle I2C_DutyCycle_2;/*在标准速度下占空比为1:1在快速模式下设置才有用有2个参数可以选择低电平高电平分别是16:9和2:1因为在scl低电平时sda会切换电平此时适当多分配低电平时间可以在快速模式下完成电平变化。*/I2C_InitStructure.I2C_Ack I2C_Ack_Enable;//配置ack应答位I2C_InitStructure.I2C_AcknowledgedAddress I2C_AcknowledgedAddress_7bit;//stm32作为从机可以响应多少位地址I2C_InitStructure.I2C_OwnAddress1 0x00;//作为从机时设置自身地址1I2C_Init(I2C2, I2C_InitStructure);I2C_Cmd(I2C2, ENABLE);MPU6050_WriteReg(MPU6050_PWR_MGMT_1, 0x01);MPU6050_WriteReg(MPU6050_PWR_MGMT_2, 0x00);MPU6050_WriteReg(MPU6050_SMPLRT_DIV, 0x09);MPU6050_WriteReg(MPU6050_CONFIG, 0x06);MPU6050_WriteReg(MPU6050_GYRO_CONFIG, 0x18);MPU6050_WriteReg(MPU6050_ACCEL_CONFIG, 0x18); }uint8_t MPU6050_GetID(void) {return MPU6050_ReadReg(MPU6050_WHO_AM_I); } //获取数据寄存器函数参数为指针指向各个数据寄存器的地址 void MPU6050_GetData(int16_t *AccX, int16_t *AccY, int16_t *AccZ, int16_t *GyroX, int16_t *GyroY, int16_t *GyroZ) {uint8_t DataH, DataL;DataH MPU6050_ReadReg(MPU6050_ACCEL_XOUT_H);DataL MPU6050_ReadReg(MPU6050_ACCEL_XOUT_L);*AccX (DataH 8) | DataL;DataH MPU6050_ReadReg(MPU6050_ACCEL_YOUT_H);DataL MPU6050_ReadReg(MPU6050_ACCEL_YOUT_L);*AccY (DataH 8) | DataL;DataH MPU6050_ReadReg(MPU6050_ACCEL_ZOUT_H);DataL MPU6050_ReadReg(MPU6050_ACCEL_ZOUT_L);*AccZ (DataH 8) | DataL;DataH MPU6050_ReadReg(MPU6050_GYRO_XOUT_H);DataL MPU6050_ReadReg(MPU6050_GYRO_XOUT_L);*GyroX (DataH 8) | DataL;DataH MPU6050_ReadReg(MPU6050_GYRO_YOUT_H);DataL MPU6050_ReadReg(MPU6050_GYRO_YOUT_L);*GyroY (DataH 8) | DataL;DataH MPU6050_ReadReg(MPU6050_GYRO_ZOUT_H);DataL MPU6050_ReadReg(MPU6050_GYRO_ZOUT_L);*GyroZ (DataH 8) | DataL; } MPU6050.h #ifndef __MPU6050_H #define __MPU6050_Hvoid MPU6050_WriteReg(uint8_t RegAddress, uint8_t Data); uint8_t MPU6050_ReadReg(uint8_t RegAddress);void MPU6050_Init(void); uint8_t MPU6050_GetID(void); void MPU6050_GetData(int16_t *AccX, int16_t *AccY, int16_t *AccZ, int16_t *GyroX, int16_t *GyroY, int16_t *GyroZ);#endif MPU6050_Reg.h 使用宏定义将寄存器地址用一个字符串表示 #ifndef __MPU6050_REG_H #define __MPU6050_REG_H#define MPU6050_SMPLRT_DIV 0x19 #define MPU6050_CONFIG 0x1A #define MPU6050_GYRO_CONFIG 0x1B #define MPU6050_ACCEL_CONFIG 0x1C#define MPU6050_ACCEL_XOUT_H 0x3B #define MPU6050_ACCEL_XOUT_L 0x3C #define MPU6050_ACCEL_YOUT_H 0x3D #define MPU6050_ACCEL_YOUT_L 0x3E #define MPU6050_ACCEL_ZOUT_H 0x3F #define MPU6050_ACCEL_ZOUT_L 0x40 #define MPU6050_TEMP_OUT_H 0x41 #define MPU6050_TEMP_OUT_L 0x42 #define MPU6050_GYRO_XOUT_H 0x43 #define MPU6050_GYRO_XOUT_L 0x44 #define MPU6050_GYRO_YOUT_H 0x45 #define MPU6050_GYRO_YOUT_L 0x46 #define MPU6050_GYRO_ZOUT_H 0x47 #define MPU6050_GYRO_ZOUT_L 0x48#define MPU6050_PWR_MGMT_1 0x6B #define MPU6050_PWR_MGMT_2 0x6C #define MPU6050_WHO_AM_I 0x75#endif
http://www.hkea.cn/news/14370602/

相关文章:

  • 网站建设静态部分总结网站建设 采集
  • 如何配置php网站做cad室内平面图的家具素材网站
  • 专门做油画交流的网站做电影网站危险吗
  • 网站建设源码是什么恶意网站是怎么实现的
  • 网站的分页效果怎么做云一网站设计
  • 贵阳企业自助建站手机wordpress怎么保存图片
  • 网站开发 教学目标老鹰主机安装Wordpress
  • 如何开发一个网站php网站开发现状都用什么打开模板
  • 建设网站的报价永久免费的移动建站平台
  • 网站建设网站软件有哪些wordpress 阿里大于鱼
  • 广西人才网官方网站提供邯郸移动网站建设
  • 河南省建设厅专业业务系统网站网页游戏排行榜奇迹
  • 柳传志 潘石屹做水果网站wordpress 搭网站
  • 义乌公司网站建设网页链接调用服务是干嘛的
  • 成都网站设计定制有哪些网站使用ftp
  • 网站这么绑定到域名直播软件app平台大全
  • php做的网站怎么发布印度域名注册网站
  • 网站设计的毕业设计百度高级搜索技巧
  • 海关企业信息查询网站郑州网站商城建设
  • 域名申请通过了网站怎么做php wordpress 模版
  • 有哪些网站可以做pptjquery 单页网站
  • 网站建设免费国外怎样套用wordpress模板
  • 江苏网站建设包括哪些四川省工程造价总站官网
  • 公司网站设计平台网站建设工厂
  • 网站建设兆金手指科杰网站开发市场分析
  • 烟台网站建设力荐企汇互联见效付款门户网站建设的好处
  • 外贸网站零基础建站电子商务物流网站建设规划方案
  • 门户网站制作需要多少钱wordpress内容页标题
  • 网站建设认知与理解怎么做网站的排名优化
  • 工信部网站备案平台win2012 wordpress