历史上的今天

今天是:2024年11月23日(星期六)

2019年11月23日 | TX2440裸机程序-LCD

发布者:Huanle666 来源: eefocus关键字:TX2440  裸机程序  LCD 手机看文章 扫描二维码
随时随地手机看文章

一、LCD简介


LCD-liquid crystal  display 的简称,液晶显示器按驱动方式分为1.静态驱动、2.简单矩阵驱动及3.主动矩阵驱动。


其中,简单矩阵又可分为1.扭转向列型(TN)和超转向列型(STN)两种,而主动矩阵驱动则以TFT为主。


TN与STN都采用场电压驱动方式,如果显示尺寸加大,中心部分对电机变化的反应时间就会变长,显示器的速度跟不上。为解决这个问题,主动矩阵驱动TFT被提出,他通过晶体管显示信号开启过关闭液晶分子的电压,从而避免了显示器对电场效应的依靠。


1.1LCD常见参数:


像素 :LCD屏上所能控制最小单位

分辨率:LCD屏像素总数,一般采用“横向像素点x纵向像素点”,如320*240或640*480

位像素BPP:指某一分辨率下,每个像素点可以用多少bit来表示该点颜色。例如:16bpp表示用16bit表示像素点色彩,色彩范围是0--2^16。位像素与分辨率乘积决定显存大小。

刷新率:图像在屏幕上更新速度

物理尺寸:LCD外观对角线长度,单位为英寸。如3.5英寸、4.3英寸


1.2 LCD显示系统


S3C2440A 的LCD 控制器简介


S3C2440A 中的LCD 控制器由从位于系统存储器的视频缓冲区到外部LCD 驱动器的转移LCD 图像数据逻辑组成。LCD 控制器支持单色LCD 的单色、2 位每像素(4 阶灰度)或4 位每像素(16 阶灰度)模式,通过使用基于时间的抖动算法和帧频控制(FRC)方法,其可以连接到8 位每像素(256 色)的彩色LCD 面板和连接到12 位每像素(4096 色)的STN LCD。可以编程LCD 控制器来支持不同涉及屏幕水平和垂直像素数、数据接口的数据线宽度、接口时序和刷新率的需要。


特性

STN LCD 显示:

– 支持3 种类型的LCD 面板:4 位双扫描、4 位单扫描和8 位单扫描显示类型

– 支持单色、4 阶灰度和16 阶灰度

– 支持256 色和4096 色的彩色STN LCD 面板

– 支持多种屏幕尺寸

典型实际屏幕尺寸:640×480、320×240、160×160 等

最大虚拟屏幕尺寸为4M 字节

256 色模式最大虚拟屏幕尺寸:4096×1024、2048×2048、1024×4096 等

TFT LCD 显示:

– 支持TFT 的1、2、4、8 bpp(位每像素)调色显示

– 支持彩色TFT 的16、24 bpp 无调色显示

– 支持24 位每像素模式下最大16M 色TFT

– 支持多种屏幕尺寸

典型实际屏幕尺寸:640×480、320×240、160×160 等

最大虚拟屏幕尺寸为4M 字节

64K 色模式最大虚拟屏幕尺寸: 2048×1024 等


由SDRAM、CPU(S3C2440)、LCD驱动器、TFT型LCD共4部分组成。不管什么架构CPU,LCD显示系统组成都不会变化。一般LCD驱动器与LCD屏集成在一起。

LCD系统结构


工作原理:


1、将需要显示的图像存放在显示缓存中。S3C2440通过地址线和数据线实现对显存读取和存放。


嵌入式中没有专门的显存芯片,而是将S3C2440的内存SDRAM划出4Mbyte空间作为显示缓存。


2、LCD控制器通过数据线、控制线、时钟线将显示数据,传送给LCD驱动器。


LCD控制器集成在S3C2440(编写LCD驱动实质就是操作LCD控制器)


3、LCD驱动器将信号处理后,直接驱动TFT显示


注:


1、显存大小如何确定?显存大小=图形分辨率×位像素/8,TX2440使用东华LCD:若使用位像素为16,图形分辨率320*240,则16*320*240/8=150KB,则显存大于150KB即可。需要验证一下??


验证:通过计算程序中显存终止地址-起始地址=显存大小


rLCDSADDR1(寄存器地址0x4d000014)----设置显存的起始地址(寄存器[20:0]对应起始地址[21:1])


rLCDSADDR2(寄存器地址0x4d000018)----设置显存的终止地址(寄存器[20:0]对应终止地址[21:1])      


程序中显示的帧缓冲区起始地址、结束地址定义


rLCDSADDR1=(((U32)LCD_BUFFER>>22)<<21)|M5D((U32)LCD_BUFFER>>1)


rLCDSADDR2=M5D( ((U32)LCD_BUFFER+(SCR_XSIZE_TFT*LCD_YSIZE_TFT*2))>>1 );     


其中:LCD_BUFFER---定义存放显示图像的数组unsigned short LCD_BUFFER[240][320],占用空间=240*320*2byte=150KB(unsigned short 占用2个byte)         


显存大小=(终止地址-起始地址)*2=(4EBC2-3BFC2)*2=12C00*2=75KB*2=150KB  此处为什么乘以2,因为计算地址时,做了左移一位。

            

AXD调试时内存数据


经过上面验证可知:S3C2440的LCD控制器提供4Mbyte帧缓冲区(即LCD结构图中显存),而3.5寸的320*240LCD使用了150KB。


2、编写LCD驱动实质就是操作LCD控制器,下面重点讲解一下LCD控制器。

LCD控制器框架


由上图LCD控制框架可知:


由寄存器组REGBANK+定时器产生器TIMEGEN+视频多路开关VIDEOMUX+LPC3600(适用三星TFT屏)+LCD专用DMA LCDDMA+VIDPRCS构成,作用是:传送视屏数据以及产生需要的控制信号VFAME、VLIN 、VCLK、VM等。LCD控制器使用VD[23:0]传送图像数据到LCD驱动器。


REGBANK是17个寄存器组和调色板组成,作用是配置LCD控制器。重点

定时器产生器TIMEGEN作用:支持不同LCD驱动器接口时序图,产生VFAME、VLIN 、VCLK、VM等信号。


LCDDMA是专用DMA,自动地传送显存中像素数据,通过VD[23:0]传送到LCD驱动器。在此过程中,视屏数据不需要CPU干预,就能显示到LCD屏上。


VIDPRCS作用调整从LCDDMA接收图像数据格式,然后VD[23:0]传送到LCD驱动器。

LPC3600是专门适用三星TFT屏,TX2440使用东华LCD,所以不需要设置。


1.3 数据格式


下面以显示模式设定为TFT的16bpp为例,说明一下。由下图可知:


1、例如像P1每个像素点由16bit表示,占用视屏缓冲区2个字节(即地址000H--001H)


2、设置16bpp输出格式为5:5:1。即数据A[31:16]表示像素点1,而数据[15:0]表示像素点2。


3、图3中表示16BPP的数据在VD[23:0]传输格式。输出格式5:5:I等同5:5:1。


 

图1:16BPP在缓冲区存储数据格式 图2:16BPP输出视频数据格式 

 

图3:16BPP下VD引脚描述


1.4虚拟屏、视口概念


S3C2440支持4MB的虚拟屏幕,就是指显示图像的大小最大可达4MB。4MB的图像,即使使用24bpp的模式也是一个比较大的图片(1024×1024)。为了更好的使用这个特性S3C2440对于图像数据的读取处理给出了一个直观的图像,这个图像中,可以看到屏幕可以当成一个“视口”在这个4MB的图像区域“滑动”。这个视口可大可小,但是这个一般由你的设备的屏幕决定(TX2440的屏幕为3.5寸,大小为320×240)。


S3C2440A 支持硬件水平或垂直滚屏。要实现滚屏,需要改变LCDSADDR1/2 寄存器中LCDBASEU 和LCDBASEL 的字段,删除PAGEWIDTH 和OFFSIZE 的值。 实现前提:储存在视频缓冲器中的图像应该在尺寸上大于LCD 面板屏幕 。 未测试过

                         

上面表示虚拟屏幕的地址空间必须4MB对齐,所以取其起始地址的[30:22]表示虚拟屏幕的地址。“视口”在这个4MB的空间内“滑动”,所以“视口”的起始地址就取[21:1]就可以了,它们之间的配合是一种偏移量的配合。但是由于内存中的数据是一行行的存放,所以需要使用偏移量来描述“窗口”每一行之间的偏移量。


二、硬件


TFT屏型号:东华3.5英寸LCD


cpu:S3C2440


SDRAM:K4S561632 x 2 (32M) x 2


电路图:

 

开发板与LCD屏接线图 LCD屏引脚与S3C2440接线表


其中:如何设置LCD输出视频?


          1、设置GPG4口为LCD_PWREN


          2、设置允许LCD_PWREN输出信号,通过LCDCON5寄存器中PWREN置1


          3、设置视频输出和逻辑允许,通过LCDCON1寄存器中ENVID置1


          4、设置控制信号的匹配极性(LCDCON5寄存器中INVVLNE 、INNNFAME、INVVD、INVVDEN 、INVPWER)


三、软件


3.1初始化


步骤


GPIO设置初始化

显示模式初始化

帧缓冲区设置初始化

其他

//以下TFT参数:由自己根据东华3.5寸TFT(WXCAT35.PDF)中时序图和参数表

//经过验证TFT使用以下参数能正常工作

#define VBPD (15) //垂直同步信号的后肩

#define VFPD (12) //垂直同步信号的前肩

#define VSPW (3) //垂直同步信号的脉宽

 

#define HBPD (38) //水平同步信号的后肩

#define HFPD (20) //水平同步信号的前肩

#define HSPW (30) //水平同步信号的脉宽

 

#define CLKVAL_TFT (6)

 

#define MVAL (13)

#define MVAL_USED (0) //0=each frame   1=rate by MVAL

#define INVVDEN (1) //0=normal       1=inverted

#define BSWP (0) //Byte swap control

#define HWSWP (1) //Half word swap control

#define PNRMODE (3) // 设置为TFT屏

#define BPPMODE (12) // 设置为16bpp模式

 

//TFT_SIZE

#define LCD_XSIZE_TFT (320)

#define LCD_YSIZE_TFT (240)

 

#define SCR_XSIZE_TFT (320)

#define SCR_YSIZE_TFT (240)

 

#define M5D(n) ((n) & 0x1fffff)//只取21位数据

 

volatile unsigned short LCD_BUFFER[SCR_YSIZE_TFT][SCR_XSIZE_TFT];//定义帧缓冲,占用320*240*2字节

 

void TFT_InitHardware(void)

{  

/*GPIO初始化--定义V[0]--V[23],和VM VFRAME VLINE VCLK控制信号*/

rGPCUP  = 0x00000000;

rGPCCON = 0xaaaa02a9; //GPC口定义成:1、像素数据输出端口V[0]--V[7]

 //2、VM VFRAME VLINE VCLK信号有效,

 //3、而LCDVF2 LCDVF1 LCDVF0 LEND信号无效 

rGPDUP  = 0x00000000;

rGPDCON=0xaaaaaaaa; //GPD口定义成:1、像素数据输出端口V[8]--V[23] 

 

 

 /*显示初始化*/

rLCDCON1=(CLKVAL_TFT<<8)|(MVAL_USED<<7)|(PNRMODE<<5)|(BPPMODE<<1)|0;

    //设置VCLK的分频比为6,VM信号的触发模式=each frame,

    //显示模式为 TFT LCD panel,彩色模式为16bpp TFT,ENVID=0(禁止LCD信号输出)

    //像素时钟:VCLK=HCLK/[(CLKVAL+1)*2]=100M/(7*2)=7.14M(3.5寸TFT的VCLK=6.4M,大于该值即可)

rLCDCON2=(VBPD<<24)|(LINEVAL_TFT<<14)|(VFPD<<6)|(VSPW);

   //rLCDCON2--设置垂直方向各信号时间参数(即列控制寄存器)

   //设置VBPD=15,VFPD=12,VSPW=5和LCD panel的垂直有效宽度=239    

   //LINEVAL_TFT--LCD最大显示行数, LINEVAL_TFT=LCD_YSIZE_TFT-1=240-1=239

rLCDCON3=(HBPD<<19)|(HOZVAL_TFT<<8)|(HFPD);

//rLCDCON3--设置水平方向各信号时间参数(即行控制寄存器)

//设置HBPD=238,LCD panel的水平有效宽度=319,HFPD=20   

//HOZVAL_TFT--LCD最大显示列数 HOZVAL_TFT=LCD_XSIZE_TFT-1=320-1=319

 

rLCDCON4=(MVAL<<8)|(HSPW);

//设置MVAL=13,HSPW=30 

rLCDCON5 = (1<<11) | (0<<10) | (1<<9) | (1<<8) | (0<<7) | (0<<6) | (1<<3)  |(BSWP<<1) | (HWSWP);

//1、TFT显示模式16BPP时,使用数据格式5:6:5  2、在VCLK下降沿读取数据

//3、HSYNC脉冲的极性:反转,VSYNC脉冲的极性:反转  4、VD数据线表示数据极性:正常

//5、VDEN信号极性:正常  6、LCD_PWREN信号输出使能  7、禁止字节交换,允许半字节交换

/*帧缓冲区初始化*/

/*

LCDBANK:视屏缓冲区内存地址:30-22位

LCDBASEU:视屏缓冲区的开始地址21-1位

LCDBASEL:视屏缓冲区的结束地址21-1位

*/

/*rLCDSADDR1[29:21]表示LCDBANK,rLCDSADDR1[20:0]表示LCDBASEU*/

rLCDSADDR1=(((U32)LCD_BUFFER>>22)<<21)|M5D((U32)LCD_BUFFER>>1);

//在内存中设置显存(帧缓冲区)起始地址,其中LCD_BUFFER是定义存放图像的数组,

//以该数组的地址作为显存的起始地址。其中LCD_BUFFER[21:0]表示4Mbyte空间。

/*rLCDSADDR2[20:0]表示LCDBASEL*/

rLCDSADDR2=M5D( ((U32)LCD_BUFFER+(SCR_XSIZE_TFT*LCD_YSIZE_TFT*2))>>1 );//设置帧缓冲区结束地址

       //LCDBASEL=(帧缓冲区结束地址)>>1+1

  //等同    =LCDBASEU+(PAGEWITH+OFFSIZE)*(LINEVAL+1)

       //        =M5D((U32)LCD_BUFFER>>1+((320*240)*2)>>1)   

       //        =M5D( ((U32)LCD_BUFFER+(SCR_XSIZE_TFT*LCD_YSIZE_TFT*2))>>1 )

      //1、为什么乘以2?因为每个像素点由2个字节即16bit组成(因为LCD设置16bpp)。如果设置为24bpp,则乘以4。

 //2、为什么M5D?因为计算缓冲区起始和结束地址时只需要A[20:0]

     

    /*  LCDSADDR3用于设置虚拟屏幕

OFFSIZE:虚拟屏幕左侧偏移的半字数(半字=16bit),如果不使用虚拟屏幕,设置为0

PAGEWITH:虚拟屏幕一行的半字数,如果不使用虚拟屏幕,设置为实际屏幕行的半字数。

其中半字由16位表示,等同一个16bpp像素点

*/  

rLCDSADDR3=(((SCR_XSIZE_TFT-LCD_XSIZE_TFT)/1)<<11)|(LCD_XSIZE_TFT/1);

//设置虚拟屏的offset size和page width   

//offset size=(SCR_XSIZE_TFT-LCD_XSIZE_TFT)/1=0

//page width=(LCD_XSIZE_TFT/1)=320

/*其他项初始化*/

rLCDINTMSK|=(3); // MASK LCD Sub Interrupt

rTCONSEL &= (~7) ;   // Disable LPC3480

rTPAL=0; // Disable Temp Palette

}

3.2显示程序


3.2.1图片显示


//=============================================================

//语法格式: void TFT_Pitcure(int x0,int y0,int h,int l,unsigned char bmp[])

//实现功能: 在屏幕上指定坐标画一个指定大小的图片

//参数:

// x0 - 图片左上角x坐标

// y0 - 图片左上角y坐标

// h - 图片的高

// l - 图片的长

//              bmp[] - 图片的模

//返回值: 无

//注:用Image2LCD取模  水平扫描 16位真色彩 高位在前

//=============================================================

void TFT_Pitcure(int x0,int y0,int height,int width,unsigned char bmp[])

{

int x,y;

U32 c;

int p = 0;

    for( y = y0 ; y < width ; y++ )

    {

    for( x = x0 ; x < height ; x++ )

    {

    c = bmp[p+1] | (bmp[p]<<8) ;

 

if ( ( (x0+x) LCD_BUFFER[y0+y][x0+x] = c ;

    p = p + 2 ;//LCD_BUFFER数组的数据类型:unsigned short为2个字节

    }

    }

}



3.3时序图

LCD控制器时序图


寄存器参数:


VSPW:垂直同步信号的脉宽,单位为1行(Line)的时间。


VFPD: 垂直同步信号的前肩,单位为1行(Line)的时间。


VBPD: 垂直同步信号的后肩,单位为1行(Line)的时间。


LINEVAL :垂直显示尺寸-1,即屏行宽-1。HBPD:水平同步信号的后肩,单位为1VCLK的时间。


HFPD:水平同步信号的前肩,单位为1VCLK的时间。


HSPW:水平同步信号的脉宽,单位为1VCLK的时间。


HOZVAL:水平显示尺寸-1,即屏列宽-1。由上图可知:扫描一帧所需的时间:=((VSPW+1)+(VBPD+1)+( LINEVAL+1)+(VFPD+1))个行时间。


扫描一行所所需的时间:= ((HSPW+1)+(HSPD+1)+(HFPD+1)+ (HOZVAL+1))个VCLK时间。而一个VCLK时间由LCD寄存器LCDCON1内的CLKVAL决定:=HCLK/[2*(CLKVAL+1)]因此扫描一帧所需的时间:T=[(VSPW+1)+(VBPD+1)+( LINEVAL+1)+(VFPD+1)]* [(HSPW+1)+(HSPD+1)+(HFPD+1)+ (HOZVAL+1)]* HCLK/[2*(CLKVAL+1)]即帧频率为:1/T


东华TFT型LCD(WXCAT35)时序图   

参数表

WXCAT35时序表


由以上参数表可知:


1、TFT的VCLK典型值=6.4M,所以外部提供给TFT的VCLK最好大于6.4M,这样能保证TFT正常显示。(以前提供VCLK=3.7M,导致FTF显示画面抖动)。实验板的HCLK=100M,CLKVAL=6,则  VCLK = HCLK/[(CLKVAL+1)x2]= 100/2*(6+1)= 7.14MHz,即满足要求。


2、参数设置:(由上面东华TFT型LCD(WXCAT35)时序图和表1的参数表可知)


1 、VBPD:确定帧同步信号和帧数据传输前的一段延迟时间,是帧数据传输前延迟时间和行同步时钟间隔宽度的比值。


VBPD=帧数据传输前延迟时间/行同步时钟间隔宽度=VSYNC_Back_porch/HSYNC_Period   (垂直同步信号的后肩)


=tvb/th=15


2、VFPD:确定帧数据传输完成后到下一帧同步信号到来的一段延迟时间,是帧数据传输后延迟时间和行同步时钟间隔宽度的比值


VFPD=帧数据传输后延迟时间/行同步时钟间隔宽度= VSYNC_front_porch/HSYNC_Period (垂直同步信号的前肩)


=tvf/th=12


3、VSPW:确定帧同步时钟脉冲宽度,是帧同步信号时钟宽度和行同步时钟间隔宽度的比值


VSPW =帧数据传输后延迟时间/行同步时钟间隔宽度= VSYNC_Pulsewidth/HSYNC_Period   (垂直同步信号的脉宽)

[1] [2]
关键字:TX2440  裸机程序  LCD 引用地址:TX2440裸机程序-LCD

上一篇:TX2440裸机程序-触摸屏
下一篇:S3C2440时钟和电源管理

推荐阅读

据科技日报报道,英国《自然》杂志21日发表了一项工程学最新成果:美国麻省理工学院团队进行了一次“从未试过的飞行“——他们研发的一架利用离子风驱动的小型飞机成功飞起来了,而一般飞机采用带有活动部件的发动机。这使得制造更安静、机械更简单且不产生燃烧排放的飞机成为可能。一直以来,飞行器的动力来自带有活动部件的发动机,例如推进器或涡轮机,...
初学STM32编程时,经常见到数据类型定义的符号:u8、u16等,51都是自己定义数据类型的简写符号,STM32是哪里定义的呢?今天没事就看了看系统头文件,数据类型的定义在其中的3个头文件里:(1)stdint.h(摘取定义部分)/* * &#39;signed&#39; is redundant below, except for &#39;signed char&#39; and if * the typedef is used to decl...
日前,华米科技正式宣布,德州仪器(TI)前任全球销售与市场应用高级副总裁谢兵,加入华米科技董事会担任公司新的独立董事。他将在董事会的审计、薪酬、提名、公司治理以及人工智能与大数据道德委员会担任委员。资料显示,谢兵毕业于西安电子科技大学,获电子工程学士学位,并于1994年取得美国南卡罗来纳州克莱姆森大学 (Clemson University) 国际商业...
根据最新交期预计,由于供应短缺,苹果将无法在圣诞节前向主要的亚洲市场消费者交付新款iPad。据日经亚洲新闻报道,菲律宾的消费者周一在苹果网站上订购了最受欢迎的iPad型号,但得等待8周才能发货。据苹果官网称,周一下单的中国大陆、香港、台湾、日本、韩国、泰国和马来西亚消费者也将在圣诞节后收到他们的手机。亚洲的假日购物季从“双十一”,一直持...

史海拾趣

问答坊 | AI 解惑

24位模/数转换器CS5532及其应用

CS5532是一种低噪声24位△-∑型A/D转换器.文中详细阐述了CS5532的结构、组成、功能特点及工作方式,并以高精度... …

查看全部问答∨

无线摄像头的构成

关键字:无线摄像头        由视频电路和音频电路两大部分组成。视频部分主要由光学系统、摄像器件、预放器、同步扫描系统、控制系统和彩色无线摄像头中特有的彩色编码器几部分组成。音频部分较为简单一般装有一个微音器用来 ...…

查看全部问答∨

求助:冠林梯口机AT89S52的源程序

谁知道冠林梯口机AT89S52的源程序啊,急用…

查看全部问答∨

我想自己做一个播放器(包括硬件和软件),请大家参考一下

我想自己做一个播放器,大致功能如下 功能 1、通过VGA(主要接液晶电视)或者AV输出,能够顺畅播放realplay所支持的影视格式。 2、通过无线网络访问其他计算机的文件。 大致列了如下配置单: 硬件配置表 1、CPU主频400MHz 以上 2、64MBtyes SD ...…

查看全部问答∨

用XC2VP30的开发板编写DDR控制器时钟问题请教

在XC2VP30的开发板上编写DDR的控制器,对于一个256MB的DDR内存,它有三对输入时钟CLK0、~CLK0、CLK1、~CLK1、CLK2、~CLK2和两个CKE。现在想请教一下,这三对时钟是要输入同频同相的时钟信号吗?还是怎么样?两个CKE是用来干什么的?…

查看全部问答∨

关于Prime Time的一个常见问题

运行结果提示:the arc between pins \'CK\' and \'D\' is negative, which is not allowed. To make it positive, the maximum hold value has been adjusted from 0.729405 to 0.782819.请问:1. 修改那里,才能保证是正值。     ...…

查看全部问答∨

STM32加密性能?

                                 没有找到加密说明?&nbsp;有谁知道吗?…

查看全部问答∨

中断函数中调用fft库的问题

本帖最后由 dontium 于 2015-1-23 13:27 编辑 我要做一个语音端点检测的程序,用的vpm642的开发板,aic23b语音芯片,用EDMA输入和输出采集的语音信号,使用了输出和输出两个pingpong缓存,在输入ping或pong缓存接受完数据后产生中断,将数据做fft ...…

查看全部问答∨

请教AVRMega128访问DS3231SN数据不正确原因

最近搞个板子,使用Mega128访问DS3231SN,可是数据读取始终为0,不知何故,请大家帮忙看一下代码,看看哪有问题,谢谢。 上拉电阻为10K。       #ifndef _ds3231_h#define _ds3231_h //============================= ...…

查看全部问答∨

LPC800基于I2C中断的掉电模式唤醒研究

500PCS开发板已经发出,为大家找些资料。 …

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved