硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3357|回复: 2
收起左侧

分享一个V6-LCD双缓冲显示裸机基础工程

[复制链接]

85

主题

426

回帖

701

积分

金牌会员

积分
701
QQ
发表于 2019-9-20 22:59:58 | 显示全部楼层 |阅读模式
本帖最后由 雷鹏 于 2019-9-20 23:01 编辑

1.在新项目启动的时候,我们往往只需要LCD能显示一些简单的东西,显示硬件是否可靠,等程序框架都搭建起来了在去优化界面,前期还是需要一个基础工程,这就是我要分享这个工程的目的。
2.程序是在出厂程序的基础上裁剪的,只保留了LCD的显示和我们常用的功能,需要其他的功能可以根据出厂程序在添加或者修改。
3.显示界面的时候使用了  两个标红的函数,可以做到瞬间显示 不会有一个个元素绘制产生的感觉。
LCD_BeginDraw(); /*切换到备用显示区 要和   LCD_EndDraw(); 成对使用*/

4.定义一个全局变量uint8_t s_ChangeLayer=0; /*切换层标志 0 不切换 1 切换到第一块存储区 2 切换到备用存储区 */




5.在 函数 static void LCD429_ConfigLTDC(void) 最后添加中断开启代码
                LTDC_ITConfig(LTDC_IER_LIE, ENABLE);
                NVIC_SetPriority(LTDC_IRQn, 0);
                NVIC_EnableIRQ(LTDC_IRQn);        
               


6.修改两个显存切换函数,必须要成对使用

/*        函 数 名: LCD429_BeginDraw*/
void LCD429_BeginDraw(void)
{
        uint16_t *src;
        uint16_t *dst;
        src =  (uint16_t *)(LCD429_FRAME_BUFFER + BUFFER_OFFSET);        
        dst =  (uint16_t *)(LCD429_FRAME_BUFFER );        
        _DMA_Copy(src, dst, g_LcdHeight, g_LcdWidth, 0, 0);
        s_ChangeLayer =2;
        while(s_ChangeLayer);
}

/*函 数 名: LCD429_EndDraw*/
void LCD429_EndDraw(void)
{
        s_ChangeLayer=1;
        while(s_ChangeLayer);
}
7.中断服务程序

/*
*        函 数 名: LTDC_IRQHandler
*        功能说明: LTDC帧中断,用于管理多缓冲
*        形    参: 无
*        返 回 值: 无
*/
extern uint8_t s_ChangeLayer; /*切换层标志 0 不切换 1 切换到第一块存储区 2 切换到备用存储区 */
void LTDC_IRQHandler(void)
{
        LTDC->ICR = (uint32_t)LTDC_IER_LIE;
         switch (s_ChangeLayer)
         {
                 case 1 :
                                LTDC_LayerAddress(LTDC_Layer2, LCD429_FRAME_BUFFER+BUFFER_OFFSET);
                                LTDC_ReloadConfig(LTDC_SRCR_IMR);
                 break;
                 
                 case 2 :
                                LTDC_LayerAddress(LTDC_Layer2, LCD429_FRAME_BUFFER);         
                                LTDC_ReloadConfig(LTDC_SRCR_IMR);
                 break;
        
                 default :
                 break;
         }
        s_ChangeLayer=0;
}


8.调用方法
        {
                LCD_BeginDraw(); /*切换到备用显示区 要和   LCD_EndDraw(); 成对使用*/
                DispTopBar();                /* 显示顶部栏 */
                DispBottomBar();        /* 显示底部栏 */
                DispBackground();        /* 显示图标背景 */
                /* 显示图标阵列 */
                ArrayIcon();        /* 排列图标 */
                LCD_EndDraw();        /*切换到主显示区  要和   LCD_BeginDraw(); 成对使用 */
        }


9.发福利,分享工程代码,可以直接在V6开发板上直接运行,V7开发板也可以按照上述说明修改。




V6-LCD双缓冲显示裸机基础工程.zip (5.02 MB, 下载次数: 186)









评分

参与人数 1金币 +100 收起 理由
eric2013 + 100 很给力!

查看全部评分

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115668
QQ
发表于 2019-9-21 01:21:50 | 显示全部楼层


非常感谢楼主分享
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2024-7-26 21:14:27 | 显示全部楼层
2024考古
感谢了,这篇帖子对我帮助很大
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-11 06:42 , Processed in 0.252159 second(s), 39 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表