Cortex-M3学习LPC1768 - TFT实验

2019-12-02来源: 51hei关键字:Cortex-M3  LPC1768  TFT实验

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

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


话说这个液晶屏的驱动芯片是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,这个软件功能不错,用起来也比较简单,如果不会用可以查看一下它自带的帮助文件。

注意: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写入数据 */

  }

}

复制代码


glcd.c

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

文件名称:GLCD.c

功    能: 关于ILI9325的一些函数                                                         

编译环境: MDKV4.12                                                    

时    钟: 外部12Mhz                                                                                           

日    期: 12/03/19                                                        

作    者: 懒猫爱飞

备    注:NULL

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

修改内容:NULL 

修改日期:XXXX年xx月xx日      xx时xx分

修改人员:xxx xxx xxx

                                                                                                         

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

#include "GLCD.inc"



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

* 函数名称 :__inline static void delay (int cnt)

* 函数描述 : 简短延时

* 入口参数 : 无

* 出口参数 : 无

* 备    注 :

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

__inline static void delay (int cnt) {


  cnt <<= DELAY_2N;

  while (cnt--);

}


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

* 函数名称 :__inline void wr_cmd (unsigned char c)

* 函数描述 : 通过ssp1向LCD写命令

* 入口参数 : 无

* 出口参数 : 无

* 备    注 :

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

static __inline void wr_cmd (unsigned char cmd)

{

  LCD_EN();                                          /* Enable ILI9325 */ 

  ssp_send(SSP_START | SSP_WR | SSP_INDEX);   /* Write : RS = 0, RW = 0       */

  ssp_send(0);

  ssp_send(cmd);                              /* Send the command */

  LCD_DIS();                                  /* Disable ILI9325 */         

}


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

* 函数名称 :__inline void wr_dat (unsigned char dat)

* 函数描述 : 通过ssp1向LCD写数据

* 入口参数 : 无

* 出口参数 : 无

* 备    注 :

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

static __inline void wr_dat (unsigned short dat) 

{


  LCD_EN();                                          /* Enable ILI9325 */ 

  ssp_send(SSP_START | SSP_WR | SSP_DATA);    /* Write : RS = 1, RW = 0       */

  ssp_send((dat >>   8));                     /* Write D8..D15                */

  ssp_send((dat & 0xFF));                     /* Write D0..D7                 */

  LCD_DIS();                                  /* Disable ILI9325 */ 

}


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

* 函数名称 :__i

[1] [2] [3] [4]
关键字:Cortex-M3  LPC1768  TFT实验 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic481684.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:LPC11XX驱动1602程序_12MHz
下一篇:Cortex-M3之SysTick

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

Cortex-M3 的SVC、PendSV异常,与操作系统(ucos实时系统)
SVC异常是? PendSV异常是? ucos 任务切换时机? ucos 如何满足实时性(实现)? ucos中,systick的优先级?SVC和PendSVSVC(系统服务调用,亦简称系统调用)和PendSV(可悬起系统调用),它们多用于在操作系统之上的软件开发中。SVC:SVC 用于产生系统函数的调用请求。 例如,操作系统不让用户程序直接访问硬件,而是通过提供一些系统服务函数,用户程序使用SVC 发出对系统服务函数的呼叫请求,以这种方法调用它们来间接访问硬件。 因此, 当用户程序想要控制特定的硬件时,它就会产生一个SVC 异常, 然后操作系统提供的SV
发表于 2019-12-11
Cortex-M3 的SVC、PendSV异常,与操作系统(ucos实时系统)
基于ARM Cortex-M0+内核的bootloader程序升级原理及代码解析
,对应三种处理方式 5. 查询BootLoader标志 6. 是否跳转 最后一步很关键的是跳转函数。跳转函数跳转函数的基本思想是将芯片的pc指针指向应用程序烧写的起始地址APP_START_Flash,然后sp调到APP_START_Flash + 4的位置也就是复位向量所在的地方,然后开始执行。下面是跳转函数的代码,该方法对于M0+核的芯片均适用,前提是sp和PC要正确。static void vControlSwitch(unsigned int sp,unsigned int pc){  asm("ldr   r0, [r0]");  asm
发表于 2019-12-11
基于ARM Cortex-M0+内核的bootloader程序升级原理及代码解析
STM32学习之路入门篇之指令集及cortex——m3的存储系统
; 3、Cortex-CM3的地址空间是4GB,程序可以在代码区,内部SRAM区以及RAM区执行。4GB粗线条划分:   1)、内部SRAM区的大小是512MB,用于让芯片制造商连接片上的SRAM,这个区通过系统总线来访问。在此区的下部,有一个1MB的位带区,该位带区还有一个对应的32MB的“位带别名区”,容纳了8M个“位变量”。位带区对应的是最低的1MB地址范围,而位带别名区里面的每个字对应位带区的一个比特。位带操作只适用于数据访问,不适用与取指操作。   2)、地址空间另一个512范围由片上外设(的寄存器)使用。这个区也有一条32MB的位带别名,以便于快捷的访问外设寄存器。 
发表于 2019-12-03
STM32学习之路入门篇之指令集及cortex——m3的存储系统
Cortex-M3学习LPC1768 - DAC实验
终于逮了个忙里偷闲的机会,就再学一下LPC1768的外围功能吧,循序渐进是学习的基本规则,也许LPC1768的DAC与8位单片机16位单片机里面集成的DAC操作类似,但是既然这是懒猫的学习日志,就顺便把DAC再好好复习一下了,或许能品出个什么味来^_^DAC是Digital to Analog Converter的缩写,中文名就是数模转换器,D/A转换器一般由数码寄存器、模拟电子开关电路、解码网络、求和电路及基准电压等几部分组成。如下图所示:图1-1 DAC原理框图数字量以串行或并行方式输入,存储于数码寄存器中,数码寄存器输出的名位数码分别控制对应的模拟开关,使数码为1的位在位权网络上产生与其值成正比的电流值或电压值,再由求和电路
发表于 2019-12-02
Cortex-M3学习LPC1768 - DAC实验
Cortex-M3之SysTick
SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常(异常号:15)。在以前,大多操作系统需要一个硬件定时器来产生操作系统需要的滴答中断,作为整个系统的时基。例如,为多个任务许以不同数目的时间片,确保没有一个任务能霸占系统;或者把每个定时器周期的某个时间范围赐予特定的任务等,还有操作系统提供的各种定时功能,都与这个滴答定时器有关。因此,需要一个定时器来产生周期性的中断,而且最好还让用户程序不能随意访问它的寄存器,以维持操作系统“心跳”的节律。 Cortex‐M3处理器内部包含了一个简单的定时器。因为所有的CM3芯片都带有这个定时器,软件在不同 CM3器件间的移植工作得以化简。该定时器的时钟源可以是内部时钟(FCLK
发表于 2019-12-02
Cortex-M3之SysTick
LPC11XX驱动1602程序_12MHz
LCD.c文件:#include "LPC11XX.h"#include "gpio.h"#include "main.h"#include "Delay.h"#include "LCD.h"/*-----------设置D0-D7为输出口-------------*/void Set_GPIO_Output(void){        LPC_GPIO2->DIR |= (0x1<<0);            
发表于 2019-11-30
小广播
何立民专栏 单片机及嵌入式宝典

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

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