历史上的今天

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

正在发生

2021年08月25日 | LPC1788 LCD 学习

发布者:DazzlingSpirit 来源: eefocus关键字:LPC1788  LCD  单片机 手机看文章 扫描二维码
随时随地手机看文章

好不容易继续来搞搞这个单片机,虽然出了好多年,但是被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.

关键字:LPC1788  LCD  单片机 引用地址:LPC1788 LCD 学习

上一篇:LPC1788---串口设置
下一篇:基于LPC1788的SSP1引脚的正确使用方法及注意事项

推荐阅读

眼下AI备受瞩目,许多商界和政府领导人在认真思考正确的举措。在实验室进展更是大家关心的,毕竟学术和企业研究人员发现的成果将奠定AI在未来几年的发展方向。开发机器学习模型需要一个耗时、专家驱动的工作流程,这个流程包括数据准备、特征选择、模型或技术选择、训练以及调优等。自动化机器学习AutoML技术,可使用许多不同的统计和深度学习技术,旨在使...
随着科技的发展以及技术的成熟,机器人技术正快速拓展至人类生活的各个方面,医疗机器人、特种机器人、仓储物流机器人、协作机器人等,各种新兴机器人与人类之间开展互动和探索,并且为人类提供协助和服务,日益影响人类及其生活。 在工业4.0与中国智造的变革浪潮中,一批以智能制造、智慧服务为使命与愿景的机器人企业竞相涌现,其中江西太空机器人科...
第七届深圳国际智能装备产业博览会 第十届深圳国际装备产业博览会 F1 展会概况 第七届深圳国际智能装备产业博览会暨第十届深圳国际电子装备产业博览会【以下简称EeIE2021】以“智能改变未来,产业促进发展”为主题,定位于创新型、专业性和国际化,集中展示深圳智能装备产业的发展成就,以打造全球智能装备领域第一展会平台为目标。 EeIE2021将于11月4...

史海拾趣

问答坊 | AI 解惑

深圳电子开发团队承接外包项目

团队介绍: 深圳无线互联技术是一个专业从事基于无线通信和嵌入式系统的软硬件产品研发和相关技术咨询服务的高科技 团队,主要产品线涉及到嵌入式系统、无线数传模块、Zigbee无线传感网络、无线三表抄表、矿井人员定位、无线数据采 集、安全监控 ...…

查看全部问答∨

基于单片机的自动血压监控系统

0 引 言 目前医院使用的自动血压监控系统大多为进口设备,价格昂贵,就医成本高。本文所讨论的系统价格低廉,测量准确,有其独特之处,具有很高的实用价值。 1系统功能和构成 该系统由一台PC机实现数据接收和数据管理,再配合每个病房单独使用的 ...…

查看全部问答∨

LPC1114串口收发完成

      接收函数就要 自己看芯片手册啦  , 今天弄完!!!, 但是现在LPC1114  是只有一个串口的.!!   看看利用SPI口做下实验啦!!!…

查看全部问答∨

为什么禁止上拉

用ARM9 S3C2440做跑马灯的实验时,要禁止上拉电阻,请问这是为什么啊?…

查看全部问答∨

ISAPI filter的注册问题

现在我想知道要在哪里能注册上isapi filter并且能进行访问 我在HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/W3SVC/Parameters/FilterDLL 下面给出了 Filter的全路径 进行访问还是不行 在HKEY_LOCAL_MACHINE\\COMM\\HTTPD\\Filter D ...…

查看全部问答∨

陕西杨工c8051f单片机博客

手机 13002928013 http://c8051fmcu.blog.sohu.com…

查看全部问答∨

请教2个函数

1、我定义char a[10];          int i =0; 可以用        _snprintf(a, 10, "%d", i); 但使用RtlStringCchPrintfW(a, 10, "%d", i)时出错 2、我定义BK_CMD_T tAtCmd;     ...…

查看全部问答∨

大家学习AVR单片机的详细过程

我是大二的学生,学AVR单片机才不过一个月,但通过和51的对比学习,上手还是挺快的。这里记录下我学习的过程,感觉自己走了不少弯路,为了避免更多初学者也同样绕太多弯路,希望广大工程师都详细介绍自己怎样起步学习AVR单片机的。也给我这个初学者 ...…

查看全部问答∨

proteus 中ads1100是什么?

proteus 中ads1100是什么?…

查看全部问答∨

我的Beaglebone测试环境

上个图吧,有时间的时候我就把玩一下,呵呵…

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

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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