原创 Cortex-M3学习日志(八)-- TFT实验Part(a)

2013-3-26 16:40 3783 15 15 分类: MCU/ 嵌入式

    自己用的LPC1768的开板带有一块2.4寸的TFT彩色液晶屏,虽然自己工作中还用不过显示屏,但是晚上闲着也是闲着,于是继续玩咱的LPC1768吧。

我的开发板上的液晶屏的用的是SPI接口,当然你也可以把它设计成并行口,其接口电路如下所示:

20130326162835757001.gif

    话说这个液晶屏的驱动芯片是ILI9325,在网上下载了该芯片的数据手册,好家伙有111页,全是E文呀,没办法,谁让咱是小电工呢,就慢慢啃吧。ILI9325这个芯片的寄存器比较多,不过没关系,我们暂时用到的不是太多,这里只要简要的总结,剩下的还是日后用到了再好好研究吧。

1、寄存器03H(Entry Mode),该寄存器主要设置图像的显示模式,包括屏幕的扫描方式(水平扫描或垂直扫描),这直接影响到img2lcd软件(这是个取模软件)的扫描方式控制项。

2、寄存器04H(Resizing Control Register)重新调整大小 寄存器,通过配置该寄存器,可以调整所显示图片的大小。

3、寄存器07H(Display Control 1),配置该寄存器可打开或关闭图形。

4、水平和垂直位置的RAM地址(R50h,R51h,R52h,R53h)

    看手册上寄存器不少,不过控制方式不一样,所用到的寄存器不一样,这里不再列举寄存器,想做驱动,一定要看芯片的手册,而且一定要仔细的研究它的手册。话说写液晶驱动不显示图片什么的貌似对不起LCD,当然这次懒猫这次写的驱动也有图片显示,想图片显示当然少不了取模软件,懒猫这次用的取模软件是img2lcd,这个软件功能不错,用起来也比较简单,如果不会用可以查看一下它自带的帮助文件。

20130326162801397002.png

    注意:LCD的配置方式不同,所设置的扫描方式也不同。

   好了,贴上咱写的这个驱动;

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

 * 函数名称 :GLCD_clear (unsigned short color)

 * 函数描述 : 清屏

 * 入口参数 : 无

 * 出口参数 : 无

 * 备    注:

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

void GLCD_clear (unsigned short color)

{

  unsigned int   i;

 

  wr_reg(0x20, 0);        // 1st line GRAM Data(AD0-AD7)

  wr_reg(0x21, 0);        // 1st line GRAM Data(AD8-AD16)

  wr_cmd(0x22);

  for(i = 0; i < (WIDTH*HEIGHT); i++){

    wr_dat(color);        // Set color of background

  }

}

 

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

 * 函数名称 :void GLCD_bitmap (unsigned int x, unsigned int y, unsigned int w,

 *                              unsigned int h, unsigned char *bitmap)

 * 函数描述 : 显示图片

 * 入口参数 : unsigned int x  --  Vertical   GRAM Start Address

 *            unsigned int y  --  Horizontal GRAM Start Address

 *            unsigned int w  --  The width of picture

 *            unsigned int h  --  The high of picture

 *            unsigned char *bitmap  --  The array which store picture

 * 出口参数 : 无

 * 备    注:

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

void GLCD_bitmap (unsigned int x, unsigned int y, unsigned int w, unsigned int h, unsigned char *bitmap)

{

  unsigned int   i;

  unsigned int   len = w*h;                            /* 数组长度 = 图片的width*high(注:元素是16位的) */

 

  /* 用Img2Lcd这个软件生成的数组是char型的(元素是8位的),需转换成short型(元素是16位的)   */

  unsigned short *bitmap_ptr = (unsigned short *)bitmap;

 

  wr_reg(0x50, y);                      /* 水平GRAM起始地址       */

  wr_reg(0x51, y+h-1);                  /* 水平GRAM结束地址(-1) */

  wr_reg(0x52, x);                      /* 垂直GRAM起始地址       */

  wr_reg(0x53, x+w-1);                  /* 垂直GRAM结束地址(-1) */

 

  wr_reg(0x20, y);                                                                                /* GRAM水平垂直地址设置   */

  wr_reg(0x21, x);

 

  wr_cmd(0x22);                                     /* 写数据到GRAM,AC自动加  */

  for (i = 0; i < len; i++) {           /* 开始写数据             */

    wr_dat(*bitmap_ptr++);                /* 向GRAM写入数据 */

  }

}

由于原代码比较多,这里只贴上部分函数,具体的代码,请参考附件,这里上传几张效果图,懒猫已把液晶屏显示字符,显示汉字,画圆,画线等的程序写好了,改天整理一下也发上来,下一步弄一下SD卡,USB方面的东东,今天先写这么多吧。

20130326162808157003.png

20130326162815827004.png

最后再吼一下懒猫的口号:

 

每天进步一点点,开心多一点^_^

---- 2013年3月26日 16:15:05

rar.gifSW--TFT.rar

文章评论0条评论)

登录后参与讨论
我要评论
0
15
关闭 站长推荐上一条 /2 下一条