历史上的今天
返回首页

历史上的今天

今天是:2024年08月25日(星期日)

正在发生

2021年08月25日 | LPC1788 LCD 学习

2021-08-25 来源:eefocus

好不容易继续来搞搞这个单片机,虽然出了好多年,但是被ST打得体无完肤.就有LCD控制器,SDRAM这个优势来说,基本上已经到了老的的程度了.而且用起这个LCD,好像也不是特别的复杂,原来以为很麻烦的,因为手册说的什么专用DMA啊,专用图形加速啊.在调试过程中出现了好多次的闪屏,差点以为是自己的板子画得有问题,不过后来发现是总线占用过长,需要优化一下.


开始做LCD,肯定要开辟RAM空间.先算算我的屏幕是1024*600[LPC1788能支持到1024*768,就算是LPC4357这种鸡血,也是这个分辨率.],然后从RAM的尾端开始截取部分RAM来用.计算公式:


0xA1FFFFFF - 1024[H]*600[V]*2[Bit] = 0xA1ED3FFF | 153.6KB


然后实际上就是往自己RAM写东西,他就会倒到屏幕上.可以支持24位模式的,但是好像用不着,所以我还是乖乖的看看565模式.反正我也是垃圾屏了.因为多次要用到基地址,另外应该写一个刷屏测试的,所以,就先做好头文件,好让自己知道该干什么.


#ifndef __LCD70_LPC177x_8x_H_

#define __LCD70_LPC177x_8x_H_

#define LCD_SDRAM_BASE 0xA1ED3FFF // 0xA1FFFFFF - 1024[H]*600[V]*2[Bit] = 0xA1ED3FFF | 153.6KB

extern void LCD_Clear(uint16_t x0, uint16_t y0, uint16_t xSize, uint16_t ySize, uint32_t color);

extern void vLCD_Init(void);

#endif


大致梳理初始化流程:


设置基地址UPBASE

设置IO复用

打开电源和背光

打开LCD外设时钟

设置分频和时序

清空调色板

使能LCD


其实初始化代码大多数抄我这个的就可以,哪里需要额外配置的,我这儿说说:


void vLCD_Init(void)

{

    uint32_t i;

    uint32_t *pPal;

    LPC_LCD->UPBASE = (uint32_t)LCD_SDRAM_BASE;

    LPC_IOCON->P2_12 = 0x25; //LCDR3

    LPC_IOCON->P2_6  = 0x27;     //LCDR4

    LPC_IOCON->P2_7  = 0x27; //LCDR5

    LPC_IOCON->P2_8 =  0x27; //LCDR6

    LPC_IOCON->P2_9  = 0x27; //LCDR7

    LPC_IOCON->P1_20 = 0x27; //LCDG2

    LPC_IOCON->P1_21 = 0x27; //LCDG3

    LPC_IOCON->P1_22 = 0x27; //LCDG4

    LPC_IOCON->P1_23 = 0x27; //LCDG5

    LPC_IOCON->P1_24 = 0x27; //LCDG6

    LPC_IOCON->P1_25 = 0x27; //LCDG7

    LPC_IOCON->P2_13 = 0x27; //LCDB3

    LPC_IOCON->P1_26 = 0x27;    //LCDB4

    LPC_IOCON->P1_27 = 0x27; //LCDB5

    LPC_IOCON->P1_28 = 0x27; //LCDB6

    LPC_IOCON->P1_29 = 0x27; //LCDB7

    LPC_IOCON->P2_0  = 0x27; //PWR

    LPC_IOCON->P2_2  = 0x27; //CP

    LPC_IOCON->P2_3  = 0x27; //FP

    LPC_IOCON->P2_4  = 0x27; //AC

    LPC_IOCON->P2_5  = 0x27; //LP

    // 3V3电源控制脚

    LPC_IOCON->P5_1 = 0x20;

    // 5V电源控制脚

    LPC_IOCON->P5_2 = 0x20;

    /*3V3 5V power enable*/

    LPC_GPIO5->DIR = (1 << 1) | (1 << 2);

    LPC_GPIO5->CLR = (1 << 1) | (1 << 2);

    // 背光控制脚

    LPC_IOCON->P2_1 = 0x20;

    /*Back light enable for 4.3*/

    LPC_GPIO2->DIR |= (1 << 1);

    LPC_GPIO2->CLR |= (1 << 1);

    //Turn on LCD controller power/clock control bit

    LPC_SC->PCONP |= ((uint32_t)(1 << 0));

    LPC_SC->LCD_CFG = 0x03;

    // Disable cursor

    LPC_LCD->CRSR_CTRL &= ~(1 << 0);

    // disable GLCD controller

    LPC_LCD->CTRL = 0;

    // RGB565

    LPC_LCD->CTRL |= (6 << 1);

    // TFT panel

    LPC_LCD->CTRL |= (1 << 5);

    // single panel

    LPC_LCD->CTRL &= ~(1 << 7);

    // notmal output

    LPC_LCD->CTRL &= ~(1 << 8);

    // little endian byte order

    LPC_LCD->CTRL &= ~(1 << 9);

    // little endian pix order

    LPC_LCD->CTRL &= ~(1 << 10);

    // disable power

    LPC_LCD->CTRL &= ~(1 << 11);

    LPC_LCD->TIMH = 0x9F9F28FC;

    LPC_LCD->TIMV = 0x170C2657;

    LPC_LCD->LE = 0;

    LPC_LCD->INTMSK = 0;

    LPC_LCD->POL  = (0x01 << 26) | ((1024 - 1) << 16) | (0x0 << 14) | (0x0 << 13) | (0x0 << 12) | (0x0 << 11);

    LPC_LCD->UPBASE = (uint32_t)((uint16_t *)LCD_SDRAM_BASE);

    /* clear palette */

    pPal = (uint32_t *) (&(LPC_LCD->PAL));

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

    {

        *pPal = 0;

        pPal++;

    }

    // 使用LCD控制器

    LPC_LCD->CTRL |= (1 << 0);

    LPC_LCD->CTRL |= (1 << 11);

}


如果布线不一样,就改IO的,LPC_LCD->TIMH和LPC_LCD->TIMV需要根据手册计算.

1

这些对着你屏幕手册写就可以,而POL,则只需要改掉1024这值,然后如果没显示,那肯定是时钟过高,那要调整CFG,CFG越低其实越好的,对于刷新率要求不是很高的情况下.因为我屏幕比较大,所以0x03已经足够低了,如果你分辨率很低的话,比如480x272.

推荐阅读

史海拾趣

Applied Engineering Products (AEP)公司的发展小趣事

随着国内市场的饱和,AEP公司开始寻求海外市场的拓展。公司通过与国外知名企业建立合作关系,共同研发新产品,成功打开了国际市场的大门。同时,AEP公司还积极参加国际电子展会和技术交流会,与全球同行交流学习,不断提升自身技术水平。在国际合作的过程中,AEP公司的品牌影响力逐渐增强,成为了电子行业中备受瞩目的企业之一。

Centellax Inc公司的发展小趣事

Centellax Inc公司自成立以来,一直致力于电子通信技术的研发与创新。在成立初期,公司凭借其独特的测试测量技术,在光通信行业中崭露头角。随着技术的不断迭代和市场的扩大,Centellax逐渐积累了大量的专利和知识产权,为公司的长期发展奠定了坚实的基础。

在技术创新方面,Centellax不断投入研发资源,推出了一系列高性能的测试测量设备。这些设备不仅满足了客户对高速器件深入分析的需求,还提升了公司在行业内的竞争力。同时,Centellax还积极与高校、研究机构等合作,共同推动电子通信技术的进步。

Emerson公司的发展小趣事

进入21世纪后,Emerson继续坚持创新战略,通过不断研发新技术和产品,保持其在电气行业的领先地位。公司注重环保和可持续发展,推出了一系列高效节能的电气产品和解决方案。同时,Emerson还积极拥抱数字化和智能化趋势,通过引入人工智能、物联网等先进技术,推动公司业务的数字化转型。此外,Emerson还积极参与全球竞争和合作,通过跨国并购和战略合作,不断拓展其全球市场份额和影响力。

Embedded Planet公司的发展小趣事

作为一家负责任的企业,Embedded Planet公司一直将绿色环保理念融入产品设计和生产过程中。公司积极采用环保材料和技术,努力降低产品对环境的负面影响。同时,公司还倡导员工参与环保活动,共同为地球的可持续发展贡献力量。这些环保实践不仅提升了公司的社会形象,也为公司赢得了更多客户的信任和支持。

歌尔(Goertek)公司的发展小趣事

作为一家负责任的企业,Embedded Planet公司一直将绿色环保理念融入产品设计和生产过程中。公司积极采用环保材料和技术,努力降低产品对环境的负面影响。同时,公司还倡导员工参与环保活动,共同为地球的可持续发展贡献力量。这些环保实践不仅提升了公司的社会形象,也为公司赢得了更多客户的信任和支持。

EBK Kruger GmbH & Co KG公司的发展小趣事

为了提升产品质量和满足客户需求,EBK Kruger开始建立严格的质量管理体系。公司引进了国际先进的生产设备和检测设备,并对员工进行了系统的质量培训。通过不懈的努力,EBK Kruger的产品质量得到了显著提升,赢得了客户的广泛赞誉。同时,公司还获得了多项国际质量认证,进一步提升了品牌形象。

问答坊 | AI 解惑

全国大学生电子设计竞赛历年试题

本帖最后由 paulhyde 于 2014-9-15 08:55 编辑 全国大学生电子设计竞赛历年试题  …

查看全部问答>

自己组装生产摄像机优势在哪?

本人从事安防行业5年,一路走来,一直在做监控摄像机这一块,发现自己组装生产摄像机,有以下几大优势,供大家参考: 第一:摄像机本身组装很简单,技术含量不高,不如自己动手,还学会了组装,与摄像机内部结构。 第二:自己组装生产摄像机,价格 ...…

查看全部问答>

3D报纸引领阅读潮流 成本与内容成制约发展瓶颈

本帖最后由 jameswangsynnex 于 2015-3-3 19:57 编辑 自2009年年底起,3D在国内成为了“时尚”的代名词,继3D电影《阿凡达》、《爱丽丝梦游仙境》在中国市场赚得盆满钵满,3D似乎也成为了报刊企业的又一掘金点。   2010年4月16日,湖北《十堰晚 ...…

查看全部问答>

关于开发CDMA的通信模块!

先祝各位达人元旦快乐! 我老板现在想开发CDMA的通信模块,就是网上很多卖的那种,可以通过串口或其他通用接口进行CDMA无线通信,但我查了很长时间仍然没有头绪……望各位达人指点一二: 用于开发CDMA模块一般都有什么芯片?我看网上大部分都是高 ...…

查看全部问答>

请教关于Powerpc文件系统的问题

Powerpc现在编译的文件系统是jff2格式,用串口线先传倒powerpc的RAM里,再复制进flash,但是现在文件系统似乎限制了大小,如果传3M左右就能正常启动,如果大于4M就不能正常启动,系统会不停重启。但是如果系统能正常启动后,用FTP上传文件,则没有 ...…

查看全部问答>

workbench!!

之前用的是vxworks+Tornado开发方式,一切比较顺利!! 最近单位买了最新版的vxworks,开发环境是workbench,刚接触,本打算先做启动软盘尝试启动vxworks,可发现每次编译后,目标机出现v1.6++++++++++++++++++然后又重起,尝试了各种方法,都是这样,请各位 ...…

查看全部问答>

小弟碰到个很奇怪的问题

S3C44B0X那块板子,能在线调试并且LCD显示正常,但是将程序烧录进去后,却发现LCD没有显示了。这是怎么回事呢?有哪位大虾遇到过同样的问题吗? 做LED实验却不管在线调试还是将程序烧录进去,都能得到正确的结果。…

查看全部问答>

【芯币兑换】AVR ATmega16学习板标准原理图

下面是最终版原理图,请大家参考 …

查看全部问答>

有湖北的吗?今年怎么还不出设备清单??

本帖最后由 paulhyde 于 2014-9-15 09:03 编辑 都12号了,还不出设备清单,往年都有的,武大咋搞的!!!  …

查看全部问答>