|
本帖最后由 雷鹏 于 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)
|
评分
-
查看全部评分
|