JZ2440开发板-TFT LCD实验

发布者:TranquilJourney最新更新时间:2020-04-17 来源: eefocus关键字:JZ2440  开发板  TFT  LCD实验 手机看文章 扫描二维码
随时随地手机看文章

本实验CPU:s3c2440


LCD: 4.3寸  分辨率(Resolution)  480*272  TFT-LCD  型号AT043TN24 V.1


s3c2440 LCD控制器支持:


①1/2/4/8bpp调色板显示模式,16bpp/24bpp非调色板显示模式


当选定了LCD型号后,硬件工程师做出电路板后,LCD模块接线确定,显示模式就确定了,如本实验使用8bpp调色板显示模式和16bpp非调色板显示模式,两种模式均为565像素格式


NOTE:


①24bpp表示24bit per pixel  即每像素用24位表示,正好对应RRGGBB颜色值


24bpp内存数据格式为:

P1是位于内存地址000H的高位或地位的颜色值X,lcd控制器取像素值往数据线VD[0-23]发,其中RR->VD[16-23], GG->VD[8-15],BB->VD[0-7],然后可以第一个像素显示此颜色值X


②16bpp

显示器上像素由三部分红(R)/绿(G)/蓝(B)组成,称为三原色,每个颜色由8位表示,即每个颜色有256级,可以由此三原色构成其它的颜色,比如RGB(255,255,255)合成白色, color(AARRGGBB(AA表示透明度))为UINT32型,因此需要取出16位构成像素颜色值(如何取代码有介绍),然后将16位颜色值存到Framebuffer中


③8bpp调色板模式

其中P1表示索引值index,范围为00H-FFH(15-4表也可看出),


16bpp/8bpp程序 结构:

Ⅰ.main.c提供菜单选择8bpp或16bpp显示模式:

main.c:


int main()

{

    char c;

    

    uart0_init();   // 波特率115200,8N1(8个数据位,无校验位,1个停止位)

    

    while (1)

    {

        printf("rn##### Test TFT LCD #####rn");

        printf("[1] TFT240320 8Bitnr");

        printf("[2] TFT240320 16Bitnr");

/*

* author:xyc 添加支持480272 8Bit/16Bit

*/

        printf("[3] TFT480272 8Bitnr");

        printf("[4] TFT480272 16Bitnr");

        printf("Enter your selection: ");

 

        c = getc();

        printf("%cnr", c);

        switch (c)

        {

            case '1':

            {

                Test_Lcd_Tft_8Bit_240320();

                break;

            }

            

            case '2':

            {

                Test_Lcd_Tft_16Bit_240320();

                break;

            }

 

            case '3':

            {

                Test_Lcd_Tft_8Bit_480272();

                break;

            }

            

            case '4':

            {

                Test_Lcd_Tft_16Bit_480272();

                break;

            }

            default: 

                break;

        }

    }

    

    return 0;

}


Ⅱ.lcdlib.c调用lcddrv.c中的 Lcd_Port_Init()

Tft_Lcd_Init(MODE_TFT_8BIT_480272)

Lcd_PowerEnable(0, 1)

Lcd_EnvidOnOff(1)

ClearScr(0x0)

DrawLine(0  , 0  , 479, 0  , 0)

ClearScr(128)

ClearScrWithTmpPlt(0x0000ff)

等等用于初始化LCD引脚,初始化LCD控制器,打开电源,视频数据输出使能和背光等

lcdlib.c:


❶16bpp:

/* 

 * author:xyc  添加480272屏幕16bpp支持

 *     以480x272,16bpp的显示模式测试TFT LCD

 */

void Test_Lcd_Tft_16Bit_480272(void)

{

    Lcd_Port_Init();                     // 设置LCD引脚

    Tft_Lcd_Init(MODE_TFT_16BIT_480272); // 初始化LCD控制器

    Lcd_PowerEnable(0, 1);               // 设置LCD_PWREN有效,它用于打开LCD的电源

    Lcd_EnvidOnOff(1);                   // 使能LCD控制器输出信号

 

    ClearScr(0x0);  // 清屏,黑色

    printf("[TFT 64K COLOR(16bpp) LCD TEST]n");

 

    printf("1. Press any key to draw linen");

    getc();

    DrawLine(0  , 0  , 479, 0  , 0xff0000);     // 红色

    DrawLine(0  , 0  , 0  , 271, 0x00ff00);     // 绿色

    DrawLine(479, 0  , 479, 271, 0x0000ff);     // 蓝色

    DrawLine(0  , 271, 479, 271, 0xffffff);     // 白色

    DrawLine(0  , 0  , 479, 271, 0xffff00);     // 黄色

    DrawLine(479, 0  , 0  , 271, 0x8000ff);     // 紫色

    DrawLine(240, 0  , 240, 319, 0xe6e8fa);     // 银色

    DrawLine(0  , 136, 479, 136, 0xcd7f32);     // 金色

 

    printf("2. Press any key to draw circlesn");

    getc();

    Mire();

 

    printf("3. Press any key to fill the screem with one colorn");

    getc();

    ClearScr(0xff0000);             // 红色

 

    printf("4. Press any key to fill the screem by temporary paletten");

    getc();

    ClearScrWithTmpPlt(0x0000ff);   // 蓝色

 

    printf("5. Press any key stop the testingn");

    getc();

    Lcd_EnvidOnOff(0);

}


❷8bpp:

/* 

 * author:xyc 添加480272屏幕支持

 * 以480x272,8bpp的显示模式测试TFT LCD

 */

void Test_Lcd_Tft_8Bit_480272(void)

{

    Lcd_Port_Init();                     // 设置LCD引脚

    Tft_Lcd_Init(MODE_TFT_8BIT_480272);  // 初始化LCD控制器

    Lcd_PowerEnable(0, 1);               // 设置LCD_PWREN有效,它用于打开LCD的电源

    Lcd_EnvidOnOff(1);                   // 使能LCD控制器输出信号,背光打开

 

    Lcd_Palette8Bit_Init();     // 初始化调色板

    ClearScr(0x0);              // 清屏

    printf("[TFT 64K COLOR(16bpp) LCD TEST]n");

 

    printf("1. Press any key to draw linen");

    getc();

#if 0

    DrawLine(0  , 0  , 239, 0  , 0);    // 颜色为DEMO256pal[0]

    DrawLine(0  , 0  , 0  , 319, 1);    // 颜色为DEMO256pal[1]

    DrawLine(239, 0  , 239, 319, 2);    // ……

    DrawLine(0  , 319, 239, 319, 4);

    DrawLine(0  , 0  , 239, 319, 8);

    DrawLine(239, 0  , 0  , 319, 16);

    DrawLine(120, 0  , 120, 319, 32);

    DrawLine(0  , 160, 239, 160, 64);

#endif

    DrawLine(0  , 0  , 479, 0  , 0);     // 颜色为DEMO256pal[0]

    DrawLine(0  , 0  , 0  , 271, 1);     // 颜色为DEMO256pal[1]

    DrawLine(479, 0  , 479, 271, 2);     

    DrawLine(0  , 271, 479, 271, 4);     

    DrawLine(0  , 0  , 479, 271, 8);     

    DrawLine(479, 0  , 0  , 271, 16);     

    DrawLine(240, 0  , 240, 319, 32);    

    DrawLine(0  , 136, 479, 136, 64);   

 

    printf("2. Press any key to draw circlesn");

    getc();

    Mire();

 

    printf("3. Press any key to fill the screem with one colorn");

    getc();

    ClearScr(128);  //  输出单色图像,颜色为DEMO256pal[128]

 

    printf("4. Press any key to fill the screem by temporary paletten");

    getc(); 

    ClearScrWithTmpPlt(0x0000ff);       //  输出单色图像,颜色为蓝色

 

    printf("5. Press any key to fill the screem by paletten");

    getc();

    DisableTmpPlt();            // 关闭临时调色板寄存器

    ChangePalette(0xffff00);    // 改变整个调色板为黄色,输出单色图像

    

    printf("6. Press any key stop the testingn");

    getc();

    Lcd_EnvidOnOff(0);

}


1.1 lcddrv.c包含Lcd_Port_Init(),Tft_Lcd_Init(),Lcd_PowerEnable(),Lcd_EnvidOnOff(),Lcd_Palette8Bit_Init()函数的定义实现:

1.1.1 Lcd_Port_Init()设置GPC GPD端口为LCD控制信号和LCD视频数据等端口:

/*

 * 初始化用于LCD的引脚

 */

void Lcd_Port_Init(void)

{

    GPCUP   = 0xffffffff;   // 禁止内部上拉

    GPCCON  = 0xaaaaaaaa;   // GPIO管脚用于VD[7:0],LCDVF[2:0],VM,VFRAME,VLINE,VCLK,LEND 

    GPDUP   = 0xffffffff;   // 禁止内部上拉

    GPDCON  = 0xaaaaaaaa;   // GPIO管脚用于VD[23:8]

    /*author:xyc 背光关闭GPB0端口为LED背光口,而不是电源,所以注释有误*/

  GPBCON &= ~(GPB0_MSK);  // Power enable pin  

  GPBCON |= GPB0_out;

    GPBDAT &= ~(1<<0); // Power off

    printf("Initializing GPIO ports..........n");

}

1.1.2 Tft_Lcd_Init()设置LCD控制器时序,帧内存地址等等:

/*

 * 初始化LCD控制器

 * 输入参数:

 * type: 显示模式

 *      MODE_TFT_8BIT_240320  : 240*320 8bpp的TFT LCD

 *      MODE_TFT_16BIT_240320 : 240*320 16bpp的TFT LCD

 *      MODE_TFT_8BIT_480272  : 480*272 8bpp的TFT LCD

 *      MODE_TFT_16BIT_480272 : 480*272 16bpp的TFT LCD

 */

void Tft_Lcd_Init(int type)

{

    switch(type)

    {

/*

* author: xyc 添加480x272屏幕8Bpp支持

*/

    case MODE_TFT_8BIT_480272:

        /* 

         * 设置LCD控制器的控制寄存器LCDCON1~5

         * 1. LCDCON1:

         *    设置VCLK的频率:VCLK(Hz) = HCLK/[(CLKVAL+1)x2]

         *    选择LCD类型: TFT LCD   

         *    设置显示模式: 8BPP

[1] [2] [3]
关键字:JZ2440  开发板  TFT  LCD实验 引用地址:JZ2440开发板-TFT LCD实验

上一篇:02-JZ2440裸机学习之系统时钟和UART串口实验
下一篇:JZ2440开发板直连电脑实现三者互PING

推荐阅读最新更新时间:2024-11-12 10:36

ARM开发板系统移植-----rootfs的制作
前面两篇文章分别介绍了mini2440开发板上运行的bootloader和kernel,到这里系统启动后其实是停留在一个“僵死”的状态---无法挂载根文件系统。 这里将介绍如何制作一个根文件系统,并且挂载到内核中---即让内核能够访问到文件系统中的目录和文件。从用户的角度来看文件系统无非就是各个目录和文件,注意,这些目录和文件可以存在内存中,也可以存在Nand Flash 或者NOR Flash中,视具体的文件系统而定。本文就用基于内存的initram 和基于网络的nfs文件系统做例子介绍文件系统的概念。 首先什么是文件系统?就本人理解而言,它就是操作系统提供的一种抽象,即操作系统将存储介质抽象化,并提供一种访问这种抽象的
[单片机]
ARM<font color='red'>开发板</font>系统移植-----rootfs的制作
Boa Web服务器在PC和S3C2440开发板上移植
  boa是一个非常小巧的Web服务器,可执行代码只有约60KB。它是一个单任务Web服务器,只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求。但Boa支持CGI,能够为CGI程序fork出一个进程来执行。下面我们讲解以下boa如何在PC机(虚拟机RedHatAS5环境)完成移植修改工作。 一、下载Boa源码 下载地址: http://www.boa.org/或 http://labs.nevion.com/open-source/ 目前最新发行版本:0.94.13(05年更新版本)   下载 boa-0.94.13.tar.gz(注意:若从boa上下载的是boa-0.94.13.tar.tar,解压方式
[单片机]
Mouser备货Analog Devices ADSP-CM40x 240MHz混合信号开发板 处理器系列即将推出
Mouser Electronics现已备货Analog Devices高性能ADSPCM40x混合信号控制处理器系列评估板。 ADSP-CM40x采用32位ARM® CortexM4内核。 CortexM4是高性能CortexM3嵌入式处理器内核的超集。 ADSPCM40x CortexM4内核基于M3构建,在其基础上添加了数字信号处理(DSP)扩展,其中包括16位和32位单周期乘法累加器(MAC)、单周期双MAC、单周期有符号和无符号乘法指令,以及一个硬件除法器。 ADSPCM40x内核还支持SIMD算法,在一个时钟周期内可执行多个运算。 内核集成16 KB的L1指令缓存和一个IEEE754兼容型单精度浮点单元(FPU)。
[单片机]
FS2410 开发板上的内存搬移实验
一、目的 通过将 Nand Flash 前 4K 代码搬移到 SDRAM 中,了解如何初始化并使用 ARM 的内存, 为编写 ARM bootloader 和搬移内核到内存作准备。 二、代码 关于如何建立开发环境,在我的前一篇随笔(FS2401 发光二极管循环点亮)里有介绍, 请 参考。要初始化并使用内存需要了解一些很锁碎的细节,上来就讲这些知识点未免生涩,不 如在代码中穿插讲解来的直接。 @ 文件 head.s @ 作用: 关闭看门狗、设置内存、向 SDRAM 搬移 Nand Flash 的前 4K 代码、设置堆栈、 @ 调用已经搬移到 SDRAM 的 main 函数 .text .glo
[单片机]
HUD产业: 前装HUD加速上车,自主表现可圈可点
HUD,即抬头显示,将关键信息映射到驾驶员前面的透明介质或挡风玻璃上,减少低头看仪表和导航的次数,确保行车安全。迄今,已形成三种量产产品形态:C-HUD,W-HUD和AR-HUD。 2025年国内前装HUD渗透率将超30% 根据佐思汽研统计,2020年中国乘用车前装HUD安装量达到69.2万辆,同比增长101.2%;市场渗透率达到3.7%,同比增加2.0个百分点。2021上半年,HUD市场渗透率继续提升,接近5%,预计全年在8%左右;到2025年有望超过30%。 究其原因,主要有三点:一是随着汽车智能化的发展,以及投影单元技术的升级,HUD显示尺寸和信息不断提升,已成为智能座舱第三屏;二是自主龙头加快HUD上车,如长城、吉利
[嵌入式]
HUD产业: 前装HUD加速上车,自主表现可圈可点
喜讯!米尔电子成为瑞萨电子IDH生态合作伙伴
日前,领先的嵌入式处理器模组厂商米尔电子正式成为全球知名半导体厂商瑞萨电子(Renesas)IDH生态战略合作伙伴,双方将携手合作为行业开发者提供瑞萨RZ系列MPU等产品的平台开发和解决方案,致力于为工业HMI、工业控制、医疗器械、电力智能设备、新能源和工程机械等行业的嵌入式开发者提供配套核心板和开发板以及行业demo ,加速产品开发和上市。 合作签约仪式圆满完成 2023年4月11日,米尔电子和瑞萨电子在米尔SMT智慧工厂举行隆重的签约仪式,双方就瑞萨系列产品的开发达成战略合作,签署IDH合作协议。 图:瑞萨&米尔电子的战略合作签约仪式 (左二:瑞萨电子分销商管理高级总监 Alex CHAN、右二:瑞萨电子系
[嵌入式]
喜讯!米尔电子成为瑞萨电子IDH生态合作伙伴
国内首条G11掩膜版项目在成都启动
  路维光电位于成都高新区西区的高世代掩膜版新工厂成都路维今日举行了开工仪式。下面就随嵌入式小编一起来了解一下相关内容吧。   成都路维是路维光电设立的第三家工厂,专注于研发、生产高世代、高精度 TFT 掩膜产品以及新型掩膜技术的开发。G11掩膜版项目计划投资建设6条高世代掩膜版生产线,占地面积超过3万6千平米,项目建成后将成为我国最大的掩膜版制造基地,涵盖 TFT -G11及以下、 AMOLED 等Mask生产线,全面配套国内高世代、新型显示产业。G11掩腌版项目先期投资10-12亿元,可达成年销售收入15-16亿元,可实现年税收超3亿元,预计2018年四季度投产。   国内掩膜版行业因起步晚、技术堡垒高的原因,仅能够满足中低
[嵌入式]
迅为4412开发板实战之智能网关项目
智能网关的学习内容: 1 智能网关的概念; 2 智能网关的实现框架; 3 智能网关的例程分析。 1 智能网关的概念: 1.1 智能网关关键词搜索 智能家居网关,物联网智能网关,zigbee智能网关... 有大量的智能网关产品但是没有官方的定义! 1.2 什么是网关? 搜“网关”。 1.2.1 传统网关定义 TCP/IP协议中的概念。 不是嵌入式中的网关概念。 1.2.2 嵌入式中网关定义 例子1:智能家居中zigbee网关。 例子2:电力系统中的设备“终端服务器”。 网关:将一种协议转换为另外一种协议,实现数据转发而不做控制的设备。 1 协议转换; 2 数据转发; 3 不做控制。 1
[单片机]
迅为4412<font color='red'>开发板</font>实战之智能网关项目
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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