诺基亚5110液晶使用及显示程序实例

诺基亚5110液晶使用及显示程序实例


2023年11月26日发(作者:兰博基尼svj)

该模块具有以下特点:

●84x48 的点阵LCD,可以显示4 行汉字,

采用串行接口与主处理器进行通信,接口信号线数量大幅度减少,包括电源和地在内的信

号线仅有9 条。支持多种串行通信协议(如AVR 单片机的SPIMCS51 的串口模式0

等),传输速率高达4Mbps,可全速写入显示数据,无等待时间。

可通过导电胶连接模块与印制版,而不用连接电缆,用模块上的金属钩可将模块固定到印

制板上,因而非常便于安装和更换。

●LCD 控制器/驱动器芯片已绑定到LCD 晶片上,模块的体积很小。

采用低电压供电,正常显示时的工作电流在200μA 以下,且具有掉电模式。

LPH7366 的这些特点非常适合于电池供电的便携式通信设备和测试设备中

C8051F学习笔记:Nokia 5110驱动

Nokia5110是一款经典机型,可能由于经典的缘故,旧机器很多,所以很多

电子工程师就把旧机器的屏幕拆下来,自己驱动Nokia5110用于开发的设备显

示,取代LCD1602

使用Nokia5110液晶的四大理由

1)性价比高,LCD1602可以显示32个字符,而Nokia5110可以显示15个汉

字,30个字符。Nokia5110裸屏仅8.8元,LCD1602一般15元左右,LCD

12864一般50~70元。

2)接口简单,仅四根I/O线即可驱动,LCD160211I/O线,LCD12864

12根。

3)速度快,是LCD1286420倍,是LCD160240倍。

4)Nokia5110工作电压3.3V,正常显示时工作电流200uA以下,具有掉电模

式,适合电池供电的便携式移动设备。

可以在市场上买到Nokia5110的裸屏和带PCBNokia5110屏幕,因为N

okia5110是不带背光的,所以通常商家会在PCB上按了几个背光LED上电就

能亮,建议大家还是买那种连上PCB5110

Nokia5110原理图:

商家把该引出的管脚都引出了,下面就可以连接C8051F的相应管脚,写程

序驱动5110了。

Nokia5110Nokia3110是兼容的,用的都是同一款驱动芯片PHILIPS P

CD8544

(1)SPI接口时序写数据/命令

Nokia5110(PCD8544)的通信协议是一个没有MISO只有MOSISPI协议,

如果单片机有富裕的SPI接口,也可以利用硬件SPI但通常没有必要,只需要

软件程序模拟即可。

/***********************************************************

函数名称:LCD_write_byte

函数功能:模拟SPI接口时序写数据/命令LCD

入口参数:data :写入的数据;

command :写数据/命令选择;

出口参数:无

注:

***********************************************************/

void LCD_write_byte(unsigned char dat, unsigned char command)

{

unsigned char i;

LCD_CE = 0; //5110片选有效,允许输入数据

if (command == 0) //写命令

LCD_DC = 0;

else LCD_DC = 1; //写数据

for(i=0;i<8;i++) //传送8bit数据

{

SDIN = 1;

else

SDIN = 0;

SCLK = 0;

dat = dat << 1;

SCLK = 1;

if(dat&0x80)

//禁止5110 LCD_CE = 1;

}

}

管脚D/C(LCD_DC)用于选择写的是命令(D/C=0)还是数据(D/C=1)

(2)Nokia5110的初始化

接通电源后,内部寄存器和RAM的内容是不确定的,这需要一个RES

电平脉冲复位一下。当VDD变为高电平,达到VDDmin(或更高)之后,最多10

0msRST输入低电平(电平幅度<0.3VDD)

5110复位时序

/***********************************************************

函数名称:LCD_init

函数功能:5110初始化

入口参数:无

出口参数:无

注:

***********************************************************/

void LCD_init(void)

{

LCD_RST = 0; // 产生一个让LCD复位的低电平脉冲

delay_1us();

LCD_RST = 1;

LCD_CE = 0; // 关闭LCD

delay_1us();

LCD_CE = 1; // 使能LCD

delay_1us();

LCD_write_byte(0x21, 0); // 使用扩展命令设置LCD模式

LCD_write_byte(0xc8, 0); // 设置液晶偏置电压

LCD_write_byte(0x06, 0); // 温度校正

LCD_write_byte(0x13, 0); // 1:48

LCD_write_byte(0x20, 0); // 使用基本命令,V=0,水平寻址

LCD_clear(); // 清屏

LCD_write_byte(0x0c, 0); // 设定显示模式,正常显示

LCD_CE = 0; // 关闭LCD

}

(3)设置Nokia5110液晶的坐标

Nokia5110(PCD8544)的命令集:

命令字符解释:

要注意的是“功能设置”命令的“H”和“V”。

H=0使用基本指令集命令,H=1使用扩展指令集命令。

V=0水平寻址,V=1垂直寻址。

48*84点阵的格式如上图,数据以字节8bit为单位下载到PCD85444

8*84bit显示数据RAM矩阵。列通过地址指针寻址,地址范围为X 0~83(1010

011)Y 0~5(101)。地址不允许超过这个范围。

在垂直寻址(V=1)Y地址在每个字节之后递增,经最后的Y地址(Y=5)

之后,Y绕回0X递增到下一列的地址。

在水平寻址模式(V=0)X地址在每个字节之后递增,经最后的X地址(X

=83)之后,X绕回0Y递增到下一行的地址。

经每一个最后地址之后(X=83,Y=5),地址指针绕回地址(X=0,Y=0)

/***********************************************************

函数名称:LCD_set_XY

函数功能:设置LCD坐标函数

入口参数:X 083

Y 05

出口参数:无

注:

***********************************************************/

void LCD_set_XY(unsigned char X, unsigned char Y)

{

LCD_write_byte(0x40 | Y, 0); // column

LCD_write_byte(0x80 | X, 0); // row

}

(4)显示英文字符

英文字符占用6*8个点阵,通过建立一个ASCII的数组font6x8[][6]来寻址。

而这个数字的行号对应(字符ASCII-32)。ASCII码表如下:

/***********************************************************

函数名称:LCD_write_char

函数功能:显示英文字符

入口参数:c : 显示的字符

出口参数:无

注:

***********************************************************/

void LCD_write_char(unsigned char c)

{

unsigned char line;

c -= 32; //数组的行号

for (line=0; line<6; line++)

LCD_write_byte(font6x8[c][line], 1);

}

如要在NOKIA5110输出大写“A”,对应数组的行号为33,对应的元素为

{ 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C },水平寻址(V=0)

NOKIA5110 一行可以显示14个字符,可以显示六行。

(5)显示汉字

显示汉字可以采用两种点阵方式,一种是12*12点阵,一种是16*16点阵,

网上也有一个自动提取字模的小软件“3310液晶显示屏汉字提取程序”,这个

小程序只适用于水平寻址(V=0)

3310液晶显示屏汉字提取程序 下载:

采用12*12点阵汉字时,由于不是8的整数倍数,因此行与行之间只能隔

开,这样才能完整显示一个汉字。

//

{0x0A,0x92,0x62,0x9E,0x02,0x18,0x87,0x74,0x84,0x14,0x0C,0x00,0x02,0x0

1,0x00,0x04,0x05,0x02,0x01,0x00,0x01,0x02,0x04,0x00},

12*12点阵

(6)显示图形

显示的图形像素大小不能超过84*48。也有一个字模提取小软件Zimo

21可以帮助我们得到图像的像素数组。但要注意Zimo21软件的设置,不然的

话就显示不了想要的图片。

Zimo21设置

要注意选中“纵向取模”“字节倒序”这样才能在5110上显示正确的图

像。

/***********************************************************

函数名称:LCD_draw_bmp_pixel

函数功能:位图绘制函数

入口参数:XY :位图绘制的起始XY坐标;

*map :位图点阵数据;

Pix_x :位图像素(长)

Pix_y :位图像素(宽)

出口参数:无

注:

***********************************************************/

void LCD_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned cha

r *map, unsigned char Pix_x,unsigned char Pix

_y)

{

unsigned int i,n;

unsigned char row;

//计算位图所占行数

if (Pix_y%8==0) //如果为位图所占行数为整数

row=Pix_y/8;

else

row=Pix_y/8+1; //如果为位图所占行数不是整数

LCD_set_XY(X,Y);

for (n=0;n //换行

{

for(i=0;i

{

LCD_set_XY(X+i,Y+n);

LCD_write_byte(map[i+n*Pix_x], 1);

}

}

}

要显示的图像

NOKIA5110显示出来的效果

诺基亚5110显示程序

//汉字编码表,软件可以获取汉字编码

typedef struct typHZ_GB12 /*12*12 汉字字模显示数据结构,一个汉字分为上下两层*/

{

char Index[2];//一个汉字占两个字节

char Msk[24];//一个汉字的编码由24个十六进制数组成

};

struct typHZ_GB12 const GB_12[] ={

"

",{0xEF,0x09,0xF9,0x4F,0x40,0xFF,0x49,0x49,0x49,0x79,0x01,0x00,0x07,0x04,0x03,0x02,0x02,

0x07,0x04,0x04,0x04,0x04,0x04,0x00},

"

",{0x02,0x82,0xBE,0xA2,0xB6,0xEB,0xB6,0xA2,0xBE,0x82,0x02,0x00,0x00,0x07,0x00,0x02,0

x03,0x02,0x02,0x03,0x04,0x07,0x00,0x00},

"

",{0x89,0x72,0x00,0xC0,0x5F,0xD5,0x55,0xD5,0x55,0xDF,0x00,0x00,0x07,0x00,0x04,0x07,0x0

4,0x07,0x04,0x07,0x04,0x07,0x04,0x00},

"

",{0x00,0xFE,0x0A,0x8A,0xBE,0xAA,0xAB,0xAA,0xBE,0x0A,0x0A,0x00,0x06,0x01,0x04,0x0

4,0x04,0x03,0x02,0x03,0x04,0x04,0x04,0x00},

"

",{0x10,0x08,0xFC,0xAB,0xAA,0xFA,0xAE,0xAA,0xA8,0xF8,0x00,0x00,0x04,0x02,0x01,0x00,

0x00,0x07,0x00,0x04,0x04,0x07,0x00,0x00},

"

",{0x00,0xFE,0x0A,0x8A,0xBE,0xAA,0xAB,0xAA,0xBE,0x0A,0x0A,0x00,0x06,0x01,0x04,0x0

4,0x04,0x03,0x02,0x03,0x04,0x04,0x04,0x00}

};

//ASCII码编码表

unsigned char font6x8[][6] =

{

{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // sp

{ 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00 }, // !

{ 0x00, 0x00, 0x07, 0x00, 0x07, 0x00 }, // "

{ 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // #

{ 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12 }, // $

{ 0x00, 0x62, 0x64, 0x08, 0x13, 0x23 }, // %

{ 0x00, 0x36, 0x49, 0x55, 0x22, 0x50 }, // &

{ 0x00, 0x00, 0x05, 0x03, 0x00, 0x00 }, // '

{ 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00 }, // (

{ 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00 }, // )

{ 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14 }, // *

{ 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08 }, // +

{ 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00 }, // ,

{ 0x00, 0x08, 0x08, 0x08, 0x08, 0x08 }, // -

{ 0x00, 0x00, 0x60, 0x60, 0x00, 0x00 }, // .

{ 0x00, 0x20, 0x10, 0x08, 0x04, 0x02 }, // /

{ 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E }, // 0

{ 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00 }, // 1

{ 0x00, 0x42, 0x61, 0x51, 0x49, 0x46 }, // 2

{ 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31 }, // 3

{ 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10 }, // 4

{ 0x00, 0x27, 0x45, 0x45, 0x45, 0x39 }, // 5

{ 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30 }, // 6

{ 0x00, 0x01, 0x71, 0x09, 0x05, 0x03 }, // 7

{ 0x00, 0x36, 0x49, 0x49, 0x49, 0x36 }, // 8

{ 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E }, // 9

{ 0x00, 0x00, 0x36, 0x36, 0x00, 0x00 }, // :

{ 0x00, 0x00, 0x56, 0x36, 0x00, 0x00 }, // ;

{ 0x00, 0x08, 0x14, 0x22, 0x41, 0x00 }, // <

{ 0x00, 0x14, 0x14, 0x14, 0x14, 0x14 }, // =

{ 0x00, 0x00, 0x41, 0x22, 0x14, 0x08 }, // >

{ 0x00, 0x02, 0x01, 0x51, 0x09, 0x06 }, // ?

{ 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E }, // @

{ 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C }, // A

{ 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36 }, // B

{ 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22 }, // C

{ 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C }, // D

{ 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41 }, // E

{ 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01 }, // F

{ 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A }, // G

{ 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F }, // H

{ 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00 }, // I

{ 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01 }, // J

{ 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41 }, // K

{ 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40 }, // L

{ 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F }, // M

{ 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F }, // N

{ 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E }, // O

{ 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06 }, // P

{ 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E }, // Q

{ 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46 }, // R

{ 0x00, 0x46, 0x49, 0x49, 0x49, 0x31 }, // S

{ 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01 }, // T

{ 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F }, // U

{ 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F }, // V

{ 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F }, // W

{ 0x00, 0x63, 0x14, 0x08, 0x14, 0x63 }, // X

{ 0x00, 0x07, 0x08, 0x70, 0x08, 0x07 }, // Y

{ 0x00, 0x61, 0x51, 0x49, 0x45, 0x43 }, // Z

{ 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 }, // [

{ 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55 }, // 55

{ 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00 }, // ]

{ 0x00, 0x04, 0x02, 0x01, 0x02, 0x04 }, // ^

{ 0x00, 0x40, 0x40, 0x40, 0x40, 0x40 }, // _

{ 0x00, 0x00, 0x01, 0x02, 0x04, 0x00 }, // '

{ 0x00, 0x20, 0x54, 0x54, 0x54, 0x78 }, // a

{ 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38 }, // b

{ 0x00, 0x38, 0x44, 0x44, 0x44, 0x20 }, // c

{ 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F }, // d

{ 0x00, 0x38, 0x54, 0x54, 0x54, 0x18 }, // e

{ 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02 }, // f

{ 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C }, // g

{ 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78 }, // h

{ 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00 }, // i

{ 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00 }, // j

{ 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 }, // k

{ 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00 }, // l

{ 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78 }, // m

{ 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78 }, // n

{ 0x00, 0x38, 0x44, 0x44, 0x44, 0x38 }, // o

{ 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18 }, // p

{ 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC }, // q

{ 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08 }, // r

{ 0x00, 0x48, 0x54, 0x54, 0x54, 0x20 }, // s

{ 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20 }, // t

{ 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C }, // u

{ 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C }, // v

{ 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C }, // w

{ 0x00, 0x44, 0x28, 0x10, 0x28, 0x44 }, // x

{ 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C }, // y

{ 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44 }, // z

{ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14 } // horiz lines

};

/***********************************************************************

程序名称: nokia.c

程序功能: nokia5110驱动程序

程序说明:

/**********************************************************************/

#include

#include

#include

#include"code_table.c"

#define uchar unsigned char

#define uint unsigned int

//位操作定义

#define SCLK _PA5

#define SDIN _PA4

#define LCD_DC _PA3

#define LCD_CE _PA2

#define LCD_RST _PA1

//函数声明

void delay_us(uint t);

void delay_ms(uint t);

void LCD_init(void);

void LCD_clear(void);

void LCD_write_english_string(uchar X,uchar Y,char *s);

void LCD_write_char(uchar c);

void LCD_write_byte(uchar dat, uchar dc);

void LCD_set_XY(uchar X, uchar Y);

/***********************************************************************

* 函数名称:delay_us()

* 函数功能:16M晶振,延时t微秒

* 入口参数:t 延时t微秒

* 出口参数:无

***********************************************************************/

void delay_us(uint t)

{

uint i,j;

for(i=t;i>0;i--)

for(j=1;j>0;j--);

}

/**********************************************************************

***********************************************************************/

void delay_ms(uint t)

{

uint i,j;

for(i=t;i>0;i--)

for(j=2670;j>0;j--);

}

/**********************************************************************

* 函数名称:LCD_init()

* 函数功能:初始化nokia5110

* 入口参数:无

* 出口参数:无

**********************************************************************/

void LCD_init(void)

{

LCD_RST = 0; // 产生一个让LCD复位的低电平脉冲

delay_us(1);

LCD_RST = 1;

LCD_CE = 0;// 关闭LCD

delay_us(1);

LCD_CE = 1;// 使能LCD

delay_us(1);

LCD_write_byte(0x21, 0); // 使用扩展命令设置LCD模式

LCD_write_byte(0xc8, 0); // 设置偏置电压

LCD_write_byte(0x06, 0); // 温度校正

LCD_write_byte(0x13, 0); // 1:48

LCD_write_byte(0x20, 0); // 使用基本命令

LCD_clear(); // 清屏

LCD_write_byte(0x0c, 0); // 设定显示模式,正常显示

LCD_CE = 0; // 关闭LCD

}

/**********************************************************************

* 函数名称:LCD_clear()

* 函数功能:液晶清屏

* 入口参数:无

* 出口参数:无

**********************************************************************/

void LCD_clear(void)

{

uint i;

LCD_write_byte(0x0c, 0);

LCD_write_byte(0x80, 0);

for (i=0; i<504; i++)

LCD_write_byte(0, 1);

}

/**********************************************************************

* 函数名称:LCD_set_XY()

* 函数功能:光标定位xy

* 入口参数:X,Y xy

* 出口参数:无

**********************************************************************/

void LCD_set_XY(uchar X, uchar Y)

{

LCD_write_byte(0x40 | Y, 0); // column

LCD_write_byte(0x80 | X, 0); // row

}

/***********************************************************************

* 函数名称:LCD_write_char()

* 函数功能:写入1个字符

* 入口参数:c 要写入的数据

* 出口参数:无

**********************************************************************/

void LCD_write_char(uchar c)

{

uchar line;

c -= 32;

for (line=0; line<6; line++)

LCD_write_byte(font6x8[c][line], 1);//ACSII码表中读取字节,然后写入液晶

}

/***********************************************************************

* 函数名称LCD_write_english_string()

* 函数功能:写英文字符串

* 入口参数:X,Y,*S------xy*s为英文字符串

* 出口参数:无

***********************************************************************/

void LCD_write_english_string(uchar X,uchar Y,char *s)

{

LCD_set_XY(X,Y);//光标定位

while (*s)

{

LCD_write_char(*s);

s++;

}

}

/**********************************************************************

* 函数名称:LCD_write_byte()

* 函数功能:写一个字节

* 入口参数:dat,要写入的字节;command:0为命令,1为数据

* 出口参数:无

***********************************************************************/

void LCD_write_byte(uchar dat, uchar command)

{

uchar i;

LCD_CE = 0;

if (command == 0)

LCD_DC = 0;

else

LCD_DC = 1;

for(i=0;i<8;i++)

{

if(dat&0x80)

SDIN = 1;

else

SDIN = 0;

SCLK = 0;

dat = dat << 1;

SCLK = 1;

}

LCD_CE = 1;

}

/**********************************************************************

* 函数名称:LCD_write_chinesee()

* 函数功能:写一个汉字

* 入口参数:x,横坐标;y,纵坐标;hz,要显示的汉字

* 出口参数:无

**********************************************************************/

void LCD_write_chinese(unsigned char x, unsigned char y, unsigned char *hz)

{

unsigned char k,i;

for(k=0;k查找汉字编码表中的汉字

{

if(hz[0] == GB_12[k].Index[0] && hz[1] == GB_12[k].Index[1])

break;

}

LCD_set_XY(x,y); //光标定位

for(i=0;i<12;i++)//先写上半字节

LCD_write_byte(GB_12[k].Msk[i],1);

LCD_set_XY(x,y+1);//光标定位下一行

for(i=12;i<24;i++)//后写下半字节

LCD_write_byte(GB_12[k].Msk[i],1);

}

/***********************************************************************

* 函数名称: LCD_write_chinese_sring()

* 函数功能:写汉字串

* 入口参数:x,横坐标;y,纵坐标;string,要显示的汉字串

* 出口参数:无

***********************************************************************/

void LCD_write_chinese_sring(unsigned char x, unsigned char y,unsigned char *string)

{

unsigned char i=0,j=0,k=0;

while(string[i])

{

LCD_write_chinese(x,y,&string[i]);

x=x+12;

i=i+2;

}

}

void main()

{

DDRA = 0XFF;//液晶引脚,设置为输出

LCD_init(); //初始化液晶

LCD_clear();

LCD_write_chinese_sring(0,0,"距离");

LCD_write_english_string(72,0,"CM");

while(1);

}


发布者:admin,转转请注明出处:http://www.yc00.com/num/1700932632a1037727.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信